Хорошо, поскольку Обновления глобальной переменной Python для многопроцессорных систем, не возвращаемые родительскому элементу , объясняют, что глобальное состояние не распределяется между процессами.
Вы можете поделиться состоянием, используя, например, multiprocessing.Queue
.
from multiprocessing import Pool, Queue
if __name__ == "__main__":
jj = ()
q = Queue()
def f(x):
global jj
jj += (x * x,)
def f_multi(x):
q.put(x * x)
# Section A
for ii in range(20):
f(ii)
print(jj)
# Section B
pool = Pool(processes=4)
pool.map(f_multi, range(20))
pool.close()
stop = "STOP"
q.put(stop)
items = []
for i in iter(q.get, stop):
items.append(i)
print(tuple(items))
В качестве альтернативы вы можете использовать print(tuple(sorted(items)))
, чтобы получить значения в том же порядке, что и Section A
.4 процесса работают над задачей в Section B
и, следовательно, «неупорядоченный» результат.