为什么 "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()
但是线程不是一种廉价的资源,所以如果您不是在浪费整个线程实际上什么都不做,最好让该线程有用。线程的经验法则是,如果一个线程有一个问题,两个线程有两个或更多问题(它们往往会成倍增加)。
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()
但是线程不是一种廉价的资源,所以如果您不是在浪费整个线程实际上什么都不做,最好让该线程有用。线程的经验法则是,如果一个线程有一个问题,两个线程有两个或更多问题(它们往往会成倍增加)。