小编Mig*_*uel的帖子

Python Joblib Parallel:如何合并每个工作人员的结果?

语境

我有一个函数可以生成一个大型二维numpy数组(具有固定形状)作为输出。joblib我在 8 个 CPU 上使用(Parallel带有后端)调用此函数 1000 次multiprocessing。在工作结束时,我将所有数组按元素相加(使用np.sum)以生成我感兴趣的单个二维数组。但是,当我尝试这样做时,我耗尽了 RAM。我认为这是因为 1000 个数组需要存储在 RAM 中,直到最后求和。

问题

有没有办法让每个工作人员在运行时将其数组相加?例如,worker 1 会将数组 2 添加到数组 1,然后在计算数组 3 之前丢弃数组 2,依此类推。这样,在任何时间点,RAM 中最多只能存储 8 个数组(对于 8 个 CPU),并且最后可以对这些数组进行求和以获得相同的答案。

python parallel-processing ram joblib

8
推荐指数
1
解决办法
3805
查看次数

Flask 中与 joblib 并行计算

我有一个python需要使用不同参数值重复调用的函数。我想在多个 CPU 上并行执行此操作。我已经使用该joblib模块成功完成了此操作。我现在想让我的代码作为网络应用程序使用,在多个 CPUflask上运行AWS EC2 instance。这是我尝试过的一个玩具示例:

from flask import Flask
from joblib import Parallel, delayed
from time import sleep

def myfunc(x):
    sleep(5)
    return x

application = Flask(__name__)

@application.route('/', methods = ['GET'])
def getresult():
    out = Parallel(n_jobs=-1, verbose=10)(delayed(myfunc)(i) for i in range(5))
    return str(sum(out))

if __name__ == "__main__":
    application.debug = True
    application.run()
Run Code Online (Sandbox Code Playgroud)

问题是该代码不能在多个 CPU 上并行运行。我收到以下警告和输出(经过的时间确认它没有并行运行):

    /Library/anaconda/lib/python3.6/site-packages/joblib/parallel.py:547:
    UserWarning: Multiprocessing-backed parallel loops cannot be nested below 
    threads, setting n_jobs=1
      **self._backend_args)
    [Parallel(n_jobs=-1)]: Done   1 …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing flask joblib

5
推荐指数
1
解决办法
1138
查看次数

标签 统计

joblib ×2

parallel-processing ×2

python ×2

flask ×1

ram ×1