mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
osi.waitpid patching is broken in eventlet and prevent arbiter to exit.
Waiting upstream fixes, don't patch it for now.
This commit is contained in:
parent
3b8e594200
commit
9af95b7f8d
@ -3,12 +3,10 @@
|
|||||||
# This file is part of gunicorn released under the MIT license.
|
# This file is part of gunicorn released under the MIT license.
|
||||||
# See the NOTICE for more information.
|
# See the NOTICE for more information.
|
||||||
|
|
||||||
from wsgiref.validate import validator
|
|
||||||
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
||||||
@validator
|
|
||||||
def app(environ, start_response):
|
def app(environ, start_response):
|
||||||
"""Application which cooperatively pauses 10 seconds before responding"""
|
"""Application which cooperatively pauses 10 seconds before responding"""
|
||||||
data = 'Hello, World!\n'
|
data = 'Hello, World!\n'
|
||||||
|
|||||||
@ -17,7 +17,6 @@ from gunicorn.workers.async import ALREADY_HANDLED
|
|||||||
from eventlet import pools
|
from eventlet import pools
|
||||||
|
|
||||||
import eventlet
|
import eventlet
|
||||||
from eventlet.common import get_errno
|
|
||||||
|
|
||||||
class WebSocketWSGI(object):
|
class WebSocketWSGI(object):
|
||||||
def __init__(self, handler):
|
def __init__(self, handler):
|
||||||
|
|||||||
@ -25,7 +25,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")
|
||||||
eventlet.monkey_patch()
|
eventlet.monkey_patch(os=False)
|
||||||
|
|
||||||
def init_process(self):
|
def init_process(self):
|
||||||
hubs.use_hub()
|
hubs.use_hub()
|
||||||
@ -40,19 +40,23 @@ class EventletWorker(AsyncWorker):
|
|||||||
pool = greenpool.GreenPool(self.worker_connections)
|
pool = greenpool.GreenPool(self.worker_connections)
|
||||||
acceptor = greenthread.spawn(self.acceptor, pool)
|
acceptor = greenthread.spawn(self.acceptor, pool)
|
||||||
|
|
||||||
while self.alive:
|
try:
|
||||||
self.notify()
|
while self.alive:
|
||||||
|
self.notify()
|
||||||
|
|
||||||
if self.ppid != os.getppid():
|
if self.ppid != os.getppid():
|
||||||
self.log.info("Parent changed, shutting down: %s" % self)
|
self.log.info("Parent changed, shutting down: %s" % self)
|
||||||
greenthread.kill(acceptor, eventlet.StopServe)
|
greenthread.kill(acceptor, eventlet.StopServe)
|
||||||
break
|
break
|
||||||
|
|
||||||
eventlet.sleep(0.1)
|
eventlet.sleep(0.1)
|
||||||
|
|
||||||
with eventlet.Timeout(self.timeout, False):
|
with eventlet.Timeout(self.timeout, False):
|
||||||
pool.waitall()
|
if pool.waiting():
|
||||||
os._exit(3)
|
pool.waitall()
|
||||||
|
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
pass
|
||||||
|
|
||||||
def acceptor(self, pool):
|
def acceptor(self, pool):
|
||||||
greenthread.getcurrent()
|
greenthread.getcurrent()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user