From ed66b8b129e240b6bff58cb8bebae4c642648f55 Mon Sep 17 00:00:00 2001 From: benoitc Date: Thu, 12 Aug 2010 11:30:07 +0200 Subject: [PATCH] some fixes --- gunicorn/app/base.py | 1 + gunicorn/http/wsgi.py | 2 -- gunicorn/workers/geventlet.py | 19 ++++++++++++++----- gunicorn/workers/ggevent.py | 3 --- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/gunicorn/app/base.py b/gunicorn/app/base.py index 61fc744e..ce9df249 100644 --- a/gunicorn/app/base.py +++ b/gunicorn/app/base.py @@ -3,6 +3,7 @@ # This file is part of gunicorn released under the MIT license. # See the NOTICE for more information. +import errno import logging import os import sys diff --git a/gunicorn/http/wsgi.py b/gunicorn/http/wsgi.py index 3e75a317..4750f1a0 100644 --- a/gunicorn/http/wsgi.py +++ b/gunicorn/http/wsgi.py @@ -44,8 +44,6 @@ def create(req, sock, client, server, cfg): forward = client url_scheme = "http" script_name = os.environ.get("SCRIPT_NAME", "") - content_type = "" - content_length = "" for hdr_name, hdr_value in req.headers: if hdr_name == "EXPECT": diff --git a/gunicorn/workers/geventlet.py b/gunicorn/workers/geventlet.py index 0c65c7f6..2ac38514 100644 --- a/gunicorn/workers/geventlet.py +++ b/gunicorn/workers/geventlet.py @@ -16,6 +16,8 @@ from eventlet import greenlet from eventlet import greenpool from eventlet import greenthread from eventlet import hubs +from eventlet.greenio import GreenSocket + from gunicorn.workers.async import AsyncWorker from gunicorn import util @@ -38,11 +40,12 @@ class EventletWorker(AsyncWorker): return eventlet.Timeout(self.cfg.keepalive, False) def run(self): + self.socket = GreenSocket(family_or_realsock=self.socket.sock) self.socket.setblocking(1) pool = greenpool.GreenPool(self.worker_connections) acceptor = eventlet.spawn(self.acceptor, pool) - + try: while self.alive: self.notify() @@ -56,15 +59,19 @@ class EventletWorker(AsyncWorker): pass # we stopped - eventlet.kill(acceptor, eventlet.StopServe) with eventlet.Timeout(self.timeout, False): - if pool.waiting(): - pool.waitall() + eventlet.kill(acceptor, eventlet.StopServe) + def acceptor(self, pool): acceptor_gt = greenthread.getcurrent() while self.alive: + + # pool is full ? + if pool.running() > self.worker_connections: + continue + try: try: conn, addr = self.socket.accept() @@ -73,6 +80,7 @@ class EventletWorker(AsyncWorker): sys.exc_clear() return raise + gt = pool.spawn(self.handle, conn, addr) gt.link(self._stop_acceptor, acceptor_gt, conn) conn, addr, gt = None, None, None @@ -81,9 +89,10 @@ class EventletWorker(AsyncWorker): self.alive = False break except eventlet.StopServe: + if pool.waiting(): + pool.waitall() break except: - self.log.exception("Unexpected error in acceptor. Sepuku.") os._exit(4) diff --git a/gunicorn/workers/ggevent.py b/gunicorn/workers/ggevent.py index 569091a3..a10f044f 100644 --- a/gunicorn/workers/ggevent.py +++ b/gunicorn/workers/ggevent.py @@ -5,10 +5,7 @@ from __future__ import with_statement -import errno import os -import socket -import sys import gevent from gevent import monkey