栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

看起来您正在使用该

multiprocessing
模块。您没有说,这是重要的信息。

实例

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

您不能像这样的可变

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

示例代码:

import multiprocessing as mpdef 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 mpdef 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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/659699.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号