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

标签 python parallel-processing multiprocessing return-value joblib

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

相关文章:

python - Celery:组中的一个子任务总是超时

parallel-processing - torch.nn.DataParallel 如何改变输出大小?

python - 如何在 python 中添加暂停而不干扰其他代码

python - Pandas Dataframe 过滤列并返回列名称

python - 如何从 Python 脚本上传字节图像到 Google Cloud Storage

python - 如何覆盖 models.py 中的 __str__ ?

haskell - parList 和 parBuffer 如何选择?

java - 进程内通信方式

python - 如何同时加入一个 multiprocessing.Process() 列表?

python - 一次获取 NumPy 数组中多个元素的索引