Если вы просто хотите получить к нему доступ, вы можете. Вы можете читать данные из глобальных переменных во всех процессах, созданных multiprocessing
.
Однако, если вы хотите написать, например, словарь (с осторожностью не переписывать), вы можете использовать объекты общей памяти. multiprocessing
имеет встроенный manager
, откуда вы можете вызывать все объекты общей памяти, такие как списки, dicts.
Вы передаете все свои объекты в аргументах, поэтому он будет доступен для всех процессов, однако, если вы внесете изменения внутри объекта, он не будет постоянным, поскольку он не будет постоянным с простой функцией.
Простой пример для Numpy массива:
import numpy as np
import multiprocessing
a = np.zeros(5)
def func(b):
ns.array += b
return
manager = multiprocessing.Manager()
ns = manager.Namespace()
ns.array = np.zeros(5)
pool = multiprocessing.Pool(2)
list(pool.imap_unordered(func, [1,2]))
print(ns.array)
Выведет [ 3. 3. 3. 3. 3.]
Вот еще очень подробное решение: https://stackoverflow.com/a/7908612/4555249
Я хочу, чтобы иметь возможность читать и писать. Я видел менеджера, но они работают с 'numpy.array' и' scipy.sparse.csr_matrix'? – Chicony
Как я писал, вы можете читать все глобальные переменные внутри каждого процесса, порожденного «многопроцессорностью». Вы даже не должны передавать их в качестве аргументов. –
Но я хочу также иметь возможность редактировать их, а не просто читать. – Chicony