Я обрабатываю некоторые ascii-данные, делаю некоторые операции, а затем записываю все обратно в другой файл (работа выполняется post_processing_0.main
, не возвращая ничего). Я хочу распараллелить код с помощью модуля многопроцессорности, см. Следующий фрагмент кода:
from multiprocessing import Pool
import post_processing_0
def chunks(lst,n):
return [ lst[i::n] for i in xrange(n) ]
def main():
pool = Pool(processes=proc_num)
P={}
for i in range(0,proc_num):
P['process_'+str(i)]=pool.apply_async(post_processing_0.main, [split_list[i]])
pool.close()
pool.join()
proc_num=8
timesteps=100
list_to_do=range(0,timesteps)
split_list=chunks(list_to_do,proc_num)
main()
Я прочитал разницу между картой и асинхронным, но я не очень хорошо ее понимаю. Правильно ли применено мое многопроцессорное устройство?
В этом случае следует использовать map_async или apply_async? И почему?
Edit:
Я не думаю, что это дубликат вопроса Python multiprocessing.Pool: когда использовать apply, apply_async или map?. В этом вопросе ответ сосредоточен на порядке результата, который может быть получен с использованием двух функций. Здесь я спрашиваю: в чем разница, когда ничего не возвращается?