【发布时间】:2019-01-06 23:10:43
【问题描述】:
我使用 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)
有人有想法吗?
提前致谢
【问题讨论】:
-
您正在为每个
realRiderName返回一个调用best_power_strategy()的生成器。由于realRiderName中有三个元素,这就是你得到的结果的数量。 -
嗯,好的,那么如何并行返回 powerLoc、speedLoc、timeLoc 和 previousSpeedLoc?
-
所以如果我这样做
res = Parallel(n_jobs=3)(delayed(best_power_strategy)() for rider in realRiderName)print(res)我得到了` [({0}, {1}, {2}, {3}), ({0}, {1}, { 2}, {3}), ({0}, {1}, {2}, {3})]` 然后我如何将这个列表分成 4 个列表(每个数字一个)?
标签: python parallel-processing multiprocessing return-value joblib