Single-thread interval scheduler
Project description
Periodic Task Scheduling Package Review
This package provides a lightweight framework for scheduling and executing periodic tasks with precision. Its minimalist syntax and focused functionality make it well-suited for business-critical applications that require reliable task execution at fixed intervals.
Key Features
- Minimalist Design: The package avoids unnecessary complexity, focusing on a clear and concise interface for defining and managing periodic tasks.
- No Busy-Waiting: It uses an efficient wait mechanism, minimizing CPU usage during idle periods between task executions.
- Missed Execution Handling: If a task misses its scheduled execution due to delays or processing overhead, the package tracks these missed executions without stacking them up, ensuring that the application stays responsive.
- Accurate Timing: Tasks are executed with a high degree of timing accuracy, crucial for applications with strict timing requirements.
Example Usage
The following example demonstrates how to create periodic tasks using the package:
import time
from datetime import timedelta
from functools import partial
from periodic_tasks import periodic, run_loop, make_periodic
start_time = time.time()
# Define a fast task that executes every 0.1 seconds
@periodic(interval=0.1)
def task_1():
dt = time.time() - start_time
print(f"Started a _fast_ task at t={{dt:.3f}}")
# Define a slower task that executes every 0.5 seconds
@periodic(interval=0.5)
def task_2():
dt = time.time() - start_time
print(f"Started a *slow* task at t={{dt:.3f}}")
if dt < 2:
time.sleep(0.91) # Simulate a delay in the task
else:
time.sleep(0.09) # Shorter delay after initial period
# Create a custom task with parameters
def task_3(custom_text: str):
print(custom_text)
time.sleep(0.5)
# Schedule task_3 to run periodically using a partial function
make_periodic(partial(task_3, "Hello periodic"), interval=timedelta(milliseconds=100))
# Start the periodic task loop
run_loop()
In this example:
task_1
andtask_2
are defined using the@periodic
decorator with specified intervals.task_3
is scheduled withmake_periodic
, allowing custom parameters usingfunctools.partial
.run_loop
initiates the loop that manages the task execution, handling missed executions without delay accumulation.
Overall, this framework offers robust, no-frills functionality for time-sensitive applications, and its approach to task scheduling is both efficient and effective.
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
File details
Details for the file periodic_tasks-0.1.1.tar.gz
.
File metadata
- Download URL: periodic_tasks-0.1.1.tar.gz
- Upload date:
- Size: 3.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1b9255c66ddaf959d4bb51b1493177a621ada7d4893ed2006ad10bf2bb08c5dd |
|
MD5 | b1014e0aac1ad0a570bbd08c762caf28 |
|
BLAKE2b-256 | e44f08f7c8e3b3f77bbc93640843283702f8f134b3e0a00d450fcfd58b3db3ac |
File details
Details for the file periodic_tasks-0.1.1-py3-none-any.whl
.
File metadata
- Download URL: periodic_tasks-0.1.1-py3-none-any.whl
- Upload date:
- Size: 4.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.1 CPython/3.9.20
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 32cf42c91ff1c30303463f4ee1527645e88caacb29146f4f32da783a2411efa3 |
|
MD5 | 62a87d7babadff062e606e89c36acefb |
|
BLAKE2b-256 | bba4cb509759cb6ea56c044658420428ffc4d18b7cf46dca3cd30750b0af10c0 |