Python:为什么这个非阻塞的recv调用会阻塞?
我在一个线程的 $init 调用中有以下代码:
self.conn = copy.deepcopy(conn)
self.conn.setblocking(0)
这里的 conn 是一个套接字(socket),它作为参数传递给 $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 个回答
1
可能是因为recv在从文件中读取数据,而输入输出操作是阻塞的?(你可能知道,套接字也是文件) :)
想了解更多信息,可以看看这里: python socket.recv/sendall调用阻塞 :)