您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python在并行进程之间共享字典

Python在并行进程之间共享字典

看起来您正在使用该multiprocessing模块。您没有说,这是重要的信息。

实例.map()上的函数带有multiprocessing.Pool()两个参数:函数和序列。将使用序列中的连续值调用函数

您不能像这样的可变dict变量中收集值(在示例中为y),因为您的代码将在多个不同的进程中运行。dict在另一个过程中将值写入a不会将该值发送回原始过程。但是如果使用Pool.map()其他进程,则将从每个函数调用返回结果,回到第一个进程。然后,您可以收集值以构建dict

示例代码

import multiprocessing as mp

def f(x):
    return (x, x*x)

if __name__ == '__main__':
    pool = mp.Pool()
    inputs = range(10)
    result = dict(pool.map(f, inputs))

result 被设置为: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}

让我们对其进行更改,以便x*x将其提升x为某种功能,而不是进行计算,并将提供该功能。让我们接受一个字符串键参数。这意味着f()需要接受一个元组参数,该元组将在哪里(key, x, p)并且它将进行计算x**p

import multiprocessing as mp

def f(tup):
    key, x, p = tup  # unpack tuple into variables
    return (key, x**p)

if __name__ == '__main__':
    pool = mp.Pool()
    inputs = range(10)
    inputs = [("1**1", 1, 1), ("2**2", 2, 2), ("2**3", 2, 3), ("3**3", 3, 3)]
    result = dict(pool.map(f, inputs))

如果您有多个序列,并且需要将它们连接在一起以构成上述单个序列,请考虑使用zip()itertools.product

python 2022/1/1 18:41:41 有284人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶