fix workers relaunch

This commit is contained in:
Benoit Chesneau 2010-01-16 05:12:00 +01:00
parent 9900371813
commit ecd684eaed
5 changed files with 9 additions and 17 deletions

View File

@ -126,20 +126,24 @@ class Arbiter(object):
sock.listen(2048)
return sock
def set_sockopts(self, sock):
def set_sockopts(self, sock):
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 0)
if hasattr(socket, "TCP_CORK"):
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_CORK, 1)
elif hasattr(socket, "TCP_NOPUSH"):
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NOPUSH, 1)
def run(self):
self.manage_workers()
while True:
try:
sig = self.SIG_QUEUE.pop(0) if len(self.SIG_QUEUE) else None
if sig is None:
self.murder_workers()
self.reap_workers()
self.manage_workers()
self.sleep()
continue
@ -155,9 +159,6 @@ class Arbiter(object):
log.info("Handling signal: %s" % signame)
handler()
self.murder_workers()
self.reap_workers()
self.manage_workers()
except StopIteration:
break
except KeyboardInterrupt:

View File

@ -69,13 +69,11 @@ class HTTPRequest(object):
remain = CHUNK_SIZE
buf = create_string_buffer(remain)
remain -= self.socket.recv_into(buf, remain)
while not self.parser.headers(headers, buf):
data = create_string_buffer(remain)
remain -= self.socket.recv_into(data, remain)
buf = create_string_buffer(data.value + buf.value)
print headers
if headers.get('Except', '').lower() == "100-continue":
self.socket.send("100 Continue\n")

View File

@ -53,11 +53,9 @@ class HTTPResponse(object):
self.sock.send("%s\r\n" % "".join(resp_head))
for chunk in self.data:
self.sock.send(chunk)
print "sent"
self.sock.close()
if hasattr(self.data, "close"):

View File

@ -26,7 +26,7 @@
import time
CHUNK_SIZE = 16 * 1024
CHUNK_SIZE = (16 * 1024)
MAX_BODY = 1024 * (80 + 32)

View File

@ -102,24 +102,19 @@ class Worker(object):
except select.error, e:
if e[0] == errno.EINTR:
break
elif e[0] == errno.EBADF:
return
raise
# Accept until we hit EAGAIN. We're betting that when we're
# processing clients that more clients are waiting. When
# there's no more clients waiting we go back to the select()
# loop and wait for some lovin.
while self.alive:
try:
conn, addr = self.socket.accept()
conn.setblocking(1)
# handle connection
self.handle(conn, addr)
# Update the fd mtime on each client completion
# to signal that this worker process is alive.