Skip to main content

A high-performance, asynchronous, ready for production task scheduling framework written in Python.

Project description

TaskShed

A high-performance, asynchronous, ready for production job scheduling framework.

TaskShed provides a simple API to schedule your Python coroutines for later execution. You can run tasks just once or on a recurring interval. The scheduler is dynamic, allowing you to add, update or remove tasks on the fly. Furthermore, by connecting to a persistent datastore, TaskShed ensures your tasks survive restarts and automatically catches up on any executions that were missed while the system was offline.

The key features are:

  • Fast: TaskShed has a very low latency, overhead and can execute several thousands tasks a second.
  • Distributed: TaskShed has the capacity to spawn several workers and schedules across many machines, while also providing optimisation for monolinth architectures.
  • Persistant: Tasks are stored in database, meaning that they won't get dropped on shutdown. TaskShed currently supports Redis and MySQL.
  • Easy: TaskShed's modular architecture is straightforward and easy to set-up, and works in any asynchronous environement.

Installation 🔧

Install the core package using pip:

pip install taskshed

TaskShed has no extra dependencies beyond its core framework. However, if you want persistent task storage, you’ll need to install one of the optional backends. TaskShed currently supports Redis and MySQL. You can install the appropriate driver using:

pip install "taskshed[redis]"

or

pip install "taskshed[mysql]"

Quick Start 🏁

Here's a simple example of scheduling a task to run in 5 seconds.

from datetime import datetime, timedelta
from taskshed.datastores import InMemoryDataStore
from taskshed.schedulers import AsyncScheduler
from taskshed.workers import EventDrivenWorker


async def say_hello(name: str):
    print(f"Hello, {name}!")


datastore = InMemoryDataStore()
worker = EventDrivenWorker(callback_map={"say_hello": say_hello}, datastore=datastore)
scheduler = AsyncScheduler(datastore=datastore, worker=worker)


async def main():
    await scheduler.start()
    await worker.start()
    await scheduler.add_task(
        callback="say_hello",
        run_at=datetime.now() + timedelta(seconds=3),
        kwargs={"name": "World"},
    )


if __name__ == "__main__":
    import asyncio

    loop = asyncio.new_event_loop()
    loop.create_task(main())
    loop.run_forever()

Documentation 📚

https://chase-labs.github.io/taskshed/

Contributing 🤝

Contributions are welcome! Please feel free to submit a pull request or open an issue.

License 📜

This project is licensed under the MIT License.

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

taskshed-0.8.2.tar.gz (17.1 kB view details)

Uploaded Source

Built Distribution

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

taskshed-0.8.2-py3-none-any.whl (22.0 kB view details)

Uploaded Python 3

File details

Details for the file taskshed-0.8.2.tar.gz.

File metadata

  • Download URL: taskshed-0.8.2.tar.gz
  • Upload date:
  • Size: 17.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for taskshed-0.8.2.tar.gz
Algorithm Hash digest
SHA256 7522d23325af0301ab2d8d4ce5364da79aa9e7bdd2343847fbd7308a1b6f35d5
MD5 1b0648afe2af1893d776f7078dd470e2
BLAKE2b-256 e201b0a2eb809908acc73c03c90a80490963f440f83b01ff91b2bc1e8b0c7a1b

See more details on using hashes here.

File details

Details for the file taskshed-0.8.2-py3-none-any.whl.

File metadata

  • Download URL: taskshed-0.8.2-py3-none-any.whl
  • Upload date:
  • Size: 22.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.24 {"installer":{"name":"uv","version":"0.9.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for taskshed-0.8.2-py3-none-any.whl
Algorithm Hash digest
SHA256 2ad4e8c6fe49c47094f000f982782880f13f515fd626a7aa76389e7b0ea9881f
MD5 5fc9581b8d168f1b0c83d3bf3aab8017
BLAKE2b-256 4e26247c6b461afdfe4f29d83ab0b75dd4988e650c806569dd830b9a3028045a

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