Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python xmppy。选择中的filedescriptor超出范围_Python_Select_Xmpp - Fatal编程技术网

Python xmppy。选择中的filedescriptor超出范围

Python xmppy。选择中的filedescriptor超出范围,python,select,xmpp,Python,Select,Xmpp,我正在使用xmppy。我创建了50多个xmpp连接线程。一段时间后,我发现一个错误: 文件“transports.py”,第199行,在挂起数据中 返回select.select([self.\u sock],[],timeout)[0]值错误:select()中的文件描述符超出范围。 为什么会这样 另外,很抱歉使用我的语言。xmpppy使用系统调用来监视打开的连接。不幸的是,select()有一个非常尴尬的限制——在大多数系统上,它只能监视文件描述符数达到一定限制(通常为1024)的连接 这意

我正在使用xmppy。我创建了50多个xmpp连接线程。一段时间后,我发现一个错误:

文件“transports.py”,第199行,在挂起数据中
返回select.select([self.\u sock],[],timeout)[0]值错误:select()中的文件描述符超出范围。

为什么会这样

另外,很抱歉使用我的语言。

xmpppy使用系统调用来监视打开的连接。不幸的是,select()有一个非常尴尬的限制——在大多数系统上,它只能监视文件描述符数达到一定限制(通常为1024)的连接

这意味着,当您打开更多文件和连接时,最终将达到极限


解决方案是让xmppy使用poll()或更现代(但特定于操作系统)的API,如epoll或kqueue。所有这些都可以通过Python进行访问。

这有时表明文件描述符已经用完,如果没有正确关闭文件/连接,在多线程环境中很容易发生这种情况。在Linux下,您可以通过查看
/proc//fd/
(其中
是程序的进程ID)来查看应用程序(运行时)的打开文件列表。如果这个值很大(接近1024),您可能(a)代码有问题,或者(b)需要增加程序的打开文件限制。