mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
monkey patch django. close #293 .
This patch make sure that we use real threads to get the ident which is going to happen if we are using gevent or eventlet.
This commit is contained in:
parent
b2c83b2bc3
commit
161c8c03cb
@ -29,6 +29,7 @@ except ImportError:
|
|||||||
|
|
||||||
from gunicorn import util
|
from gunicorn import util
|
||||||
|
|
||||||
|
|
||||||
def make_wsgi_application():
|
def make_wsgi_application():
|
||||||
# validate models
|
# validate models
|
||||||
s = StringIO()
|
s = StringIO()
|
||||||
|
|||||||
@ -7,7 +7,6 @@ from optparse import make_option
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from django.core.management.base import BaseCommand, CommandError
|
from django.core.management.base import BaseCommand, CommandError
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
from gunicorn.app.djangoapp import DjangoApplicationCommand
|
from gunicorn.app.djangoapp import DjangoApplicationCommand
|
||||||
from gunicorn.config import make_settings
|
from gunicorn.config import make_settings
|
||||||
@ -67,7 +66,5 @@ class Command(BaseCommand):
|
|||||||
if addrport:
|
if addrport:
|
||||||
options['bind'] = addrport
|
options['bind'] = addrport
|
||||||
|
|
||||||
options['default_proc_name'] = settings.SETTINGS_MODULE
|
|
||||||
|
|
||||||
admin_media_path = options.pop('admin_media_path', '')
|
admin_media_path = options.pop('admin_media_path', '')
|
||||||
DjangoApplicationCommand(options, admin_media_path).run()
|
DjangoApplicationCommand(options, admin_media_path).run()
|
||||||
|
|||||||
@ -61,7 +61,7 @@ class AsyncWorker(base.Worker):
|
|||||||
self.log.info("Autorestarting worker after current request.")
|
self.log.info("Autorestarting worker after current request.")
|
||||||
resp.force_close()
|
resp.force_close()
|
||||||
self.alive = False
|
self.alive = False
|
||||||
respiter = self.wsgi(environ, resp.start_response)
|
respiter = self.app.wsgi()(environ, resp.start_response)
|
||||||
if respiter == ALREADY_HANDLED:
|
if respiter == ALREADY_HANDLED:
|
||||||
return False
|
return False
|
||||||
try:
|
try:
|
||||||
|
|||||||
@ -14,6 +14,7 @@ except ImportError:
|
|||||||
from eventlet import hubs
|
from eventlet import hubs
|
||||||
from eventlet.greenio import GreenSocket
|
from eventlet.greenio import GreenSocket
|
||||||
|
|
||||||
|
from gunicorn.monkey import patch_django
|
||||||
from gunicorn.workers.async import AsyncWorker
|
from gunicorn.workers.async import AsyncWorker
|
||||||
|
|
||||||
class EventletWorker(AsyncWorker):
|
class EventletWorker(AsyncWorker):
|
||||||
@ -23,6 +24,7 @@ class EventletWorker(AsyncWorker):
|
|||||||
import eventlet
|
import eventlet
|
||||||
if eventlet.version_info < (0,9,7):
|
if eventlet.version_info < (0,9,7):
|
||||||
raise RuntimeError("You need eventlet >= 0.9.7")
|
raise RuntimeError("You need eventlet >= 0.9.7")
|
||||||
|
patch_django()
|
||||||
eventlet.monkey_patch(os=False)
|
eventlet.monkey_patch(os=False)
|
||||||
|
|
||||||
def init_process(self):
|
def init_process(self):
|
||||||
|
|||||||
@ -22,6 +22,7 @@ from gevent.server import StreamServer
|
|||||||
from gevent import pywsgi
|
from gevent import pywsgi
|
||||||
|
|
||||||
import gunicorn
|
import gunicorn
|
||||||
|
from gunicorn.monkey import patch_django
|
||||||
from gunicorn.workers.async import AsyncWorker
|
from gunicorn.workers.async import AsyncWorker
|
||||||
from gunicorn.workers.base import Worker
|
from gunicorn.workers.base import Worker
|
||||||
|
|
||||||
@ -46,6 +47,7 @@ class GeventWorker(AsyncWorker):
|
|||||||
def setup(cls):
|
def setup(cls):
|
||||||
from gevent import monkey
|
from gevent import monkey
|
||||||
monkey.noisy = False
|
monkey.noisy = False
|
||||||
|
patch_django()
|
||||||
monkey.patch_all()
|
monkey.patch_all()
|
||||||
|
|
||||||
|
|
||||||
@ -58,7 +60,7 @@ class GeventWorker(AsyncWorker):
|
|||||||
pool = Pool(self.worker_connections)
|
pool = Pool(self.worker_connections)
|
||||||
if self.server_class is not None:
|
if self.server_class is not None:
|
||||||
server = self.server_class(
|
server = self.server_class(
|
||||||
self.socket, application=self.wsgi, spawn=pool, log=self.log,
|
self.socket, application=self.app.wsgi, spawn=pool, log=self.log,
|
||||||
handler_class=self.wsgi_handler)
|
handler_class=self.wsgi_handler)
|
||||||
else:
|
else:
|
||||||
server = StreamServer(self.socket, handle=self.handle, spawn=pool)
|
server = StreamServer(self.socket, handle=self.handle, spawn=pool)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user