【发布时间】:2023-02-23 07:12:55
【问题描述】:
我的目标是在 python 字典上使用 map reduce aka Multiprocessing pool。我希望它将键值对映射到不同的核心,然后将结果聚合为字典。
from multiprocessing.pool import Pool
elems = {i:i for i in range(1_000_000)}
def func(x):
return (x, elems[x]**2)
with Pool() as pool:
results = pool.map(func, elems.keys())
results = {a:b for a,b in results}
这是一个有点棘手的解决方案,但是否有更 Pythonic 的方式来接收字典输入并使用 Python 中的多处理池生成字典输出?
【问题讨论】:
-
不清楚你的意思。什么输入?
pool.map的输入可能只是elems(实际上等同于elems.keys())...所以从这个意义上说,输入是dict。那么你到底想要什么?我不清楚。如果要映射键值对,那么使用elems.items(),那么x就是一个键值对。 -
我假设
pool.map按顺序返回结果,如果是这样,为什么不只做results = dict(zip(elems.keys(), results)),让results只返回elems[x]**2? -
顺便说一句,
results = {a:b for a,b in results}只能是results = dict(results),一般来说,{k:v for k,v in whatever}只能是dict(whatever)。
标签: python dictionary multiprocessing