我使用 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/