Context manager that provides simple graceful shutdown interface for your asyncio tasks.
Project description
aioshutdown
Context manager that provides simple graceful shutdown interface for your asyncio tasks.
Installation
pip install -U aioshutdown
Usage
Just specify the list of signals that you want to intercept using the | operator:
from aioshutdown import SIGTERM, SIGINT, SIGHUP
with SIGTERM | SIGHUP | SIGINT as loop:
...
The context manager will return an instance of the current event loop. You can intercept signals directly inside your coroutines:
async def my_task(sleep: int):
try:
""" Main logic of your coroutine. """
except asyncio.CancelledError as exc:
""" In this place you can gracefully complete the work. """
Full example:
import asyncio
from aioshutdown import SIGTERM, SIGINT, SIGHUP
import logging
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s,%(msecs)d %(levelname)s: %(message)s",
datefmt="%H:%M:%S",
)
async def my_task(sleep: int):
try:
while True:
logging.info("Sleep from task #%s", sleep)
await asyncio.sleep(sleep)
except asyncio.CancelledError as exc:
# Received an exit signal. In this place we gracefully complete the work.
signal = exc.args[0] # NOTE: works in Python >= 3.9 only: https://docs.python.org/3/library/asyncio-future.html?highlight=Changed%20in%20version%203.9:%20Added%20the%20msg%20parameter.#asyncio.Future.cancel
logging.warning("Received %s signal. Shutting down...", signal.value)
# Usage with `run_forever`
with SIGTERM | SIGHUP | SIGINT as loop:
tasks = [loop.create_task(my_task(i)) for i in range(1, 10)]
loop.run_forever()
# Usage with `run_until_complete`
with SIGTERM | SIGHUP | SIGINT as loop:
tasks = [loop.create_task(my_task(i)) for i in range(1, 10)]
loop.run_until_complete(asyncio.gather(*results))
Output
23:04:05,798 INFO: Sleep from task #1
23:04:05,798 INFO: Sleep from task #2
23:04:06,799 INFO: Sleep from task #1
23:04:07,800 INFO: Sleep from task #2
23:04:07,800 INFO: Sleep from task #1
23:04:08,801 INFO: Sleep from task #1
^C23:04:09,504 INFO: Received exit signal SIGINT...
23:04:09,504 INFO: Cancelling 2 outstanding tasks
23:04:09,504 WARNING: Received 2 signal. Shutting down...
23:04:09,504 WARNING: Received 2 signal. Shutting down...
23:04:09,504 INFO: Stopping event loop
Useful links
Project details
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file aioshutdown-0.0.4.tar.gz.
File metadata
- Download URL: aioshutdown-0.0.4.tar.gz
- Upload date:
- Size: 5.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.8.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e0627700fbf6388d3ab4faccf7204e78eb4a1c78caa9236d5e429967df7e2f80
|
|
| MD5 |
f4f20be94e498ab49fda0950fcb92cdf
|
|
| BLAKE2b-256 |
9ab5f4d1fb8063c67781eb5468c4125f2b3f651c834ca8886f03743f93b6f466
|
File details
Details for the file aioshutdown-0.0.4-py3-none-any.whl.
File metadata
- Download URL: aioshutdown-0.0.4-py3-none-any.whl
- Upload date:
- Size: 5.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.8.18
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b70d4e63f3a01184af4cf404d175c74a94cc033db623722ed0e4da908cf56338
|
|
| MD5 |
63a5ecf3709bbe6a333b8aed2a04eb00
|
|
| BLAKE2b-256 |
c4090480a8bb9eb22621f1f3f26004c7fab1ce40e01ff7c35493aab33361f525
|