gpt4 book ai didi

Python 多处理池传递函数参数

转载 作者:太空宇宙 更新时间:2023-11-04 09:03:09 24 4
gpt4 key购买 nike

我有 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]) in order to paralelize the whole process but it throws an error saying "method() takes exactly 16 arguments, 1 given"

我也尝试过使用 Threads,但并没有太大改善。

感谢您的帮助!

干杯

最佳答案

Pool.map 旨在对您作为第二个参数传递的迭代器中的每个值调用方法。因此,在您的示例中,它将尝试并行执行以下操作:

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,从而做一些比多重嵌套 for 循环更好的事情。 map 。但这取决于 #assign 4 variables from list* 实际执行的操作。

关于Python 多处理池传递函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23501789/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com