python - 如何在 python select() 中增加文件描述符的范围

标签 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) 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

但是出现了如下错误。

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()**

增加文件描述符select()函数怎么写?

最佳答案

select() 文件描述符的数量有限制支持 - 最简单的解决方案是简单地使用 poll()相反,它不受此限制。

严格来说,select()受限于它可以支持的最高文件描述符,而不是给定调用中的文件描述符数量 - 请参阅 select() manpageNotes 部分的开头.我不确定是什么FD_SETSIZE在 OSX 上是 1024,但在 Linux 上是 1024。没有实际的方法可以从 Python 增加这个限制。

顺便说一句,如果您想保持便携性,您可以考虑使用类似 pyev 的东西这是 libev 的 Python 包装器在给定平台上使用最佳等待 IO 方法的库。

关于python - 如何在 python select() 中增加文件描述符的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14250751/

相关文章:

python - 使用类的名称实例化类的对象

python - 在 Python 中并行运行多个系统命令

java - 如果您正在使用缓冲读取器读取整行,那么在套接字上设置超时是否有效?

java - 服务器端口未收到 UDP 消息

sql - 如何用一条SELECT语句从两台服务器的两个数据库中获取数据?

xslt - XSl——需要转型帮助

python - 退出脚本后如何返回到 python shell?

python - 何时使用,何时不使用 Python 3.5 `await` ?

c++ - 如何解决 WSAEWOULDBLOCK 错误

mysql - 如何只连接表而不是行