-
Notifications
You must be signed in to change notification settings - Fork 567
Open
Labels
Description
- 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.
marcosschroh
Metadata
Metadata
Assignees
Labels
Type
Projects
Milestone
Relationships
Development
Select code repository
Activity
fantix commentedon Jan 21, 2021
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?