gpt4 book ai didi

python - joblib并行处理一个多返回值函数

转载 作者:行者123 更新时间:2023-11-28 22:17:08 26 4
gpt4 key购买 nike

我使用 joblib 来并行化一个函数(使用多处理)。但是,这个函数返回 4 个值,但是当我从 Parallel 获得结果时,它只给了我 3 个值

from joblib import Parallel, delayed 
import numpy as np
from array import array
import time

def best_power_strategy():
powerLoc = {0}
speedLoc = {1}
timeLoc = {2}
previousSpeedLoc = {3}
return powerLoc,speedLoc,timeLoc,previousSpeedLoc

if __name__ == "__main__":
realRiderName=['Rider 1', 'Rider 2', 'Rider 3']
powerLoc = {}
speedLoc = {}
timeLoc = {}
previousSpeedLoc = {}
powerLoc,speedLoc,timeLoc,previousSpeedLoc = Parallel(n_jobs=3)(delayed(best_power_strategy)() for rider in realRiderName)
print(powerLoc)
print(speedLoc)
print(timeLoc)
print(previousSpeedLoc)

结果是:

ValueError: not enough values to unpack (expected 4, got 3)

有人有想法吗?

提前致谢

最佳答案

如果您想将结果存储在四个单独的名称中,您可以将生成器的结果压缩在一起,然后将它们扩展为所需的名称,即:

# shortening the names for simplicity/readability
riders = ["Rider 1", "Rider 2", "Rider 3"]
p, s, t, pv = zip(*Parallel(n_jobs=3)(delayed(best_power_strategy)() for r in riders))

这将导致 p 包含所有 powerLoc 结果,s 包含所有 speedLoc 结果等等在...

现在,鉴于您的 best_power_strategy 函数本质上是静态的并且没有任何变化(您甚至没有向它发送 rider),这段代码非常无用因为您总是会得到相同的结果,但我认为您只是以此为例。

关于python - joblib并行处理一个多返回值函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51598399/

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