Motivation
Current wait_set based executors are highly inefficient and don’t integrate cleanly with Python’s asyncio ecosystem.
Examples of inefficiencies in the wait_set executor:
- Reoccurring construction of the wait set
- Revisiting blocked tasks every iteration
- Busy looping while a callback group is blocking
Advantages of integrating with asyncio:
- Better support for asynchronous code – take advantage of many existing features like
call_later(), sleep(), and task exception handling
- Easy integration with large Python libraries –
FastAPI, pyserial-asyncio, pytransitions, aiohttp, python-can, etc.
- High performance –
asyncio is already far more optimized than the existing wait_set executor, and libraries like uvloop are available for even higher performance, matching the current cpp implementation of the EventsExecutor
- Reduction in code duplication - lower maintenance costs and library complexity by transitioning to a built in event loop implementation
Related Issues & PRs
Motivation
Current wait_set based executors are highly inefficient and don’t integrate cleanly with Python’s
asyncioecosystem.Examples of inefficiencies in the wait_set executor:
Advantages of integrating with asyncio:
call_later(),sleep(), and task exception handlingFastAPI,pyserial-asyncio,pytransitions,aiohttp,python-can, etc.asynciois already far more optimized than the existing wait_set executor, and libraries like uvloop are available for even higher performance, matching the current cpp implementation of the EventsExecutorRelated Issues & PRs