From f92a5409f5d4768eda5cbd4ba3581aca220be1ba Mon Sep 17 00:00:00 2001 From: benoitc Date: Thu, 28 Oct 2010 05:44:01 +0200 Subject: [PATCH 1/2] don't notify so much the arbiter. spotted by @davisp . tests are ok. --- gunicorn/workers/geventlet.py | 2 +- gunicorn/workers/ggevent.py | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gunicorn/workers/geventlet.py b/gunicorn/workers/geventlet.py index 5d33aa3b..96e32398 100644 --- a/gunicorn/workers/geventlet.py +++ b/gunicorn/workers/geventlet.py @@ -41,7 +41,7 @@ class EventletWorker(AsyncWorker): if self.ppid != os.getppid(): self.log.info("Parent changed, shutting down: %s" % self) break - eventlet.sleep(0.1) + eventlet.sleep(self.timeout) self.notify() with eventlet.Timeout(self.timeout, False): diff --git a/gunicorn/workers/ggevent.py b/gunicorn/workers/ggevent.py index 40e164d5..d2b61ae6 100644 --- a/gunicorn/workers/ggevent.py +++ b/gunicorn/workers/ggevent.py @@ -77,7 +77,7 @@ class GeventWorker(AsyncWorker): if self.ppid != os.getppid(): self.log.info("Parent changed, shutting down: %s" % self) break - gevent.sleep(0.1) + gevent.sleep(self.timeout) except KeyboardInterrupt: pass @@ -137,7 +137,7 @@ class GeventBaseWorker(Worker): if self.ppid != os.getppid(): self.log.info("Parent changed, shutting down: %s" % self) break - gevent.sleep(0.1) + gevent.sleep(self.timeout) except KeyboardInterrupt: pass From 47e87df132e9cd13eeb35a4f377a14f836be0f75 Mon Sep 17 00:00:00 2001 From: benoitc Date: Thu, 28 Oct 2010 06:05:01 +0200 Subject: [PATCH 2/2] display the right error when a worker can't be used. --- gunicorn/app/base.py | 7 ++++++- gunicorn/workers/geventlet.py | 6 ++++-- gunicorn/workers/ggevent.py | 6 ++++-- gunicorn/workers/gtornado.py | 5 ++++- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/gunicorn/app/base.py b/gunicorn/app/base.py index ce9df249..38879f07 100644 --- a/gunicorn/app/base.py +++ b/gunicorn/app/base.py @@ -117,7 +117,12 @@ class Application(object): raise self.configure_logging() - Arbiter(self).run() + try: + Arbiter(self).run() + except RuntimeError, e: + sys.stderr.write("\nError: %s\n\n" % e) + sys.stderr.flush() + sys.exit(1) def configure_logging(self): """\ diff --git a/gunicorn/workers/geventlet.py b/gunicorn/workers/geventlet.py index 96e32398..970abece 100644 --- a/gunicorn/workers/geventlet.py +++ b/gunicorn/workers/geventlet.py @@ -7,8 +7,10 @@ from __future__ import with_statement import os - -import eventlet +try: + import eventlet +except ImportError: + raise RuntimeError("You need eventlet installed to use this worker.") from eventlet import hubs from eventlet.greenio import GreenSocket diff --git a/gunicorn/workers/ggevent.py b/gunicorn/workers/ggevent.py index d2b61ae6..e9e1d9fa 100644 --- a/gunicorn/workers/ggevent.py +++ b/gunicorn/workers/ggevent.py @@ -12,8 +12,10 @@ import sys if sys.platform == "darwin": os.environ['EVENT_NOKQUEUE'] = "1" - -import gevent +try: + import gevent +except ImportError: + raise RuntimeError("You need gevent installed to use this worker.") from gevent.pool import Pool from gevent.server import StreamServer from gevent import pywsgi, wsgi diff --git a/gunicorn/workers/gtornado.py b/gunicorn/workers/gtornado.py index 2f73ad81..5bea9291 100644 --- a/gunicorn/workers/gtornado.py +++ b/gunicorn/workers/gtornado.py @@ -6,7 +6,10 @@ import os import sys -import tornado.web +try: + import tornado.web +except ImportError: + raise RuntimeError("You need tornado installed to use this worker.") from tornado.httpserver import HTTPServer from tornado.ioloop import IOLoop, PeriodicCallback from tornado.wsgi import WSGIContainer