python-trio / triopg

PostgreSQL client for Trio based on asyncpg
Other
45 stars 8 forks source link

New listen helper with backpressure using new asyncpg add_listener api from v0.24 #17

Open andersea opened 2 years ago

andersea commented 2 years ago

I originally came up with the listen helper for my personal code and I am very happy to see it implemented directly in triopg.

Now in asyncpg v0.24 add_listener now allows the callback to a coroutine. This allows the posibility of another message passing strategy where backpressure is allowed.

The callback function could concievably be as simple as:

async def _listen_callback(c, pid, chan, payload):
        await trio_asyncio.trio_as_aio(send_channel.send)(payload)

The wrapper is necessary, since the callback is running in asyncio, and MemorySendChannel.send does stuff with trio.lowlevel.current_task().

What do you think?