Paho MQTT (Python) - loop_start() 不工作
Paho MQTT (Python) - loop_start() not working
我正在编写一个 MQTT 客户端,它只连接到代理,发布消息然后断开连接。这是代码:
def on_connect_v5(client, userdata, flags, rc, properties):
print('connected')
client.publish(topic, payload, 0)
def on_publish(client, userdata, mid):
print(f'mid: {mid}')
client.disconnect()
client = paho.Client(protocol=paho.MQTTv5)
client.on_connect = on_connect_v5
client.on_publish = on_publish
client.connect(host, port, 60)
client.loop_start()
# client.loop_forever()
问题是当我使用loop_start()
时,客户端似乎没有连接成功,但loop_forever()
可以。我是不是对 loop_start()
功能做错了什么,正确的使用方法是什么?
BTW: have tried use the paho.mqtt.publish
module and always get a Socket timed out. Appreciated if someone can explain it as well.
不同的是loop_forever
会屏蔽程序。 loop_start
,只启动一个守护线程,但不阻塞。所以你的程序继续。在您显示的代码中,这意味着该程序存在。
您可以在这里阅读更多内容:https://github.com/eclipse/paho.mqtt.python#network-loop
Calling loop_start() once, before or after connect*(), runs a thread in the background to call loop() automatically. This frees up the main thread for other work that may be blocking.
loop_forever(). This is a blocking form of the network loop and will not return until the client calls disconnect(). It automatically handles reconnecting.
您的主线程没有等待loop_start()
;因为它的守护线程。守护线程在完成其工作之前不会阻塞程序。当您的主线程完成时,您的工作就会自杀。那也是杀死你的 loop_start()
线程。如果您的主线程有无限循环或更长的循环,您的 loop_start()
可以完美运行
我正在编写一个 MQTT 客户端,它只连接到代理,发布消息然后断开连接。这是代码:
def on_connect_v5(client, userdata, flags, rc, properties):
print('connected')
client.publish(topic, payload, 0)
def on_publish(client, userdata, mid):
print(f'mid: {mid}')
client.disconnect()
client = paho.Client(protocol=paho.MQTTv5)
client.on_connect = on_connect_v5
client.on_publish = on_publish
client.connect(host, port, 60)
client.loop_start()
# client.loop_forever()
问题是当我使用loop_start()
时,客户端似乎没有连接成功,但loop_forever()
可以。我是不是对 loop_start()
功能做错了什么,正确的使用方法是什么?
BTW: have tried use the
paho.mqtt.publish
module and always get a Socket timed out. Appreciated if someone can explain it as well.
不同的是loop_forever
会屏蔽程序。 loop_start
,只启动一个守护线程,但不阻塞。所以你的程序继续。在您显示的代码中,这意味着该程序存在。
您可以在这里阅读更多内容:https://github.com/eclipse/paho.mqtt.python#network-loop
Calling loop_start() once, before or after connect*(), runs a thread in the background to call loop() automatically. This frees up the main thread for other work that may be blocking.
loop_forever(). This is a blocking form of the network loop and will not return until the client calls disconnect(). It automatically handles reconnecting.
您的主线程没有等待loop_start()
;因为它的守护线程。守护线程在完成其工作之前不会阻塞程序。当您的主线程完成时,您的工作就会自杀。那也是杀死你的 loop_start()
线程。如果您的主线程有无限循环或更长的循环,您的 loop_start()
可以完美运行