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订阅了。
“延迟”通常可以用于“打印”,但不能“发布”,
我不明白为什么发布是连续的...
答案 0 :(得分:2)
这非常简单:MQTT需要运行其事件循环以处理网络通信。通过使线程处于休眠状态,您可以有效地使控制权脱离MQTT,并使它无法做任何有用的事情。
代替阻塞线程,您应该让MQTT的事件循环处理计时:
for i in range(3):
print(i)
mqttc.publish("test", "hello")
mqttc.loop(timeout=3.0)
您还可以使用loop_start()
和loop_stop()
在不同的线程上运行后台事件循环,但是线程并不是便宜的资源,因此,如果您浪费整个线程实际上不执行任何操作,最好让该线程有用。使用线程的经验法则是,如果一个线程遇到一个问题,而两个线程遇到两个或更多个问题(它们往往会成倍增加)。