我有两个对象
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))
这是如何完成的?
最佳答案
如果您只是想访问它,则可以。您可以从 multiprocessing
创建的所有进程的全局变量中读取数据。
但是,如果您想写入字典(注意不要覆盖),您可以使用共享内存对象。 multiprocessing
有一个内置的manager
,您可以在其中调用所有共享内存对象,例如列表、字典。
您在参数中传递所有对象,因此它将可用于所有进程,但是如果您在对象内部进行更改,它不会是永久的,因为它不会通过简单的函数而永久存在。
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
关于python - 在进程之间共享 numpy 和 scipy 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41017319/