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



