首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >gevent-socketio + Flask + Gunicorn

gevent-socketio + Flask + Gunicorn
EN

Stack Overflow用户
提问于 2012-11-25 20:35:01
回答 3查看 6.3K关注 0票数 11

我可以在Gunicorn下使用gevent-socketio和Flask一起运行,同时仍然享受Flask提供的良好的异常打印、调试器和重载功能吗?我的gunicorn worker和WSGI应用程序类看起来会是什么样子?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-30 18:37:38

我遇到了完全相同的问题,所以我使用watchdog解决了它。

代码语言:javascript
复制
pip install watchdog

与此命令一起使用:

代码语言:javascript
复制
watchmedo shell-command --patterns="*.py*;;*.less;*.css;*.js;*.txt;*.html" --recursive --command='kill -HUP `cat /tmp/gunicorn.pid` && echo "Reloading code" >> /tmp/gunicorn.log' ~/projectfolder

它需要(嗯,不是真的,但我指出“重新加载代码”到相同的日志文件中,所以拥有它是一件很好的事情),你守护gunicorn进程,我这样做:

gunicorn_config.py

代码语言:javascript
复制
workers = 2
worker_class = 'socketio.sgunicorn.GeventSocketIOWorker'
bind = '0.0.0.0:5000'
pidfile = '/tmp/gunicorn.pid'
debug = True
loglevel = 'debug'
errorlog = '/tmp/gunicorn.log'
daemon = True

启动应用程序:

代码语言:javascript
复制
gunicorn run:app -c gunicorn-config.py

查看日志:

代码语言:javascript
复制
tail -f /tmp/gunicorn.log

从这一点开始,项目中的每个更改都应该重新加载所有内容。这有点复杂,但由于gunicorn与worker (或内置的socketio-server)没有任何重载功能,我不得不这样做。

与其他答案中的装饰器解决方案相比,这是一种不同的方法,但我喜欢保持开发特定解决方案的实际代码干净。两者都完成了相同的任务,所以我想您只能选择您喜欢的解决方案。:)

哦,作为额外的好处,您可以在开发中使用生产服务器,这意味着这两个环境彼此匹配。

票数 11
EN

Stack Overflow用户

发布于 2012-11-30 18:30:43

我最近一直在研究这个问题。我不认为你可以通过Flask + gevent-socket.io + Gunicorn轻松地使用自动加载功能。Gunicorn是一个生产服务器,它本身就不允许这样的功能。

但是,我为我的开发服务器找到了一个很好的解决方案:随库提供的user和一个用于自动重新加载的SocketIOServer片段。下面是启动脚本(runserver.py):

代码语言:javascript
复制
from myapp import app
from gevent import monkey
from socketio.server import SocketIOServer
import werkzeug.serving

# necessary for autoreload (at least)
monkey.patch_all()

PORT = 5000

@werkzeug.serving.run_with_reloader
def runServer():
    print 'Listening on %s...' % PORT
    ws = SocketIOServer(('0.0.0.0', PORT), app, resource="socket.io", policy_server=False)
    ws.serve_forever()

runServer()

此解决方案的灵感来自:http://flask.pocoo.org/snippets/34/

票数 5
EN

Stack Overflow用户

发布于 2013-09-29 22:59:13

我对Werkzeug调试器做了一些调整,现在它可以与socket.io名称空间一起工作,请参见下面的内容并享受:)

https://github.com/aldanor/SocketIO-Flask-Debug

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13551050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档