我的 Python 脚本打开了 Raspberry Pi 的 WiFi,并在短暂延迟后尝试与 Paho MQTT 连接。如果延迟不够长,它就会失败。
我正在使用 paho-mqtt 版本 1.4.1
编辑:我已经添加了status_con =
应该已经存在的开始行。我确实先实例化客户端,然后.connect()
立即使用。这.connect()
是产生错误的原因。
try:
mqtt_client = mqtt.Client(client_id="Luke, I am your client",
clean_session=True, userdata=None,
transport="tcp")
status_con = self.mqtt_client.connect(host=self.mqtt_host_url,
keepalive=self.mqtt_keepalive,
port=self.mqtt_port) # 5 https://stackoverflow.com/a/35581280/3904031
except: # never gets here!
print "connect failed, sleeping for 20 seconds: "
time.sleep(20)
print " now try again: "
mqtt_client = mqtt.Client(client_id="Luke, I'm no longer your client",
clean_session=True, userdata=None,
transport="tcp")
而不是被try:
它错误捕获并给出以下消息
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 768, in connect
return self.reconnect()
File "/usr/local/lib/python2.7/dist-packages/paho/mqtt/client.py", line 895, in reconnect
sock = socket.create_connection((self._host, self._port),
source_address=(self._bind_address, 0))
File "/usr/lib/python2.7/socket.py", line 553, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):gaierror:
[Errno -5] No address associated with hostname
如果我增加延迟,那么它总是连接。
现在,我的解决方案是每隔几秒钟 ping 一个随机的 Internet 站点,socket
直到它正常工作,然后尝试连接 MQTT,但我仍然希望不会产生如此灾难性的结果。
所以我想要的是一种在没有 Paho 崩溃的情况下解决问题的方法,然后在 10 秒内再试一次,然后再试一次......
有没有办法让 Paho 为我做这件事,或者至少让我处理异常try/except
?