相关疑难解决方法(0)

使用multiprocessing.Manager.list而不是真实列表会使计算花费很长时间

我想multiprocessing从这个例子开始尝试不同的使用方法:

$ cat multi_bad.py 
import multiprocessing as mp
from time import sleep
from random import randint

def f(l, t):
#   sleep(30)
    return sum(x < t for x in l)

if __name__ == '__main__':
    l = [randint(1, 1000) for _ in range(25000)]
    t = [randint(1, 1000) for _ in range(4)]
#   sleep(15)
    pool = mp.Pool(processes=4)
    result = pool.starmap_async(f, [(l, x) for x in t])
    print(result.get())
Run Code Online (Sandbox Code Playgroud)

这里l是一个列表,当生成4个进程时,它会被复制4次.为避免这种情况,文档页面提供了使用队列,共享数组或代理对象multiprocessing.Manager.对于最后一个,我改变了以下定义l:

$ diff multi_bad.py multi_good.py 
10c10,11
<     l …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing

7
推荐指数
2
解决办法
1万
查看次数

标签 统计

multiprocessing ×1

python ×1