如果 Internet 连接未准备好,Paho MQTT connect() 将异常失败,无法捕获异常

物联网 MQTT 帕霍
2021-06-15 08:20:25

我的 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

0个回答
没有发现任何回复~