该multiprocessing
模块适用于此用例。
其用法的一个简单完整示例是:
import multiprocessing
def my_function(x):
"""The function you want to compute in parallel."""
x += 1
return x
if __name__ == '__main__':
pool = multiprocessing.Pool()
results = pool.map(my_function, [1,2,3,4,5,6])
print(results)
该调用pool.map
将my_function
使用参数1
,然后2
等但并行执行。
请注意,my_function
它只接受一个参数。如果您有一个带参数的函数f
,n
只需编写一个函数f_helper
:
def f_helper(args):
f(*args)
并将参数打包成一个元组。例如:
results = pool.map(f_helper, [(1,2,3), (4,5,6), (7,8,9)])
相当于:
[f(1, 2, 3), f(4, 5, 6), f(7, 8, 9)]
但调用f
是并行执行的。
注意f
:由于代码将在不同的进程中运行,因此不会保留任何副作用。例如,如果您修改原始参数,主进程将不会看到此更改。您必须认为参数被复制并传递给子进程,子进程计算结果,该结果再次复制到主进程中。
如果您尝试计算的函数花费的时间不够长,则参数和返回值的复制可能需要更多时间,然后连续运行代码。
该文档包含模块使用的各种示例。