clean a little the eventlet worker

This commit is contained in:
benoitc 2010-08-11 14:08:32 +02:00
parent 80cd1f40ed
commit 2ddbe800a5

View File

@ -46,40 +46,31 @@ class EventletWorker(AsyncWorker):
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)
break break
eventlet.sleep(0.1) eventlet.sleep(0.1)
with eventlet.Timeout(self.timeout, False):
if pool.waiting():
pool.waitall()
except KeyboardInterrupt: except KeyboardInterrupt:
pass pass
# we stopped
greenthread.kill(acceptor, eventlet.StopServe)
with eventlet.Timeout(self.timeout, False):
if pool.waiting():
pool.waitall()
def acceptor(self, pool): def acceptor(self, pool):
greenthread.getcurrent()
while self.alive: while self.alive:
try: try:
conn, addr = self.socket.accept() try:
gt = pool.spawn(self.handle, conn, addr) conn, addr = self.socket.accept()
gt.link(self.cleanup, conn) except socket.error, e:
conn, addr, gt = None, None, None if err[0] == errno.EAGAIN:
except eventlet.StopServe: sys.exc_clear()
return return
raise
pool.spawn_n(self.handle, conn, addr)
except: except:
self.log.exception("Unexpected error in acceptor. Sepuku.") self.log.exception("Unexpected error in acceptor. Sepuku.")
os._exit(4) os._exit(4)
def cleanup(self, thread, conn):
try:
try:
thread.wait()
finally:
conn.close()
except greenlet.GreenletExit:
pass
except Exception:
self.log.exception("Unhandled exception in worker.")