我正在使用flask+gevent来构建我的服务器,但是名为“getall”的gevent被flask阻止,因此“getall”函数无法在这段代码中打印消息。猴子补丁正在使用中。
import time
import WSGICopyBody
from flask import Flask
import gevent
def handle_node_request() :
while True :
print 'in handle_node_request'
gevent.sleep(1)
def getall() :
print 'in getall'
def create_app() :
app = Flask(__name__)
app.wsgi_app = WSGICopyBody.WSGICopyBody(app.wsgi_app)
app.add_url_rule('/node',
'handle_node_request',
handle_node_request,
methods=['GET', 'PUT', 'POST', 'DELETE'])
return app
if __name__ == "__main__":
app = create_app()
from gevent import monkey
monkey.patch_all()
gevent.joinall([
gevent.spawn(app.run(host='0.0.0.0', port=8899, debug=True)),
gevent.spawn(getall),
])
您需要将函数和参数传递给spawn
它将在单独的 eventlet 中使用这些参数调用该函数,但现在您实际上正在调用run
,直到你杀死它为止,它永远不会结束。
gevent.spawn(app.run, host='0.0.0.0', port=8899, debug=True)
顺便说一句,这似乎不是使用 Gevent 运行 Flask 的正确方法。这Flask 文档 http://flask.pocoo.org/docs/0.10/deploying/wsgi-standalone/#gevent描述使用WSGIServer http://www.gevent.org/gevent.pywsgi.html#gevent.pywsgi.WSGIServer。此外,您应该在生产中使用真实的应用程序服务器(即,当您不在“本地主机”上运行时)。Gunicorn http://gunicorn.org/ and uWSGI https://uwsgi-docs.readthedocs.org/en/latest/都能够使用 Gevent 来处理请求。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)