Python select.epoll().poll(),仅轮询eventmask 25

Python select.epoll().poll(),仅轮询eventmask 25,python,epoll,Python,Epoll,我创建了一个带有RequestHandler的服务器,该RequestHandler继承自SocketServer.BaseRequestHandler,它使用epoll轮询socketEvents和Qevents 在最初几次将客户端连接到服务器时,一切都按预期工作,直到在某个点(似乎是随机的)epoll.poll()仅轮询事件[(37,25)],并且%CPU变为99%。!但是,客户端不会引发任何套接字错误 我的handle()方法如下(是RequestHandler的一部分) 我把打印语句放在

我创建了一个带有RequestHandler的服务器,该RequestHandler继承自
SocketServer.BaseRequestHandler
,它使用epoll轮询socketEvents和Qevents

在最初几次将客户端连接到服务器时,一切都按预期工作,直到在某个点(似乎是随机的)
epoll.poll()
仅轮询事件
[(37,25)]
,并且%CPU变为99%。!但是,客户端不会引发任何套接字错误

我的
handle()
方法如下(是
RequestHandler
的一部分)


我把打印语句放在那里只是为了看看我得到了什么,当一切正常时,我得到了
[(37,1)]
(socketEvent)和
[(41,1)]
(QEvent)。发生了什么?

如果有人感兴趣,那么我发现
SocketServer.BaseRequestHandler
中的
finish()
方法对处理关闭的连接没有任何作用。我所做的如下(这也会在客户端意外关闭连接时处理):


你在处理封闭连接吗?它们返回时可以阅读,直到它们被关闭和移除。(注意:select和poll也是如此,我不知道具体的epoll)我认为
BaseRequestHandler
中的finish()方法处理关闭的连接。我可能错了,所以我需要检查一下。谢谢@Max为我指明了正确的方向。
BaseRequestHandler
中的
finish()
方法没有任何作用。尽管当客户端意外关闭连接时,此问题仍然存在。
  def handle(self):
    """"
    This method will process the incoming request while exit is not set
    """
    try:
        while not self.exit.is_set():

            events = self.epoll.poll(1)
            print events
            if self.socketEvent in events:
                self.handle_request()

            if self.QEvent in events:
                self.send_response()

    finally:
        self.finish()
        return
def handle(self):
""""
This method will process the incoming request while exit is not set
"""
try:
    while not self.exit.is_set():

        events = self.epoll.poll(1)
        print events
        if self.socketEvent in events:
            self.handle_request()

        if self.QEvent in events:
            self.send_response()

        if (self.socketEvent[0],25) in events:
            self.exit.set()

finally:
    self.request.close()
    return