Так что проблема в том, что когда вы разбиваете вещи на пулы, у вас больше нет общего глобального пространства имен, которое вы сейчас используете (ab). Так что давайте просто перепишем это, чтобы все прошло правильно.
def extract(text_lines):
treatments = dict(tr01=[], tr02=[], tr03=[], tr04=[])
for line in text_lines:
treatments['tr01'].append(treatment_a(line, args))
treatments['tr02'].append(treatment_b(line, args))
treatments['tr03'].append(treatment_c(line, args))
treatments['tr04'].append(treatment_d(line, args))
return treatments
def line_gen(lines, chunk_size=1):
for i in range(0, len(lines), chunk_size):
yield lines[i:i + chunk_size]
for file in folder:
text_lines = read_file_into_list(file_path)
treatments = dict(tr01=[], tr02=[], tr03=[], tr04=[])
p = Pool(6)
for treat_data in p.imap(extract, line_gen(text_lines, chunk_size=int(len(text_lines)/6))):
for tr, data in treat_data.items():
treatments[tr].extend(data)
# Do something with all your data in the treatments dict
Это должно накапливать все данные в диктовку, называемую treatments
, потому что она возвращает данные из вашего дочернего процесса, который выполняет extract
, и затем вы можете записывать данные любым удобным для вас способом. ,