[英]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訂閱中找到的。
延遲正常可用於“打印”,但不能“發布”,
我不明白為什么發布是連續的...
這非常簡單:MQTT需要運行其事件循環以處理網絡通信。 通過使線程處於休眠狀態,您可以有效地使控制權脫離MQTT,並使它無法做任何有用的事情。
而不是阻塞線程,您應該讓MQTT的事件循環處理計時:
for i in range(3):
print(i)
mqttc.publish("test", "hello")
mqttc.loop(timeout=3.0)
您還可以使用loop_start()
和loop_stop()
在不同的線程上運行后台事件循環,但是線程並不是便宜的資源,因此,如果您浪費整個線程而實際上不做任何事情,最好讓該線程而是有用的。 線程的經驗法則是,如果一個線程遇到一個問題,而兩個線程遇到兩個或更多問題(它們趨於成倍增加)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.