RuntimeError:在请求上下文之外工作。与gunicorn

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RuntimeError:在请求上下文之外工作。与gunicorn相关的知识,希望对你有一定的参考价值。

每当我运行我的代码为python3 myapp.py它工作正常,但每当我使用gunicorn -w 4 myapp:index -b 10.91.1.230:5055 &

它抛出

ion@aurora:~/TNQ$ [2019-02-05 14:26:34 +0530] [27107] [INFO] Starting 
gunicorn 19.9.0
..............
27116
[2019-02-05 14:26:38 +0530] [27113] [ERROR] Error handling request /
Traceback (most recent call last):
  File "/home/ion/.local/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 135, in handle
    self.handle_request(listener, req, client, addr)
  File "/home/ion/.local/lib/python3.6/site-packages/gunicorn/workers/sync.py", line 176, in handle_request
    respiter = self.wsgi(environ, resp.start_response)
  File "/home/ion/TNQ/myapp.py", line 16, in index
    f = request.files['file']
  File "/home/ion/.local/lib/python3.6/site-packages/werkzeug/local.py", line 347, in __getattr__
    return getattr(self._get_current_object(), name)
  File "/home/ion/.local/lib/python3.6/site-packages/werkzeug/local.py", line 306, in _get_current_object
    return self.__local()
  File "/home/ion/.local/lib/python3.6/site-packages/flask/globals.py", line 37, in _lookup_req_object
    raise RuntimeError(_request_ctx_err_msg)
RuntimeError: Working outside of request context.

This typically means that you attempted to use functionality that needed
an active HTTP request.  Consult the documentation on testing for
information about how to avoid this problem.

没有app.朋友

from flask import Flask,request
from CXE.src.models import class_classic as cc   
app = Flask(__name__)    
@app.route('/', methods=['POST'])
#def index(environ, start_response):
def index(environ, start_response):
    with app.app_context():
        #if request.method == 'POST':
        f = request.files['file']
        a = cc.initiate(f)
    return a   
 if __name__ == '__main__':
    app.run(host = '0.0.0.0',port=5505,debug=True)

我需要将代码放在gunicorn上以便在线程上提供它。知道为什么不工作?

答案

它不起作用,因为index不是wsgi app - 它不足以使该函数具有正确的签名。请执行以下操作:

gunicorn -w 4 myapp:app -b 10.91.1.230:5055 &

当你运行python3 myapp.py时你没有看到任何问题,因为flask的dev服务器app.run不需要wsgi app,而gunicorn则需要。话虽如此,你也可以继续删除index签名。

以上是关于RuntimeError:在请求上下文之外工作。与gunicorn的主要内容,如果未能解决你的问题,请参考以下文章

RuntimeError:在应用程序上下文之外工作。烧瓶 - 邮件

为啥 Perl 文件 glob() 不能在标量上下文中的循环之外工作?

应用上下文和请求上下文

docker/matplotlib: RuntimeError: Invalid DISPLAY 变量

如何处理 Activity 和 Fragment 之外的权限请求?

flask中的上下文 RuntimeError: No application found . Either work inside a view function or push an applic