Skip to main content

A Paho MQTT client supporting asyncio loop without additional setup.

Project description

GitHub Release Language grade: Python CodeQL License Project Maintenance buy me a coffee

Asynchronous I/O (asyncio) Paho MQTT client

A Paho MQTT client supporting asyncio loop without additional setup. Forget about configuring the Paho network-loop. The client can almost be used as a drop-in replacement for Paho Client. The asyncio loop is automatically configured when you connect. You should use Paho connect_async() or extension asyncio_connect() to when connecting to avoid blocking.

Usage

Drop-in replacement

client = AsyncioPahoClient()
client.connect_async("mqtt.eclipseprojects.io")

# remove your current looping (loop_forever() etc)
# do mqtt stuff

client.Disconnect()

Asynchronous Context Manager

The client is an Asynchronous Context Manager and can be used with the Python with statement to atomatically disconnect and clean up.

async with AsyncioPahoClient() as client:
    client.connect_async("mqtt.eclipseprojects.io")

    # do mqtt stuff - client.Disconnect() is called when exiting context.

Extensions

The client has some additional async features (functions prefixed with asyncio_).

asyncio_connect

The classic Paho connect() is blocking. Paho connect_async() is not blocking, but returns before the connect is complete. Use asyncio_connect() to wait for connect to complete without blocking. This function also throws exception on connect failure. Please not that asyncio_connect() cannot be used together with on_connect /on_connect_fail (use asyncio_add_on_connect_listener and asyncio_add_on_connect_fail_listener instead of on_connect and on_connect_fail).

async with AsyncioPahoClient() as client:
    await client.asyncio_connect("mqtt.eclipseprojects.io")

Callbacks

Paho has a lot of callbacks. Async alternatives have been added for some of them, but they are mutally exclusive (you have to pick sync or async for eatch callback type).

Classic Paho Extension alternative
on_connect asyncio_add_on_connect_listener()
on_connect_fail asyncio_add_on_connect_fail_listener()
on_message asyncio_add_on_message_listener()
async def on_connect_async(client, userdata, message) -> None:
    client.subscribe("mytopic")

async with AsyncioPahoClient() as client:
    client.asyncio_add_on_connect_listener(on_connect_async)
    await client.asyncio_connect("mqtt.eclipseprojects.io")

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

asyncio_paho-0.2.0.tar.gz (6.7 kB view hashes)

Uploaded Source

Built Distribution

asyncio_paho-0.2.0-py3-none-any.whl (6.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page