2013-02-21 2 views
1

Как интегрировать Gevent с картой Django, Какие параметры необходимо изменить в файлах Settings.py и wsgi.py для интеграции.Интеграция Django Gevent

Я хочу запустить gevent http server (порт 8000) и gevent web socket server (порт 9000) из Django.

ответ

1

Самый простой способ - использовать Gunicorn и сообщить ему, чтобы использовать рабочий класс gevent. Документы 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) 
+0

Я размещаю этот файл на глобальном уровне, рядом с manage.py. –

+0

Если вы не очень низко в памяти, я бы порекомендовал Gunicorn. Это делает жизнь намного легче для вас! –