4

尽管我将套接字设置为非阻塞,但 seclect() 函数仍然被阻塞。请帮我。

这是我的代码:

import socket
import select
if __name__ == '__main__':
   server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
   server.bind(("localhost",9006))
   server.listen(10)
   server.setblocking(False)
   inputs = [server]
   while True:
      try:
         a,b,c = select.select(inputs, [], [])
      except Exception:
        print ("exception")
      print ("Timeout") 
4

1 回答 1

16

选择文档

可选的 timeout 参数将超时指定为以秒为单位的浮点数。当省略超时参数时,函数会阻塞,直到至少一个文件描述符准备就绪。

换句话说,套接字“阻塞”状态与此处无关。您需要指定任何超时来禁用阻塞;您可以设置0为在没有内容可读取时立即返回(但请注意,您的循环将大量占用 CPU)。

例如:

a,b,c = select.select(inputs, [], [], 0)
于 2012-08-02T02:19:02.573 回答