uvloop icon indicating copy to clipboard operation
uvloop copied to clipboard

`asyncio.get_event_loop` raises error instead of spawning new loop when no loop is running.

Open anonymousx97 opened this issue 2 months ago • 6 comments

>>> import uvloop, asyncio
>>> asyncio.get_event_loop()
<_UnixSelectorEventLoop running=False closed=False debug=False>
>>> uvloop.install()
>>> asyncio.get_event_loop()
Traceback (most recent call last):
  File "<python-input-4>", line 1, in <module>
    asyncio.get_event_loop()
    ~~~~~~~~~~~~~~~~~~~~~~^^
  File "/usr/local/lib/python3.13/site-packages/uvloop/__init__.py", line 206, in get_event_loop
    raise RuntimeError(
    ...<2 lines>...
    )
RuntimeError: There is no current event loop in thread 'MainThread'.
>>>

As you can see in the snippet above when run on un-patched asyncio it's returning a new loop. But uvloop raises error because of the method override which was not there in previous version inheriting the original new loop spawning function.

anonymousx97 avatar Oct 17 '25 15:10 anonymousx97

Got this issue with aiohttp.GunicornUVLoopWebWorker after updating uvloop to 0.22.1. Note that uvloop==0.21.0 does work properly, and uvloop==0.22.1 does not. For now added the following to my requirements.txt: uvloop!=0.22.1 — I hope the issue will be fixed in the next version.

MarSoft avatar Oct 18 '25 14:10 MarSoft

Roger; I'm looking into this

fantix avatar Oct 18 '25 14:10 fantix

Same issue here. It looks like 0.22.x's EventLoopPolicy overrides its base class asyncio.events.BaseDefaultEventLoopPolicy's get_event_loop function, and removes the creating new loop behavior.

andylin-hao avatar Oct 20 '25 06:10 andylin-hao

Same here; uvicorn couldn't start. The thing took a while to figure out because it started to happen without code/image changes:

Traceback (most recent call last):
  File "/usr/local/bin/uvicorn", line 7, in <module>
    sys.exit(main())
             ^^^^^^
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 829, in __call__
    return self.main(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 782, in main
    rv = self.invoke(ctx)
         ^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 1066, in invoke
    return ctx.invoke(self.callback, **ctx.params)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/click/core.py", line 610, in invoke
    return callback(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/uvicorn/main.py", line 362, in main
    run(**kwargs)
  File "/usr/local/lib/python3.11/site-packages/uvicorn/main.py", line 386, in run
    server.run()
  File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 48, in run
    loop = asyncio.get_event_loop()
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/uvloop/__init__.py", line 206, in get_event_loop
    raise RuntimeError(
RuntimeError: There is no current event loop in thread 'MainThread'.

danielbasso avatar Oct 20 '25 15:10 danielbasso

Same here, multiple project, including sglang and verl is impacted

DiegoD94 avatar Oct 28 '25 18:10 DiegoD94

Same here.

mlserver[mlflow]==1.7.0 failed to start

2025-10-29 13:49:42,186 [mlserver.parallel] INFO - New worker with PID 89 on default inference pool is now ready.
Process Worker-20:
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/multiprocessing/process.py", line 314, in _bootstrap
    self.run()
  File "/usr/local/lib/python3.11/site-packages/mlserver/parallel/worker.py", line 70, in run
    self._ignore_signals()
  File "/usr/local/lib/python3.11/site-packages/mlserver/parallel/worker.py", line 81, in _ignore_signals
    loop = asyncio.get_event_loop()
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/uvloop/__init__.py", line 206, in get_event_loop
    raise RuntimeError(
RuntimeError: There is no current event loop in thread 'MainThread'.
Process Worker-19:
Traceback (most recent call last):
  File "/usr/local/lib/python3.11/multiprocessing/process.py", line 314, in _bootstrap
    self.run()
  File "/usr/local/lib/python3.11/site-packages/mlserver/parallel/worker.py", line 70, in run
    self._ignore_signals()
  File "/usr/local/lib/python3.11/site-packages/mlserver/parallel/worker.py", line 81, in _ignore_signals
    loop = asyncio.get_event_loop()
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.11/site-packages/uvloop/__init__.py", line 206, in get_event_loop
    raise RuntimeError(
RuntimeError: There is no current event loop in thread 'MainThread'.
Process Worker-16:
kubectl exec -n kserve 5f9885f6d9-wzg6d -- pip list | grep -E "(uvloop|mlserver)"
Defaulted container "kserve-container" out of: kserve-container, storage-initializer (init)
mlserver                                 1.7.1
mlserver-mlflow                          1.7.1
uvloop                                   0.22.1

alex-darrow avatar Oct 29 '25 14:10 alex-darrow