Skip to main content

daemonizer

PyPI - Version Linting Docs Publish Ruff Dependabot Updates PyPI - Python Version PyPI - Downloads

Light-weight and easy-to-use Python package that simplifies the process of daemonizing Python applications, allowing them to run in the background as standalone logics.

Features

  • Simple API to daemonize any Python function or class
  • Automatic handling of process management (PID files, logging, etc.)
  • Support for start, stop, restart, and status operations
  • Signal handling (SIGTERM, SIGINT, etc.)
  • Compatible with UNIX-like systems
  • Python 3.7+ support

Getting started

Install package using uv or pip:

uv add daemonizer-py # pip install daemonizer-py

Create a Python script daemon.py where you can define your daemon logic following below framework:

from datetime import datetime
from time import sleep

from daemonizer.core.daemons.logic import forever_loop
from daemonizer.core.daemons.unix import UNIXDaemon

class SampleDaemon(UNIXDaemon):
    """ Sample daemon """

    @forever_loop(catch_exceptions=False, after_delay=0.01)
    def run(self) -> None:
        with open("/tmp/hello_daemon.log", "a") as f:
            f.write(f"Hello, World {datetime.now()}\n")
            f.write(f"{self.kwargs().get('ssa', None)}\n")
        sleep(1)

Defining a daemon is very simple:

  1. Create a subclass of UNIXDaemon
  2. Just overload the run(...) method with your logic to be executed in the daemon

[!NOTE] No need to worry about while True: loop. If you decorate the run(...) method with the @forever_loop(...) decorator, the logic defined inside will be executed infinitely.

Optional arguments are available for the @forever_loop(...) decorator. (See docs)

Once defined, you can start a daemon using two methods:

  • Using handler func:
if __name__ == "__main__":
    handler(SampleDaemon(name="daemon_1"))
uv run daemon.py [start|stop|restart|status]
  • Using context manager handler with DaemonHandler():
from daemonizer.core.handlers.ctx_manager import DaemonHandler
# Daemons handler
with DaemonHandler() as h:
    h.start(SampleDaemon1(name="daemon_1"))
    h.start(SampleDaemon2(name="daemon_2"))

[!WARNING] Daemon should have a unique name at global level (no duplicate).

  • Using CLI:
daemonizer start daemon.py # START op will be performed on all daemons defined in this file
daemonizer start daemon.py SampleDaemon1 # START op will be performed **ONLY** on `SampleDaemon1` defined in this file
  • Using API or web-app (WIP)

The package provides a simple command-line interface to interact with the daemonized process. The following commands are available:

$ python3 main.py {start,stop,restart,status}

Contribute

Clone the repo, improve the code base and submit a pull request

git clone https://github.com/lcsrodriguez/daemonizer.git
cd daemonizer/
uv sync
pre-commit install-hooks

License

This project is licensed under the MIT License - see the LICENSE file for details.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

daemonizer_py-1.5.4.tar.gz (74.5 kB view details)

Uploaded Source

Built Distribution

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

daemonizer_py-1.5.4-py3-none-any.whl (30.5 kB view details)

Uploaded Python 3

File details

Details for the file daemonizer_py-1.5.4.tar.gz.

File metadata

  • Download URL: daemonizer_py-1.5.4.tar.gz
  • Upload date:
  • Size: 74.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for daemonizer_py-1.5.4.tar.gz
Algorithm Hash digest
SHA256 97d9b979a84df4773f957a49aa2e5651772fae0986ad28b8a7e66a226df10b15
MD5 048bfc55de416ffd5fb98d10fbdb69c4
BLAKE2b-256 6c99181ea7ad77d247a9d6cd9ed1e93035e3946729dbe1a3d3d9eef2866feb44

See more details on using hashes here.

File details

Details for the file daemonizer_py-1.5.4-py3-none-any.whl.

File metadata

  • Download URL: daemonizer_py-1.5.4-py3-none-any.whl
  • Upload date:
  • Size: 30.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.25 {"installer":{"name":"uv","version":"0.11.25","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for daemonizer_py-1.5.4-py3-none-any.whl
Algorithm Hash digest
SHA256 0007cb8940bf1918bc0c91d3337758ca21b4c5fa8a3a8471688738b9116af958
MD5 7573e44c112f59ce2815c10a0e5c8512
BLAKE2b-256 c15b4eb76bc81e8dd70baaac4e88d610fd48ce56d3edaf5d3d68450f23a9dbd7

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.5.4 This release

2 files

1.5.3

2 files

1.5.2

2 files

1.5.1

2 files

Supported by

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