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):
Worker.__init__(self, *args, **kwargs)
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):
try:
@ -49,7 +53,9 @@ class AsyncWorker(Worker):
util.close(client)
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:
environ = req.read()
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")
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):
self.socket.setblocking(1)

View File

@ -10,6 +10,7 @@ import os
import gevent
from gevent import monkey
monkey.noisy = False
from gevent import socket
from gevent import greenlet
from gevent.pool import Pool
@ -26,6 +27,12 @@ class GEventWorker(AsyncWorker):
from gevent import monkey
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):
self.socket.setblocking(1)