繁体   English   中英

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

[英]Python: Why does this non-blocking call to recv block?

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

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

conn是一个套接字,并作为参数传递给$ init每个线程都接收一个唯一的套接字。 在运行方法中,我有:

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方法阻塞了,但是为什么要这么做呢?

可能是因为recv正在从文件读取并且I / O处于阻塞状态? (套接字也是您可能知道的文件):)

在这里查看: python socket.recv / sendall调用阻止以获取更多信息:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM