我有两个对象
shared_array = numpy.zeros(20)
和
shared_matrix = scipy.sparse.csr_matrix((data, (row, col)),(20,20),dtype=numpy.float64)
我希望可以使用
创建的所有进程访问它multiprocessing.Process(target = random_function, args = (shared_matrix, shared_array))
这是怎么做到的?
答案 0 :(得分:2)
如果您只是想访问它,您可以。您可以在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