filedescriptor超出select()范围 - 文件描述符泄漏?

时间:2014-02-10 08:00:49

标签: python sockets file-descriptor

我为python的socket模块编写了一个包装器,我在其中使用select.selectrlist只包含带有timeout的套接字对象,以便允许{ {1}}超时。它看起来(或多或少)像这样:

recv

所以它的作用主要是等待套接字准备好def recv(self, timeout): ready, _, _ = select.select([self.socket], [], [], timeout) if ready: return self.socket.recv(4096) return "" 秒;如果没有准备就绪,它会返回一个空字符串,如果它已准备就绪,它会收到其中的内容,直到2字节的某些功率的常见限制。

这通常很好用;但是,最近我开始遇到代码中选择行中的异常,看起来像这样:

timeout

我编写的程序,使用我编写的包装器,是一个运行几个小时的脚本。看起来每次我运行它都会在约40分钟后失败并显示ValueError: filedescriptor out of range in select() 。看起来我的文件描述符有一些泄漏。但是,这些只是套接字,我相信我正在关闭它们,因为我的包装器的ValueError方法看起来像这样:

.close()

我正在使用python 2.7。我不能很好地理解我的问题,无法生成一个自包含的运行示例来演示我的问题。

修改

包装的套接字对象的初始化如下所示:

def close(self):
    self.socket.close()

0 个答案:

没有答案