`asyncio.get_event_loop` raises error instead of spawning new loop when no loop is running.
>>> 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.
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.
Roger; I'm looking into this
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.
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'.
Same here, multiple project, including sglang and verl is impacted
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