mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
fix bug spotted by @daks with mercurial. Also fix concurrency on async.
This commit is contained in:
parent
3a2e3edb3e
commit
cd5894f59c
@ -102,7 +102,7 @@ class KeepaliveWorker(Worker):
|
|||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
self.init_process()
|
self.init_process()
|
||||||
self.socket.setblocking(0)
|
self.socket.setblocking(1)
|
||||||
|
|
||||||
while self.alive:
|
while self.alive:
|
||||||
self.notify()
|
self.notify()
|
||||||
|
|||||||
@ -3,6 +3,8 @@
|
|||||||
# 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 __future__ import with_statement
|
||||||
|
|
||||||
import errno
|
import errno
|
||||||
|
|
||||||
import collections
|
import collections
|
||||||
@ -11,6 +13,7 @@ from eventlet.green import os
|
|||||||
from eventlet.green import socket
|
from eventlet.green import socket
|
||||||
from eventlet import greenio
|
from eventlet import greenio
|
||||||
from eventlet.hubs import trampoline
|
from eventlet.hubs import trampoline
|
||||||
|
from eventlet.timeout import Timeout
|
||||||
|
|
||||||
from gunicorn import util
|
from gunicorn import util
|
||||||
from gunicorn import arbiter
|
from gunicorn import arbiter
|
||||||
@ -24,13 +27,14 @@ class EventletWorker(KeepaliveWorker):
|
|||||||
self.pool = eventlet.GreenPool(self.worker_connections)
|
self.pool = eventlet.GreenPool(self.worker_connections)
|
||||||
|
|
||||||
def accept(self):
|
def accept(self):
|
||||||
try:
|
with Timeout(0.1, False):
|
||||||
client, addr = self.socket.accept()
|
try:
|
||||||
self.pool.spawn_n(self.handle, client, addr)
|
client, addr = self.socket.accept()
|
||||||
except socket.error, e:
|
self.pool.spawn_n(self.handle, client, addr)
|
||||||
if e[0] in (errno.EWOULDBLOCK, errno.EAGAIN, errno.ECONNABORTED):
|
except socket.error, e:
|
||||||
return
|
if e[0] in (errno.EWOULDBLOCK, errno.EAGAIN, errno.ECONNABORTED):
|
||||||
raise
|
return
|
||||||
|
raise
|
||||||
|
|
||||||
|
|
||||||
class EventletArbiter(arbiter.Arbiter):
|
class EventletArbiter(arbiter.Arbiter):
|
||||||
|
|||||||
@ -3,16 +3,16 @@
|
|||||||
# 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 __future__ import with_statement
|
||||||
|
|
||||||
import errno
|
import errno
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import gevent
|
import gevent
|
||||||
from gevent import socket
|
from gevent import Timeout, socket
|
||||||
from gevent.greenlet import Greenlet
|
from gevent.greenlet import Greenlet
|
||||||
from gevent.pool import Pool
|
from gevent.pool import Pool
|
||||||
|
|
||||||
|
|
||||||
from gunicorn import arbiter
|
from gunicorn import arbiter
|
||||||
from gunicorn import util
|
from gunicorn import util
|
||||||
from gunicorn.async.base import KeepaliveWorker
|
from gunicorn.async.base import KeepaliveWorker
|
||||||
@ -24,13 +24,14 @@ class GEventWorker(KeepaliveWorker):
|
|||||||
self.pool = Pool(self.worker_connections)
|
self.pool = Pool(self.worker_connections)
|
||||||
|
|
||||||
def accept(self):
|
def accept(self):
|
||||||
try:
|
with Timeout(0.1, False):
|
||||||
client, addr = self.socket.accept()
|
try:
|
||||||
self.pool.spawn(self.handle, client, addr)
|
client, addr = self.socket.accept()
|
||||||
except socket.error, e:
|
self.pool.spawn(self.handle, client, addr)
|
||||||
if e[0] in (errno.EAGAIN, errno.EWOULDBLOCK, errno.ECONNABORTED):
|
except socket.error, e:
|
||||||
return
|
if e[0] in (errno.EAGAIN, errno.EWOULDBLOCK, errno.ECONNABORTED):
|
||||||
raise
|
return
|
||||||
|
raise
|
||||||
|
|
||||||
class GEventArbiter(arbiter.Arbiter):
|
class GEventArbiter(arbiter.Arbiter):
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user