I am developing a helper app to clean the retained messages on my Mosquitto MQTT service. The problem I have is how to process the queue **once** with [Paho MQTT][1].

I know how to

- block the thread (`loop_forever()`)
- query the queue asynchronously (`loop_start()`/ `loop_stop()`)

What I would like to do is to process the queue once and quit (and process each of the topics gathered this way, which are (most likely) retained messages)

`loop()` was the most promising:

> Call regularly to process network events. This call waits in select()
> until the network socket is available for reading or writing, if
> appropriate, then handles the incoming/outgoing data.

Unfortunately I do not see any topics when using it.

Right now my code starts a thread, waits 2 seconds and stops it. It does the job but I would like to understand how to do that cleanly though a one-pass processing:

    import paho.mqtt.client as mqtt
    import time
    
    class MQTT:
    
        def __init__(self):
            print("initializing app")
            self.client = mqtt.Client()
            self.client.on_connect = self.on_connect
            self.client.on_message = self.on_message
            self.client.connect("mqtt.example.com", 1883, 60)
            self.client.loop_start()
            time.sleep(2)
            self.client.loop_stop()
    
        def on_connect(self, client, userdata, flags, rc):
            print("connected to MQTT with result code " + str(rc))
            self.client.subscribe("#")
    
        def on_message(self, client, userdata, msg):
            # EDIT: added a check for actually retained messages
            if msg.retain:
                print(f"removing retained {msg.topic}")
                self.client.publish(msg.topic, retain=True)
    
    MQTT()


  [1]: https://pypi.python.org/pypi/paho-mqtt/1.1