Skip to main content

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

  1. Minimalist Design: The package avoids unnecessary complexity, focusing on a clear and concise interface for defining and managing periodic tasks.
  2. No Busy-Waiting: It uses an efficient wait mechanism, minimizing CPU usage during idle periods between task executions.
  3. 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.
  4. 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 and task_2 are defined using the @periodic decorator with specified intervals.
  • task_3 is scheduled with make_periodic, allowing custom parameters using functools.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


Download files

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

Source Distribution

periodic_tasks-0.1.1.tar.gz (3.9 kB view details)

Uploaded Source

Built Distribution

periodic_tasks-0.1.1-py3-none-any.whl (4.0 kB view details)

Uploaded Python 3

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

Hashes for periodic_tasks-0.1.1.tar.gz
Algorithm Hash digest
SHA256 1b9255c66ddaf959d4bb51b1493177a621ada7d4893ed2006ad10bf2bb08c5dd
MD5 b1014e0aac1ad0a570bbd08c762caf28
BLAKE2b-256 e44f08f7c8e3b3f77bbc93640843283702f8f134b3e0a00d450fcfd58b3db3ac

See more details on using hashes here.

File details

Details for the file periodic_tasks-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for periodic_tasks-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 32cf42c91ff1c30303463f4ee1527645e88caacb29146f4f32da783a2411efa3
MD5 62a87d7babadff062e606e89c36acefb
BLAKE2b-256 bba4cb509759cb6ea56c044658420428ffc4d18b7cf46dca3cd30750b0af10c0

See more details on using hashes here.

Supported by

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