Python Paho客户端发布至少1个错过的publsh失败

时间:2016-02-18 01:21:12

标签: python mqtt paho

我正在使用paho-mqtt编写python客户端,我使用publish()使用已建立的连接发布数据。

mqttc = mqtt.Client()
...
while True:
    ...
    rc = mqttc.publish(topic, data)

但是服务器会把我抽出去。但是,在我再次调用发布之前,我没有得到超时。

我按照以下顺序获得了rc:

(0, 1)
delay
(0, 2)
[Errno 32] Broken pipe
(1, 3)

使用Wireshark,我看到当我第二次发布时,连接被重置。但是在我第三次发布之前,我没有得到“破管”。我尝试提供on_disconnect回调,它也只在第3次发布后调用。

调用发布的正确方法是什么,并通知发布已立即失败?此外,“Broken pipe”消息似乎不是例外。如何防止打印?

1 个答案:

答案 0 :(得分:3)

正如@ jan-vlcinsky暗示的那样,你需要包含一个调用,要么在后台启动客户端网络循环,要么在前台运行循环。

E.g。

mqttc = mqtt.Client()
mqttc.loop_start()
...
while True:
    ...
    rc = mqttc.publish(topic, data)

或者

mqttc = mqtt.Client()
...
while True:
    ...
    rc = mqttc.publish(topic, data)
    mqttc.loop()