繁体   English   中英

将参数和manager.dict传递到python 2.7中的多处理池中

[英]passing arguments and manager.dict to pool in multiprocessing in python 2.7

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

我可以拿这个吗

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用于多个参数,您只需要使其成为一个元组并添加包装器即可。 这也适用于传递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传递给函数)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM