У меня была странная проблема. У меня есть файл формата:
START
1
2
STOP
lllllllll
START
3
5
6
STOP
 и я хочу читать строки между START и STOP в качестве блоков и использовать my_f для обработки каждого блока.
def block_generator(file):
with open(file) as lines:
    for line in lines:
        if line == 'START': 
            block=itertools.takewhile(lambda x:x!='STOP',lines) 
            yield block   
и в моей основной функции я попытался использовать map(), чтобы выполнить эту работу. Это сработало.
blocks=block_generator(file)
map(my_f,blocks)
действительно даст мне то, что я хочу. Но когда я пробовал то же самое с multiprocessing.Pool.map(), он дал мне ошибку, сказав, что takewhile() хочет взять 2 аргумента, было дано 0.
    blocks=block_generator(file)
    p=multiprocessing.Pool(4) 
    p.map(my_f,blocks)
Это ошибка?
- Файл содержит более 1000000 блоков, каждый из которых имеет менее 100 строк.
- Я принимаю форму ответа untubu.
- Но, может быть, я просто разделил файл и использовал n экземпляр моего оригинального script без многопроцессорной обработки для их обработки, затем сгруппировал результаты вместе. Таким образом, вы никогда не ошибетесь, пока script работает с небольшим файлом.
