2013-02-21 84 views
1

如何将Gevent与Django框架集成,在Settings.py和wsgi.py文件中必须修改哪些设置以进行集成。Django Gevent集成

我想从Django启动gevent http server(port 8000)和gevent web socket server(port 9000)。

回答

1

最简单的方法是使用Gunicorn并告诉它使用gevent工人类。 Gunicorn文档非常好。对于Django的1.4或更高版本的推荐方式启动Gunicorn是简单地调用WSGI界面,如下所示:

gunicorn --worker-class gevent wsgi:application 

如果你不关心所有的好的特点Gunicorn的(如优雅重启的无停机升级例如)你可以直接使用gevent wsgi服务器。我自己这样做是为了节省一些非关键网站的内存,这些网站在升级过程中可能会暂时停下来。这是我的“run_gevent.py”文件,它应该相当容易grok:

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) 
+0

我将该文件放在全局级别,manage.py旁边。 – 2013-02-21 21:20:45

+0

除非你内存非常低,否则我会推荐Gunicorn。它让你的生活变得更轻松! – 2013-02-21 21:24:23