httpd.py 文件源码

python
阅读 32 收藏 0 点赞 0 评论 0

项目:lemongraph 作者: NationalSecurityAgency 项目源码 文件源码
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)))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号