为什么 "time.sleep" 不延迟 MQTT 发布消息?

Why isn't "time.sleep" delaying the MQTT publish messages?

Python 2.7

我要发布3次,间隔=3秒

所以我尝试使用time.sleep(3),然后发布。

我的代码是这样的:

for i in range(3):
    print(i)
    mqttc.publish("test", "hello")
    time.sleep(3)

结果应该是这样的:

0
(Publish)
(delay 3 sec)
1
(Publish)
(delay 3 sec)
2
(Publish)
(delay 3 sec)

但实际结果是:

0
(delay 3 sec)
1
(delay 3 sec)
2
(delay 3 sec)
(Publish)
(Publish)
(Publish)

真实结果来自MQTT.fx和Python订阅

延迟正常工作到 "Print",但 "Publish" 不是,

我不明白为什么发布是连续的...

这很简单:MQTT 需要让其事件循环 运行 处理网络通信。通过让线程休眠,您可以有效地从 MQTT 手中夺走控制权,并阻止它做任何有用的事情。

您应该让 MQTT 的事件循环处理计时,而不是阻塞线程:

for i in range(3):
    print(i)
    mqttc.publish("test", "hello")
    mqttc.loop(timeout=3.0)

您还可以 运行 在不同的线程上进行后台事件循环,使用 loop_start()loop_stop() 但是线程不是一种廉价的资源,所以如果您不是在浪费整个线程实际上什么都不做,最好让该线程有用。线程的经验法则是,如果一个线程有一个问题,两个线程有​​两个或更多问题(它们往往会成倍增加)。