python - 在进程之间共享 numpy 和 scipy 对象

标签 python numpy scipy shared-memory python-multiprocessing

我有两个对象

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/

相关文章:

python - for 循环打印括号内

python - 根据条件转换 Pandas 数据框列

python - 应用程序在执行函数时使 Python 崩溃

python - 访问 3D numpy 数组的切片

python - 在字符级别对单词列表进行编码

python - 在 numpy 中实现标准化过滤器的好方法

python - 在 Cython 中调用点积和线性代数运算?

python 3 : HTTP Error 302 while using urllib

python - 对称矩阵的逆

python - 将具有不同大小行的 txt 中的值读取到单个 numpy 数组中