Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我正在使用 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()
File "transports.py", line 199, in pending_data
return select.select([self._sock],[],[],timeout)[0] ValueError: filedescriptor out of range in select()
为什么会发生?
PS对不起我的语言。
xmpppy 使用select()系统调用来监视打开的连接。不幸的是 select() 有一个非常尴尬的限制 - 在大多数系统上,它只能监视文件描述符数达到一定限制的连接,通常是 1024。
这意味着随着您打开更多文件和连接,最终您将达到限制。
解决方案是让 xmpppy 使用 poll() 或更现代(但特定于操作系统)的 API,例如 epoll 或 kqueue。所有这些都可以通过 Python 的“选择”模块访问。