0

ソケットがエンドポイントからデータを受信するまで、ソケットをエンドポイントに接続しようとしています。これは、その時点でエンドポイントが存在しない可能性があるためです。

現在、接続が停止しています。ホスト名を解決できず、時間がかかるためだと思います。

ソケット接続でタイムアウトを設定する方法はありますか?

import zmq
import time

endpoint = 'tcp://doesnt_exist:12345'

ctx = zmq.Context.instance()
s = ctx.socket(zmq.SUB)

t = time.time()
try:
    s.connect(endpoint)
except Exception:
    pass

print time.time() - t
4

2 に答える 2

1

問題は接続ではなく、DNS ルックアップです。ブロッキングは、呼び出し時に OS レベルで行われgethostbynameます。

タイムアウトは OS によって制御されるため、回避するのは困難です(ただし、実行可能です)。私の提案は、単に IP をハードコーディングすることです。

于 2014-01-16T20:15:33.843 に答える