[英]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.