Python 烧瓶中joblib的并行计算

Python 烧瓶中joblib的并行计算,python,flask,parallel-processing,joblib,Python,Flask,Parallel Processing,Joblib,我有一个python函数,我需要用不同的参数值重复调用它。我希望跨多个CPU并行执行此操作。我已经使用joblib模块成功地完成了这项工作。现在,我想使用运行在带有多个CPU的AWS EC2实例上的flask将我的代码作为web应用程序提供。以下是我尝试过的玩具示例: from flask import Flask from joblib import Parallel, delayed from time import sleep def myfunc(x): sleep(5)

我有一个
python
函数,我需要用不同的参数值重复调用它。我希望跨多个CPU并行执行此操作。我已经使用
joblib
模块成功地完成了这项工作。现在,我想使用运行在带有多个CPU的
AWS EC2实例上的
flask
将我的代码作为web应用程序提供。以下是我尝试过的玩具示例:

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()
问题在于,此代码不能跨多个CPU并行运行。我得到以下警告和输出(经过的时间确认它没有并行运行):


有什么建议吗?

看看你看到的用户警告:

UserWarning: Multiprocessing-backed parallel loops cannot be nested below 
threads, setting n_jobs=1
也许这有助于:

烧瓶可能在引擎盖下旋转它自己的线,
因此,您的getresult()可能无法在主线程中运行。

不可否认,我不是并行处理方面的专家,因此我不完全理解这个警告。但我确实尝试了设置
threading.current_-thread().name=='MainThread'
,正如您在引用的帖子中所建议的那样,但没有任何帮助。实际上它必须是:
threading.current_-thread().name='MainThread'
,因为joblib似乎正在检查名称是否为'MainThread'…是的,你是对的,但不幸的是,它仍然不能解决问题。对此有任何更新吗?这不可能是因为您不能从烧瓶路由运行并行进程
UserWarning: Multiprocessing-backed parallel loops cannot be nested below 
threads, setting n_jobs=1