Skip to main content

Run periodic tasks.

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.2.tar.gz (4.3 kB view details)

Uploaded Source

Built Distribution

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

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

Uploaded Python 3

File details

Details for the file periodic_tasks-0.1.2.tar.gz.

File metadata

  • Download URL: periodic_tasks-0.1.2.tar.gz
  • Upload date:
  • Size: 4.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for periodic_tasks-0.1.2.tar.gz
Algorithm Hash digest
SHA256 1c7b7e49f03a92dc8903611bc14f63199f0c6b83096fbeede2b1feaa618b7535
MD5 79e3b5c2d47b86d47608bcefad21c80d
BLAKE2b-256 c2d74fa8e57aebbf34bb6aee79a4c50984f22add793c95dddce5c13671a73be2

See more details on using hashes here.

File details

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

File metadata

  • Download URL: periodic_tasks-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 4.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for periodic_tasks-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8c1392193328f15436aca07fdb43a9a52e9b78533afa76ad1d4bdcc69810038b
MD5 b9549c5de99f3ed1ed65a2032acb986e
BLAKE2b-256 20b7f48caa0610b6437a5a190cfc25d47772b6b87eaa0605317a7019f40121ef

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