use*_*768 8 python multiprocessing
我发现很多类似的问题,但没有答案.对于简单数组,有多处理.Array.对于稀疏矩阵或任何其他任意对象,我找到manager.namespace.所以我尝试了下面的代码:
from scipy import sparse
from multiprocessing import Pool
import multiprocessing
import functools
def myfunc(x,ns):
return ns.A[x,:]*ns.A*ns.A[:,x]
manager = multiprocessing.Manager()
Global = manager.Namespace()
pool=Pool()
Global.A=sparse.rand(10000,10000,0.5,'csr')
myfunc2=functools.partial(myfunc,ns=Global)
r=pool.map(myfunc2, range(100))
Run Code Online (Sandbox Code Playgroud)
代码有效,但效率不高.16名工人中只有4名工作.原因是,我猜,经理只允许一个工人一次访问数据.由于数据是只读的,我真的不需要锁.那么有更有效的方法吗?
ps,我见过有人在谈论copy-on-write fork().我真的不明白它是什么,但它不起作用.如果我先生成A并执行Pool(),则每个进程都会有一个A的副本.
先感谢您.
| 归档时间: |
|
| 查看次数: |
714 次 |
| 最近记录: |