У меня была странная проблема. У меня есть файл формата:
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 работает с небольшим файлом.