Python MQTT连接仅限于有限的tim

2024-04-20 08:25:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python脚本,其中我连接到一个MQTT服务器。我希望通过订阅的主题获得一条消息,但是如果我没有收到消息,我希望完全终止脚本。在

我正在处理的脚本如下所示:

#!/usr/bin/python
import sys
import json
import paho.mqtt.client as mqtt

def on_message(client, userdata, msg):
        if msg.topic == "discovery":
                data = json.loads(msg.payload)
                serial = data['serial']
                print "test successful!"
                sys.exit(0)

def on_connect(client, userdata, flags, rc):
        client.subscribe([("discovery", 2)])

client = mqtt.Client()
try:
        client.connect('localhost', 4444)
except:
        print "ERROR: Could not connect to MQTT
client.on_connect = on_connect
client.on_message = on_message
client.loop_forever()

我尝试过使用whiletrue语句循环并计算从启动脚本到获取消息之间的时间,但它似乎(显然)无法逃过循环,即使它获得消息。在

有没有一种方法可以告诉我它连接了多长时间,当它超过这个时间时,就完全终止脚本?在

或者,是否有一种方法(正如我之前所尝试的那样)在循环中同时考虑消息的传递?在

谢谢你的建议!在


Tags: import脚本clientjson消息messageondef
1条回答
网友
1楼 · 发布于 2024-04-20 08:25:03

试试这个

它应该等待大约5秒的传入消息,然后退出。您可以通过在while循环之前更改值waitTime来调整等待时间

我使用了mqtt网络循环函数的版本,该函数只运行很短时间,并将其放入while循环中。循环还检查运行时间,并在退出循环之前干净地断开客户端。我还为收到消息时添加了一个干净的客户端出口。在

#!/usr/bin/python
import sys
import json
import paho.mqtt.client as mqtt
import time

def on_message(client, userdata, msg):
        if msg.topic == "discovery":
                data = json.loads(msg.payload)
                serial = data['serial']
                print "test successful!"
                client.disconnect()
                sys.exit(0)

def on_connect(client, userdata, flags, rc):
        client.subscribe([("discovery", 2)])

client = mqtt.Client()
try:
        client.connect('localhost', 4444)
except:
        print "ERROR: Could not connect to MQTT"

client.on_connect = on_connect
client.on_message = on_message
startTime = time.time()
waitTime = 5
while True:
        client.loop()
        elapsedTime = time.time() - startTime
        if elapsedTime > waitTime:
                client.disconnect()
                break

相关问题 更多 >