我在 Tornado IOLoop 中异步运行非阻塞套接字。但是,尽管如此,有时会出现块(如 0% CPU 所证明的那样),并且总是导致Errorno -2 Name or service not known
.
为什么会这样?
它阻塞了大约五秒钟(至少是超时的两倍多)。在任何给定时间可能有 15-30 个打开的套接字,与setsockopt
标志一起重复使用。
插座:
# make connection
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.settimeout(2) # 2 seconds timeout
ioloop.add_callback(self.connect, s)
龙卷风错误警告:
WARNING:tornado.general:Connect error on fd 23: [Errno -2] Name or service not known