[英]Why gevent on a Flask app with Apache + mod_wsgi is raising NotImplementedError?
我在使用Apache(mod_wsgi)和gevent在共享主机(Webfaction)上部署我的Flask应用程序时遇到问题。
该应用程序在Flask提供的开发服务器中运行良好,但是当我尝试部署它时,我在日志文件中收到以下错误:
[Tue Mar 13 15:48:24 2012] [error] Traceback (most recent call last):
[Tue Mar 13 15:48:24 2012] [error] File "evdns.pxi", line 78, in gevent.core.__evdns_callback (gevent/core.c:6300)
[Tue Mar 13 15:48:24 2012] [error] File "/home/username/.virtualenvs/staging/lib/python2.7/site-packages/gevent/hub.py", line 297, in switch_args
[Tue Mar 13 15:48:24 2012] [error] File "/home/username/.virtualenvs/staging/lib/python2.7/site-packages/gevent/hub.py", line 290, in switch
[Tue Mar 13 15:48:24 2012] [error] File "/home/username/.virtualenvs/staging/lib/python2.7/site-packages/gevent/hub.py", line 135, in get_hub
[Tue Mar 13 15:48:24 2012] [error] NotImplementedError: gevent is only usable from a single thread
我需要gevent,因为我正在使用python-requests'异步模块来发出并发HTTP请求。 我尝试了谷歌,但我发现的唯一建议是打电话
from gevent import monkey
monkey.patch_all()
我在代码中已经做过的事情。
WSGIDaemonProcess
的值是:
WSGIDaemonProcess myapp processes=5 python-path=/home/myusername/webapps/myapp/lib/python2.7 threads=1
这是我的httpd.conf: http : //pastebin.com/eWygicJH
有人有任何建议来解决这个问题吗?
尝试用monkey.patch_all()
monkey.patch_all(thread=False)
替换monkey.patch_all()
monkey.patch_all(thread=False)
。 如果它确实是在修补时导致问题的线程模块,那么应该解决它。 request
不使用线程。
我在https://serverfault.com/a/869625/355861上发布了以下答案
apache mod_wsgi目前不兼容gevent。 对于使用Apache的AWS弹性beanstalk,我对Flask使用了async_mode =“threading”,它运行良好。 注意,线程的性能低于gevent。 https://flask-socketio.readthedocs.io/en/latest/#deployment
app = Flask(__name__,static_folder='static')
socketio = SocketIO(app, async_mode="threading")
请注意,Flask可以与gevent一起独立运行。
app = Flask(__name__,static_folder='static')
socketio = SocketIO(app, async_mode="gevent")
if __name__ == '__main__':
HOST = '127.0.0.1'
PORT = 5055
socketio.run(app, port=PORT, host=HOST)
但是,你真的想在它前面有一个HTTP服务器,比如Gunicorn。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.