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