这看起来像您正在使用该multiprocessing
模块。你没有说,这是一个重要的信息。
实例上的.map()
函数multiprocessing.Pool()
有两个参数:一个函数和一个序列。该函数将使用序列中的连续值调用。
您不能在像 a 这样的可变变量中收集值dict
(在示例中,它是 argument 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
.