2

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
4

1 に答える 1

0

それが答えかどうかはわかりませんが、役に立ったと思います(3番目の段落を参照):

        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

        streamloop.add_callback(self.connect, s)

        # added this to close sockets completely after use. might help.
        l_onoff = 1
        l_linger = 0
        s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', l_onoff, l_linger))
于 2013-03-11T18:06:06.117 に答える