Skip to main content

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

Graceful Shutdowns with asyncio

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

aioshutdown-0.0.4.tar.gz (5.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

aioshutdown-0.0.4-py3-none-any.whl (5.4 kB view details)

Uploaded Python 3

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

Hashes for aioshutdown-0.0.4.tar.gz
Algorithm Hash digest
SHA256 e0627700fbf6388d3ab4faccf7204e78eb4a1c78caa9236d5e429967df7e2f80
MD5 f4f20be94e498ab49fda0950fcb92cdf
BLAKE2b-256 9ab5f4d1fb8063c67781eb5468c4125f2b3f651c834ca8886f03743f93b6f466

See more details on using hashes here.

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

Hashes for aioshutdown-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 b70d4e63f3a01184af4cf404d175c74a94cc033db623722ed0e4da908cf56338
MD5 63a5ecf3709bbe6a333b8aed2a04eb00
BLAKE2b-256 c4090480a8bb9eb22621f1f3f26004c7fab1ce40e01ff7c35493aab33361f525

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page