我有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)
我尝试过使用
pool.map(method,[var1,...,var16]) 为了对整个过程进行并行化,但它会抛出一个错误,说“method()只需要16个参数,1给出”
我也试过使用Threads,但它没有太大改进。
感谢你的帮助!
干杯
答案 0 :(得分:5)
Pool.map
旨在为您传递的迭代器中的每个值调用method
作为第二个参数。因此,在您的示例中,它将尝试并行执行以下操作:
method(var1)
method(var2)
method(var3)
...
method(var16)
我认为你想要做的是:
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()
这只是用它期望的16个参数调用method
,但是在后台进程中执行它。
通过使用itertools构建(var1,...,var16)元组的列表,然后可以传递给pool.map
,你也可以做一些比多个嵌套for循环更好的东西。 。但这取决于#assign 4 variables from list*
实际做了什么。