如何将 Gevent 与 Django 框架集成,必须在 Settings.py 和 wsgi.py 文件中修改哪些设置以进行集成。
我想从 Django 启动 gevent http server(port 8000) 和 gevent web socket server(port 9000)。
如何将 Gevent 与 Django 框架集成,必须在 Settings.py 和 wsgi.py 文件中修改哪些设置以进行集成。
我想从 Django 启动 gevent http server(port 8000) 和 gevent web socket server(port 9000)。
最简单的方法是使用Gunicorn并告诉它使用 gevent worker 类。Gunicorn 文档非常好。对于 Django 1.4 或更高版本,启动 Gunicorn 的推荐方法是简单地调用 WSGI 接口,如下所示:
gunicorn --worker-class gevent wsgi:application
如果您不关心 Gunicorn 的所有出色功能(例如,用于无停机升级的优雅重启),您可以直接使用 gevent wsgi 服务器。我自己这样做是为了为非关键网站节省一些内存,这些网站在升级期间可能会关闭一段时间。这是我的“run_gevent.py”文件,应该很容易理解:
import gevent.monkey; gevent.monkey.patch_all()
import os, socket
from gevent.socket import socket as gsocket
from gevent.pywsgi import WSGIServer
from django.core.handlers.wsgi import WSGIHandler
script_dir = os.path.dirname(os.path.abspath(__file__))
pid_filename = os.path.join(script_dir, 'server.pid')
socket_filename = os.path.join(script_dir, 'server.sock')
pidfile = open(pid_filename, 'w')
pidfile.write(str(os.getpid()) + str('\n'))
pidfile.close()
server_socket = gsocket(socket.AF_UNIX, socket.SOCK_STREAM)
try:
os.remove(socket_filename)
except OSError:
pass
server_socket.bind(socket_filename)
server_socket.listen(256)
os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'
server = WSGIServer(listener = server_socket, application = WSGIHandler(), log = None)
server.serve_forever(stop_timeout = 3)