Редактировать: я выполнил ваш код на своем конце, и примерно через 30 секунд я получил исключение TimeoutError
: "A connection attempt failed because the connected party did not properly respond after a period of time"
.Вам необходимо обработать это исключение в своем коде, чтобы программа продолжала работать, даже если она не может подключиться:
try:
client.connect("118.138.47.99", 1883, 60)
client.loop_forever()
except:
print("failed to connect, moving on")
print("rest of the code here")
Это выводит:
failed to connect, moving on
rest of the code here
Однако, используя connect()
и loop_forever()
не подходит для ваших нужд, так как они блокируют функции (то есть они блокируют выполнение вашего кода и не позволяют ему делать что-либо еще).С кодом выше, если клиент успешно соединяется, print("rest of the code here")
никогда не будет достигнут из-за loop_forever()
.
Вместо этого попробуйте использовать connect_async()
в сочетании с loop_start()
для подключения в неблокирующем режиме.образом (это означает, что ваша программа может продолжать делать другие вещи при попытке подключения в фоновом режиме):
client.connect_async("118.138.47.99", 1883, 60)
client.loop_start()
print("rest of the code here")
while True:
time.sleep(1)
Это выводит rest of the code here
и продолжает работать бесконечно (в бесконечном цикле while
) независимо от того,соединение было успешным или нет.
Обратите внимание, что в вашем определении on_connect()
отсутствует один аргумент.Это должно быть:
on_connect(client, userdata, flags, rc)
Также было бы неплохо проверить код возврата on_connect
и подписаться только в случае успешного подключения:
def on_connect(client, userdata, flags, rc):
if rc == 0:
client.connected_flag = True # set flag
print("Connected OK")
client.subscribe("demo/test1")
else:
print("Bad connection, RC = ", rc)
mqtt.Client.bad_connection_flag = True
# create flags so you can check the connection status throughout the script
mqtt.Client.connected_flag = False
mqtt.Client.bad_connection_flag = False
См. https://www.eclipse.org/paho/clients/python/docs/ и http://www.steves -internet-guide.com / client-connections-python-mqtt / .
Для быстрого тестирования успешного соединения,Вы можете подключиться к test.mosquitto.org
(см. https://test.mosquitto.org/).