Polyconseil / aioamqp

AMQP implementation using asyncio
Other
280 stars 88 forks source link

No longer handling CancelledError on protocol.run #240

Open notmeta opened 1 year ago

notmeta commented 1 year ago

Since Python 3.8, aioamqp no longer catches and reraises asyncio.CancelledError in protocol.run, leading to delayed manual disconnections.

A fix is just handling both asyncio.CancelledError and Exception like so:

async def run(self):
    while not self.stop_now.is_set():
        try:
            await self.dispatch_frame()
        except exceptions.AmqpClosedConnection as exc:
            logger.info("Close connection")
            self.stop_now.set()

            self._close_channels(exception=exc)
        except (asyncio.CancelledError, Exception):
            logger.exception('error on dispatch')