Boilerplate for asyncio applications
Project description
ALPHA
aiorun
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for aiorun-2017.10.1-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 095894c711bf65e509f2da8de95843dade8e4f56e000c4df2dde0a6e263c5665 |
|
MD5 | f5190ad7182477256f38315a4d675be3 |
|
BLAKE2b-256 | 40d575516116e00712c40931accbbaacc4455cb15a89b63fb31e731119b20b78 |