xmpppy。文件描述符超出选择范围
Posted
技术标签:
【中文标题】xmpppy。文件描述符超出选择范围【英文标题】:xmpppy. filedescriptor out of range in select 【发布时间】:2012-04-09 07:18:44 【问题描述】:我正在使用 xmpppy。我创建了 50 多个 xmpp 连接线程。一段时间后我得到一个错误:
File "transports.py", line 199, in pending_data
return select.select([self._sock],[],[],timeout)[0] ValueError: filedescriptor out of range in select()
为什么会这样?
附:对不起我的语言。
【问题讨论】:
这有时可能表明您的文件描述符用完了,如果您没有正确关闭文件/连接,这在多线程环境中很容易发生。在 Linux 下,您可以通过查看/proc/<pid>/fd/
来查看应用程序(在运行时)的打开文件列表,其中 <pid
> 是程序的进程 ID。如果这很大(接近 1024),您可能 (a) 代码有问题或 (b) 需要增加程序的打开文件限制。
【参考方案1】:
xmpppy 使用select() 系统调用来监控打开的连接。不幸的是 select() 有一个非常尴尬的限制 - 在大多数系统上,它只能监视文件描述符数达到一定限制的连接,通常是 1024。
这意味着随着您打开更多文件和连接,最终您将达到限制。
解决方案是让 xmpppy 使用 poll() 或更现代(但特定于操作系统)的 API,例如 epoll 或 kqueue。所有这些都可以通过 Python 的'select' module 访问。
【讨论】:
以上是关于xmpppy。文件描述符超出选择范围的主要内容,如果未能解决你的问题,请参考以下文章