Python:为什么这个非阻塞调用recv阻塞?

时间:2011-07-29 14:35:30

标签: python sockets blocking nonblocking recv

我在线程的$ init 调用中有以下代码:

self.conn = copy.deepcopy(conn)
self.conn.setblocking(0)

conn是一个套接字,作为参数传递给$ init 每个线程都会收到一个独特的套接字。在run方法中我有:

self.running = True
self.conn.send("Connected")
print self.name, "has a timeout of", self.conn.gettimeout()

while self.running:
    try:
        now = self.conn.recv(8192)
        print "Recieved:", now, "\n\tFrom:", self.name
        self.process(now)
    except socket.error:
         raise

     print "hi from", self.name
     time.sleep(1)

超时打印为0.0,但是“hi from threadname”仅在收到消息时打印出来,并且永远不会引发异常!看起来好像recv方法阻塞了,但为什么会这样做呢?

1 个答案:

答案 0 :(得分:1)

可能因为recv正在从文件中读取而I / O正在阻塞? (套接字也是您可能知道的文件):)

请点击此处:python socket.recv/sendall call blocking了解更多信息:)