gpt4 book ai didi

python - 在 python 2.7 中将参数和 manager.dict 传递给多处理池

转载 作者:太空宇宙 更新时间:2023-11-03 17:52:24 26 4
gpt4 key购买 nike

我想并行化一个函数,该函数将使用 Pool 而不是 Process 来更新共享字典,这样我就不会过度分配太多的 cpu。

即我可以接受这个吗

def my_function(bar,results):
results[bar] = bar*10

def paralell_XL():

from multiprocessing import Pool, Manager, Process

manager = Manager()
results=manager.dict()

jobs = []
for bar in foo:
p=Process(target=my_function, args=(bar, results))
jobs.append(p)
p.start()

for proc in jobs:
proc.join()

并将 paralell_XL() 函数更改为类似这样的内容?

def paralell_XL():

from multiprocessing import Pool, Manager, Process

manager = Manager()
results=manager.dict()

p = Pool(processes=4)
p.map(my_function,(foo,results))

尝试上面的方法会出现以下错误

TypeError: unsupported operand type(s) for //: 'int' and 'DictProxy'

谢谢

最佳答案

所以问题在于将许多参数传递给池。如此处所示 Python multiprocessing pool.map for multiple arguments你只需要把它变成一个元组并添加一个包装器。这也适用于将 manager.dict 作为参数传递。

def my_function(bar,results):
results[bar] = bar*10

def func_star(a_b):
"""Convert `f([1,2])` to `f(1,2)` call."""
return my_function(*a_b)

def paralell_XL():

from multiprocessing import Pool, Manager, Process
import itertools

manager = Manager()
results=manager.dict()

pool = Pool(processes=4)
pool.map(func_star, itertools.izip(foo, itertools.repeat(results)))

(请注意,我认为这个问题+答案值得保留,因为我并不完全清楚您是否能够以这种方式将 manager.dict 传递到函数中)

关于python - 在 python 2.7 中将参数和 manager.dict 传递给多处理池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28943106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com