Python:在threading.event上选择或轮询

时间:2015-01-25 00:25:24

标签: python linux multithreading sockets

我最近在阅读BSD kqueue可以采取各种事件而不仅仅是文件描述符。但对于Linux用户来说,它看起来像这样: (来自socketserver python stdlib)

#self being passed to select is a listening socket
try:
    while not self.__shutdown_request:
        # XXX: Consider using another file descriptor or
        # connecting to the socket to wake this up instead of
        # polling. Polling reduces our responsiveness to a
        # shutdown request and wastes cpu at all other times.
        r, w, e = _eintr_retry(select.select, [self], [], [],
                               poll_interval)
        if self in r:
            self._handle_request_noblock()

        self.service_actions()

是否有一些聪明的方法来检查threading.Event() selectpoll或者是否必须连接第二个套接字来监听关闭事件?

编辑:我要找的是这样的: select.select([self, clever_wrapper(self.__shutdown_request)], [], [])

1 个答案:

答案 0 :(得分:-2)

  

是否有一些聪明的方法来检查带有select或poll的threading.Event()或者是否必须连接第二个套接字来监听关闭事件?

我不确定我是否理解正确,但是如果你想检测对等关闭,你可以通过select和poll然后读取来完成。也就是说,如果select / poll返回读取套接字以进行读取,然后您读取并返回没有数据但也没有错误,那么您就知道对等体发出了关闭。

不需要第二个插座,当然第二个连接甚至无法检测第一个连接是否已关闭。