看起来您正在使用该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
。