Stack Exchange
Paho MQTT Publish и Subscribe
Имеется код:
#!/usr/bin/python
# -*- coding: utf-8 -*-

import paho.mqtt.client as mqtt
import os

#Переменные
topic = "/home/my_room/pc"
#Переменные

def on_connect(mqttc, obj, flags, rc):
    print("Connection status: " + str(rc))


def on_message(mqttc, obj, msg):
    print(msg.topic + ": " + str(msg.payload))
    if msg.topic == topic and msg.payload == b'0':
        os.system("shutdown /s /t 1 /f")


def on_publish(mqttc, obj, mid):
    print("Published: " + str(mid))


def on_subscribe(mqttc, obj, mid, granted_qos):
    print("Subscribed: " + str(mid) + " " + str(granted_qos))


def on_log(mqttc, obj, level, string):
    print(string)


mqttc = mqtt.Client()
mqttc.on_message = on_message
mqttc.on_connect = on_connect
mqttc.on_publish = on_publish
mqttc.on_subscribe = on_subscribe
mqttc.username_pw_set(username="stackoverflow",password="stackoverflow")
mqttc.connect("example.com", 1111, 1200)
mqttc.publish(topic, payload=1, qos=2, retain=True)
mqttc.subscribe(topic, 1)

mqttc.loop_forever()

Подразумевается, что подписка на топик будет выполнена после публикации, но происходит всё с точностью до наоборот. Прикладываю лог программы:
Connection status: 0
Subscribed: 2 (1,)
/home/my_room/pc: b'1'
Published: 1
/home/my_room/pc: b'1'

Можете объяснить, почему так происходит, и как это исправить?

я думаю, что вам нужно объяснить логику, т.к. подписка происходит в момент инициализации клиента, а публикация завязывается на логику. Другими словами когда клиент поднят, тогда он получает все сообщения преднозначенные ему или reteined сообщения, которые сохранены на брокере для этого клиента.

Спасибо за наводку. Исправил с помощью publish.single
