Cla*_*u S 1 python multiprocessing
我有4个嵌套循环,我循环列表列表,以及我从函数传递一些参数的函数,具体来说:
def method(var1, var2 ....., var 16):
#computation
pool = Pool()
for values1 in list_of_values1:
#assign 4 variables from the list
for values2 in list_of_values2:
#assign 4 variables from list
for values3 in list_of_values3:
#assign 4 variables from list
for values4 in list_of_values4:
#assign 4 variables from list
method(var1, ..., var16)
Run Code Online (Sandbox Code Playgroud)
我试过用过
pool.map(方法,[var1,...,var16])为了对整个进程进行并行化,但它抛出一个错误,说"method()只需要16个参数,1给出"
我也试过使用Threads,但它没有太大改进.
感谢你的帮助!
干杯
Pool.map旨在调用method您传递的迭代器中的每个值作为第二个参数.因此,在您的示例中,它将尝试并行执行以下操作:
method(var1)
method(var2)
method(var3)
...
method(var16)
Run Code Online (Sandbox Code Playgroud)
我想你想要做的是:
for values1 in list_of_values1:
#assign 4 variables from the list
for values2 in list_of_values2:
#assign 4 variables from list
for values3 in list_of_values3:
#assign 4 variables from list
for values4 in list_of_values4:
#assign 4 variables from list
pool.apply_async(method, (var1, ..., var16))
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud)
这只是调用method它期望的16个参数,但是在后台进程中执行它.
通过使用itertools构建(var1,...,var16)元组的列表,然后可以传递给它,你也可以做一些比多个嵌套for循环更好的东西pool.map.但这取决于#assign 4 variables from list*实际做了什么.
| 归档时间: |
|
| 查看次数: |
1058 次 |
| 最近记录: |