Python 3.9 asyncio: Task cancel() throws asyncio.exceptions.CancelledError instead of asyncio.CancelledError

Clint Olsen clint.olsen at gmail.com
Fri Mar 31 16:34:14 EDT 2023


I'm having some issues with task cancellation inside a signal handler. My tasks do get cancelled, but I see odd behavior:

Traceback (most recent call last):
  File "/home/utils/release/sw/tools/python-3.9.7/lib/python3.9/site-packages/grpc/aio/_call.py", line 406, in _consume_request_iterator
    async for request in request_iterator:
  File "/home/foo/lib/python/rush/client.py", line 105, in send_status
    status = await sendq.get()
  File "/home/utils/Python/3.9/3.9.7-20211101/lib/python3.9/asyncio/queues.py", line 166, in get
    await getter
asyncio.exceptions.CancelledError: Client killed with signal 2

Attempting to catch asyncio.CancelledError or asyncio.CancelledError does not work. The function in question looks like:

101 async def send_status():
102     while True:
103         logging.info('Waiting for sendq')
104         try:
105             status = await sendq.get()
106
107             if not status:
108                 break
109
110             logging.info(f'Sendq status {status}')
111
112             message = rush_pb2.Status(**status)
113             yield message
114         except asyncio.exceptions.CancelledError as err:
115             logging.error(f'Weird error {err}')
116             #raise asyncio.CancelledError
117             break

If I use "except:" it does catch this exception.

What's going on here?

Thanks,

-Clint


More information about the Python-list mailing list