Я пытаюсь использовать многопроцессорную обработку для обработки массива numpy. Но я не знаю, как вернуть результат процесса обратно в переменную dict.Невозможно изменить глобальную переменную dict с помощью mutliprocessing в python
Использование кода комментариев может привести к тому, что я ожидал. Но когда я пытаюсь использовать многопроцессорную обработку, я ничего не могу получить для max_rslts
, это пустой dict.
Пример кода:
from __future__ import print_function
from multiprocessing import Process
import numpy as np
def calc_max(a, step):
global max_rslts
max_rslts[step] = a[::step].max()
if __name__ == '__main__':
max_rslts = dict()
a1 = np.arange(16).reshape(4,4)
# for i in range(1,4):
# calc_max(a1, i)
# print(max_rslts)
jobs = []
for i in range(1,4):
p = Process(target=calc_max, args=(a1, i))
jobs.append(p)
p.start()
for j in jobs:
j.join()
print(a1)
print(max_rslts)
Да, многопроцессорная делает ** не ** Доля Глобалы набор после '__main__' побежал. Это характер использования нескольких процессов. –
Возможно, вы захотите прочитать [Обмен объектами между процессами] (http://docs.python.org/2/library/multiprocessing.html#exchanging-objects-between-processes) в документации по многопроцессорности. – lanzz