相关疑难解决方法(0)

多处理:如何在多个进程之间共享一个字典?

一个程序,它创建可在可连接队列上工作的多个进程Q,并最终可能操纵全局字典D来存储结果.(因此每个子进程可用于D存储其结果,并查看其他子进程正在生成的结果)

如果我在子进程中打印字典D,我会看到已对其进行的修改(即在D上).但是在主进程加入Q之后,如果我打印D,那就是空的dict!

我知道这是一个同步/锁定问题.有人能告诉我这里发生了什么,以及如何同步访问D?

python multiprocessing

98
推荐指数
4
解决办法
7万
查看次数

使用multiprocessing.pool.map传递kwargs

我想通过Pool.map()将关键字参数传递给我的worker-function.在搜索论坛时,我找不到一个明确的例子.

示例代码:

import multiprocessing as mp

def worker((x,y), **kwargs):
    kwarg_test = kwargs.get('kwarg_test', False)
    print("kwarg_test = {}".format(kwarg_test))     
    if kwarg_test:
        print("Success")
    return x*y

def wrapper_process(**kwargs):
    jobs = []
    pool=mp.Pool(4)
    for i, n in enumerate(range(4)):
        jobs.append((n,i))
    pool.map(worker, jobs) #works
    pool.map(worker, jobs, kwargs) #how to do this?   

def main(**kwargs):
    worker((1,2),kwarg_test=True) #accepts kwargs
    wrapper_process(kwarg_test=True)

if __name__ == "__main__":    
    main()
Run Code Online (Sandbox Code Playgroud)

输出:

kwarg_test = True
Success
kwarg_test = False
kwarg_test = False
kwarg_test = False
kwarg_test = False
TypeError: unsupported operand type(s) for //: 'int' and 'dict' …
Run Code Online (Sandbox Code Playgroud)

python multiprocessing kwargs

13
推荐指数
2
解决办法
7983
查看次数

Python多重处理-将字典列表传递给池

这个问题可能是重复的。但是,我在这个话题上读了很多东西,但没有找到与我的情况相符的东西-至少,我不理解。

不便之处,敬请原谅。

我想做的是相当普遍的,将kwargs列表传递给pool.starmap(),以实现多处理。

这是我的简化案例:

def compute(firstArg, **kwargs): # A function that does things
    # Fancy computing stuff...
    # Saving to disk...
    return True

if __name__ ==  '__main__':
    args = [{
        'firstArg': "some data",
        'otherArg': "some other data"
        'andAnotherArg': x*2
    } for x in range(42)]

    pool = Pool(4)
    pool.starmap(compute, args)
    pool.close()
    pool.terminate()
Run Code Online (Sandbox Code Playgroud)

我以为starmap()将解压缩字典并将其作为关键字args传递给compute(),但是查看源代码(另请参见l.46),它仅发送键(或值?)。

因此它提出了:

TypeError: compute() takes 1 positional argument but 3 were given
Run Code Online (Sandbox Code Playgroud)

它必须是一种清晰,直接的方法来进行此操作。任何帮助将不胜感激。

这是一个非常类似的问题:Python多重处理-如何将kwargs传递给函数?

python pool multiprocessing

5
推荐指数
1
解决办法
958
查看次数

标签 统计

multiprocessing ×3

python ×3

kwargs ×1

pool ×1