Hi All,
Feature or enhancement
Make an async.get_running_loop() that returns None instead of raising RuntimeError. Or make asyncio._get_running_loop() public. Also make a asyncio.current_task() that returns None.
Pitch
Some frameworks, like Django use asyncio.get_running_loop() to detect whether or not the application has a running event loop, and fall back to using threads if not in async mode. This happen a lot across the codebase. The problem is in sync mode asyncio.get_running_loop() always raises RuntimeError, which is very inefficient. It would be much more efficient to get a None value returned. It ends up raising a RuntimeError whenever thread/task-local storage is used in non-async mode.
Example: https://github.com/django/asgiref/blob/main/asgiref/sync.py#L501-L510
https://github.com/django/asgiref/blob/main/asgiref/local.py#L44-L57
asyncio.run uses asyncio._get_running_loop(). Can other programs use it too?
asyncio.run() uses asyncio._get_running_loop() under the hood. https://github.com/python/cpython/blob/main/Lib/asyncio/runners.py#L188
Can asyncio._get_running_loop() be made public so other software can also the more efficient version? Can we get a version of asyncio.current_task() that returns None instead of raising a RuntimeError?
Thanks,
Collin
Hi All,
Feature or enhancement
Make an
async.get_running_loop()that returns None instead of raisingRuntimeError. Or makeasyncio._get_running_loop()public. Also make aasyncio.current_task()that returns None.Pitch
Some frameworks, like Django use
asyncio.get_running_loop()to detect whether or not the application has a running event loop, and fall back to using threads if not in async mode. This happen a lot across the codebase. The problem is in sync modeasyncio.get_running_loop()always raisesRuntimeError, which is very inefficient. It would be much more efficient to get aNonevalue returned. It ends up raising aRuntimeErrorwhenever thread/task-local storage is used in non-async mode.Example: https://github.com/django/asgiref/blob/main/asgiref/sync.py#L501-L510
https://github.com/django/asgiref/blob/main/asgiref/local.py#L44-L57
asyncio.run uses
asyncio._get_running_loop(). Can other programs use it too?asyncio.run() uses
asyncio._get_running_loop()under the hood. https://github.com/python/cpython/blob/main/Lib/asyncio/runners.py#L188Can
asyncio._get_running_loop()be made public so other software can also the more efficient version? Can we get a version ofasyncio.current_task()that returns None instead of raising aRuntimeError?Thanks,
Collin