~rlane/nova/ldapimprovements

« back to all changes in this revision

Viewing changes to nova/wsgi.py

  • Committer: Ryan Lane
  • Date: 2010-11-24 15:46:32 UTC
  • mfrom: (382.48.1 trunk)
  • Revision ID: laner@controller-20101124154632-zh7kwjuyyd02a2lh
MergeĀ fromĀ trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
28
28
 
29
29
import eventlet
30
30
import eventlet.wsgi
31
 
eventlet.patcher.monkey_patch(all=False, socket=True)
 
31
eventlet.patcher.monkey_patch(all=False, socket=True, time=True)
32
32
import routes
33
33
import routes.middleware
34
34
import webob
39
39
logging.getLogger("routes.middleware").addHandler(logging.StreamHandler())
40
40
 
41
41
 
42
 
def run_server(application, port):
43
 
    """Run a WSGI server with the given application."""
44
 
    sock = eventlet.listen(('0.0.0.0', port))
45
 
    eventlet.wsgi.server(sock, application)
 
42
class Server(object):
 
43
    """Server class to manage multiple WSGI sockets and applications."""
 
44
 
 
45
    def __init__(self, threads=1000):
 
46
        self.pool = eventlet.GreenPool(threads)
 
47
 
 
48
    def start(self, application, port, host='0.0.0.0', backlog=128):
 
49
        """Run a WSGI server with the given application."""
 
50
        socket = eventlet.listen((host, port), backlog=backlog)
 
51
        self.pool.spawn_n(self._run, application, socket)
 
52
 
 
53
    def wait(self):
 
54
        """Wait until all servers have completed running."""
 
55
        try:
 
56
            self.pool.waitall()
 
57
        except KeyboardInterrupt:
 
58
            pass
 
59
 
 
60
    def _run(self, application, socket):
 
61
        """Start a WSGI server in a new green thread."""
 
62
        eventlet.wsgi.server(socket, application, custom_pool=self.pool)
46
63
 
47
64
 
48
65
class Application(object):