def __init__(self, handlers=None, spawn=1, maxreqs=500, sock=None, host=None, port=None, timeout=10, extra_procs=None, buflen=1048576):
if not spawn:
spawn = multiprocessing.cpu_count()
elif spawn < 0:
spawn = -spawn * multiprocessing.cpu_count()
self.spawn = spawn
self.maxreqs = maxreqs
self.chunks = Chunks(bs=buflen)
if sock is None:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, True)
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, True)
sock.bind((host or '0.0.0.0', 8000 if port is None else port))
sock.listen(socket.SOMAXCONN)
sock.settimeout(10)
self.sock = sock
self.timeout = timeout
def ep_wrapper(func):
def wrapper():
signal.signal(signal.SIGHUP, signal.SIG_IGN)
signal.signal(signal.SIGINT, signal.SIG_IGN)
return func()
return wrapper
self.extra_procs = None
if extra_procs is not None:
self.extra_procs = dict((label, ep_wrapper(target)) for label, target in extra_procs.iteritems())
self.handlers = handlers or ()
self.root = Step()
for h in self.handlers:
cursor = self.root
for p in h.path:
cursor = cursor.add(p)
for m in h.methods:
try:
getattr(cursor, m)
except AttributeError:
setattr(cursor, m, (h, h.method(m)))
continue
# method handler already existed - bogus
raise AttributeError("Duplicate %s handlers for endpoint: %s" % (m.upper(), repr(h.path)))
评论列表
文章目录