Многопроцессорная обработка в python: добавление в функцию - PullRequest
0 голосов
/ 19 мая 2019

У меня есть функция, примененная к списку, и мне нужно распараллелить ее.Я разделил список на test_1, test_2, test_3 и добавил результат каждого в res_1, res_2, res_3 , чтобы объединить их позже, и использовал функции Process и current_process из многопроцессорной библиотеки следующим образом:

def foo(objs, res):
  res = []
  print(f'{current_process().name} started.')
  for i in tqdm(objs):
      res.append(i * 2)
  print(f'{current_process().name} done.')

procs = []
res_1, res_2, res_3 = [], [], []
proc_1 = Process(target=foo, args=(test_1, res_1,))
procs.append(proc_1)
proc_1.start()

proc_2 = Process(target=foo, args=(test_2, res_2,))
procs.append(proc_2)
proc_2.start()

proc_3 = Process(target=foo, args=(test_3, res_3,))
procs.append(proc_3)
proc_3.start()

for proc in procs:
    proc.join()

Однако эти операции не добавляют элементы в списки - после завершения всех процессов я получаю пустые списки res_1, res_2, res_3.Более того, когда я запускаю MainProcess с этой функцией, все в порядке.Что не так и как это исправить?Спасибо!

...