ZMQ套接字连接超时

时间:2014-01-16 17:42:29

标签: python zeromq pyzmq

我正在尝试将套接字连接到端点,直到套接字从该端点接收数据。这是因为当时端点可能不存在。

目前连接失速,我猜是因为它无法解析主机名而需要一段时间。

有没有办法在套接字连接上设置超时?

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

2 个答案:

答案 0 :(得分:2)

如果您为connect提供主机名,则ZeroMQ会通过拨打getaddrinfo来使用同步DNS解析,这就是您看到connect来电阻止的原因。

如果您确实需要以可控方式connect,我建议您使用已经可用于Python的异步DNS解析器之一自行进行DNS解析(检查this example based on pyuc/pycares)。

另见我对similar question的回复。

答案 1 :(得分:1)

问题不是连接,而是DNS查找。阻止是在操作系统级别gethostbyname呼叫上完成的。

由于超时由操作系统控制,因此可以解决它is hard(但可行)。我的建议是你只需硬编码IP