Tornado IOLoop でノンブロッキング ソケットを非同期的に実行しています。ただし、これにもかかわらず、ブロックが発生する場合があり (0% CPU によって証明されるように)、常にErrorno -2 Name or service not known
.
なぜこれが起こるのですか?
約 5 秒間ブロックします (少なくともタイムアウトの 2 倍以上)。常に 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