Library to define and manage daemonized Python-based programs in programmatic (SDK) or CLI-ready ways
Project description
daemonizer
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:
- Create a subclass of
UNIXDaemon - 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 therun(...)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
handlerfunc:
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.
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 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
97d9b979a84df4773f957a49aa2e5651772fae0986ad28b8a7e66a226df10b15
|
|
| MD5 |
048bfc55de416ffd5fb98d10fbdb69c4
|
|
| BLAKE2b-256 |
6c99181ea7ad77d247a9d6cd9ed1e93035e3946729dbe1a3d3d9eef2866feb44
|
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0007cb8940bf1918bc0c91d3337758ca21b4c5fa8a3a8471688738b9116af958
|
|
| MD5 |
7573e44c112f59ce2815c10a0e5c8512
|
|
| BLAKE2b-256 |
c15b4eb76bc81e8dd70baaac4e88d610fd48ce56d3edaf5d3d68450f23a9dbd7
|