Boilerplate for asyncio applications
Here’s the big idea (how you use it):
import asyncio from aiorun import run async def main(): # Put your application code here await asyncio.sleep(1.0) if __name__ == '__main__': run(main())
This package provides a run() function as the starting point of your asyncio-based application.
So what the heck does run() do exactly?? It:
- creates a Task for the given coroutine (schedules it on the event loop),
- calls loop.run_forever(),
- adds default (and smart) signal handlers for both SIGINT and SIGTERM that will stop the loop, and then it…
- gathers all outstanding tasks,
- cancels them using task.cancel() (you can choose whether or not to handle CancelledError in your coroutines),
- waits for the executor to complete shutdown, and
- finally closes the loop.
All of this stuff is boilerplate that you will never have to write again. So, if you use aiorun this is what you need to remember:
- Spawn all your work from a single, starting coroutine
- When a shutdown signal is received, all currently-pending tasks will have CancelledError raised internally. It’s up to you whether you want to handle this in a try/except or not.
- Try to have executor jobs be shortish, since shutdown will wait for them to finish. If you need a long-running thread or process tasks, use a dedicated thread/subprocess and set daemon=True instead.
There’s not much else to know.
Release history Release notifications | RSS feed
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
|Filename, size||File type||Python version||Upload date||Hashes|
|Filename, size aiorun-2017.10.2-py2.py3-none-any.whl (15.6 kB)||File type Wheel||Python version py2.py3||Upload date||Hashes View|
|Filename, size aiorun-2017.10.2.tar.gz (8.0 kB)||File type Source||Python version None||Upload date||Hashes View|
Hashes for aiorun-2017.10.2-py2.py3-none-any.whl