簡體   English   中英

為什么“ 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訂閱中找到的。

延遲正常可用於“打印”,但不能“發布”,

我不明白為什么發布是連續的...

這非常簡單: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM