首页 > 解决方案 > 将多处理与烧瓶一起使用时出现状态或上下文错误

问题描述

我试图在收到请求时使用 multiprocessing.Process() 调用函数 big_task() ,以便该函数(需要时间来计算)可以在我的计算机中运行,而烧瓶可以并行运行并侦听请求。但我收到一个错误:

RuntimeError: No root path can be found for the provided module "__mp_main__".  This can happen because the module came from an import hook that does not provide file name information or because it's a namespace package.  In this case, the root path needs to be explicitly provided.

基于另一个 SO 答案,我尝试在调用 app=Flask( name ,root_path:"C:/Users/..");时给出 root_path 参数。

现在我得到另一个错误:

AttributeError: module '__main__' has no attribute '__file__'

这是我目前的大致代码:

import numpy as np
import tensorflow as tf
def big_task(arr):
     #some data manipulations using numpy
app=Flask(__name__,root_path="C:/Users/.../app")
@app.route("/home")
def home():
       k=request.form['arr']
       p=multiprocessing.Process(target=big_task,args=k)
       p.start()
       return 'ok'
if __name__=="__main__":
      app.run(debug=False)

我是烧瓶的新手,不太明白为什么会发生这个错误。我认为这与烧瓶创建其状态或上下文有关,或者与 Windows 无法分叉新进程有关。有人可以给出一个很好的解释吗?

标签: pythontensorflowflaskmultiprocessing

解决方案


推荐阅读