add timeout support

This commit is contained in:
benoitc 2010-04-22 19:07:23 +02:00
parent 80e0acf9db
commit 090bb8fe29
3 changed files with 20 additions and 1 deletions

View File

@ -21,6 +21,10 @@ class AsyncWorker(Worker):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
Worker.__init__(self, *args, **kwargs) Worker.__init__(self, *args, **kwargs)
self.worker_connections = self.cfg.worker_connections self.worker_connections = self.cfg.worker_connections
def keepalive_request(self, client, addr):
return http.KeepAliveRequest(client, addr, self.address,
self.cfg)
def handle(self, client, addr): def handle(self, client, addr):
try: try:
@ -49,7 +53,9 @@ class AsyncWorker(Worker):
util.close(client) util.close(client)
def handle_request(self, client, addr): def handle_request(self, client, addr):
req = http.KeepAliveRequest(client, addr, self.address, self.cfg) req = self.keepalive_request(client, addr)
if not req:
return False
try: try:
environ = req.read() environ = req.read()
if not environ or not req.parser.headers: if not environ or not req.parser.headers:

View File

@ -35,6 +35,12 @@ class EventletWorker(AsyncWorker):
raise RuntimeError("You need eventlet >= 0.9.7") raise RuntimeError("You need eventlet >= 0.9.7")
eventlet.monkey_patch(all=False, socket=True, select=True) eventlet.monkey_patch(all=False, socket=True, select=True)
def keepalive_request(self, client, addr):
req = None
with eventlet.Timeout(self.cfg.keepalive, False):
req = super(EventletWorker, self).keepalive_request(client, addr)
return req
def run(self): def run(self):
self.socket.setblocking(1) self.socket.setblocking(1)

View File

@ -10,6 +10,7 @@ import os
import gevent import gevent
from gevent import monkey from gevent import monkey
monkey.noisy = False
from gevent import socket from gevent import socket
from gevent import greenlet from gevent import greenlet
from gevent.pool import Pool from gevent.pool import Pool
@ -26,6 +27,12 @@ class GEventWorker(AsyncWorker):
from gevent import monkey from gevent import monkey
monkey.patch_all() monkey.patch_all()
def keepalive_request(self, client, addr):
req = None
with gevent.Timeout(self.cfg.keepalive, False):
req = super(GEventWorker, self).keepalive_request(client, addr)
return req
def run(self): def run(self):
self.socket.setblocking(1) self.socket.setblocking(1)