如何在python select()中增加filedescriptor的范围
我测试python套接字编程。并在Mac中修改如下所示的选项如何在python select()中增加filedescriptor的范围,python,sockets,select,file-descriptor,Python,Sockets,Select,File Descriptor,我测试python套接字编程。并在Mac中修改如下所示的选项 core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) un
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 100000
pipe size (512 bytes, -p) 1
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 709
virtual memory (kbytes, -v) unlimited
但是发生了以下错误
增加filedescriptor如何编写选择函数?select支持的文件描述符的数量有一个限制-最简单的解决方案是直接使用,而不受此限制 严格地说,select仅限于它所能支持的最高文件描述符,而不是给定调用中的文件描述符数量—请参阅本部分Notes部分的开头。我不确定OSX上的FD_设置大小是多少,但在Linux上是1024。没有实用的方法可以从Python中增加这个限制
作为一个旁白,如果你想让事物保持便携性,你可以考虑使用一个类似于Python包装的东西,它在给定平台上使用等待IO的最优方法。
注释:在Windows下,限制是不同的——在Windows下,它是描述符的数量,不是最大描述符的值,这很重要。啊,是的,很好。想一想,我不完全确定是否有办法改变对窗户的限制,但我不知道有什么办法。这可能很方便,因为我不相信poll在Windows上可用。现代版本的Windows确实有WSAPoll,这或多或少与poll相同……使用它可以了解,但必须将任何特定于操作系统的代码放入Python应用程序中是令人恼火的,尽管我确实意识到这有时是不可避免的。除非您的意思是Python的select模块已经更新为使用WSAPoll?我自己还没有测试过它,但希望Python的select.poll方法能够在具有WSAPoll的Windows版本上调用WSAPoll。。。Traceback (most recent call last):
File "ssub.py", line 63, in createMqttClient
rc = mqttc.loop()
File "/Library/Python/2.7/site-packages/mosquitto.py", line 633, in loop
socklist = select.select(rlist, wlist, [], timeout)
**ValueError: filedescriptor out of range in select()**