Skip to content

set_exception_handler is not handling exception as expected. #360

@sooryranga

Description

@sooryranga
  • uvloop version: 0.14.0
  • Python version: 3.6.9
  • Platform: Linux c965e3d4adf2 5.3.0-1032-gcp aiohttp and uvloop - crash #34~18.04.1-Ubuntu SMP
  • Can you reproduce the bug with PYTHONASYNCIODEBUG in env?: yes
  • Does uvloop behave differently from vanilla asyncio? How?:

Yes asyncio default loop catches TimeoutError: [Errno 110] Connection timed out whereas uvloop closes the loop and throws RuntimeError: Event loop stopped before Future completed.

I ran across this bug when dealing with websockets (you could see the issue - python-websockets/websockets#823)

To log this error :

def handle_async_exception(loop, ctx):
    logger.error("Loop error occured", ctx=ctx)
loop = asyncio.get_event_loop()
loop.set_exception_handler(handle_async_exception)

Python websockets throw a TimeoutError when a client is not found in a certain time limit (for ping/ pongs). In asyncio, the error is bubbled to set_exception_handler, and I could log it there as expected. However in uvloop, instead of having the exception being bubbled to exception_handler, it shuts down the loop. I get the following error:

Process Process-9:
Traceback (most recent call last):
  File "/usr/lib/python3.6/multiprocessing/process.py", line 258, in _bootstrap
    self.run()
  File "/usr/lib/python3.6/multiprocessing/process.py", line 93, in run
    self._target(*self._args, **self._kwargs)
  File "/home/streaming/app/emitter_app/emitter.py", line 60, in start_emitter
    loop.run_until_complete(asyncio.gather(server.serve(), push_payload(queue)))
  File "uvloop/loop.pyx", line 1454, in uvloop.loop.Loop.run_until_complete
RuntimeError: Event loop stopped before Future completed.

Thanks for your time! Appreciate such a neat package to make asyncio faster in python.

Activity

fantix

fantix commented on Jan 21, 2021

@fantix
Member

Thanks for the report! Unfortunately with a simple echo server/client, I cannot reproduce your issue. Could you please provide a self-contained script to reproduce the issue please?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @fantix@sooryranga

        Issue actions

          set_exception_handler is not handling exception as expected. · Issue #360 · MagicStack/uvloop