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.1.tar.gz (17.0 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.1-py3-none-any.whl (21.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: taskshed-0.8.1.tar.gz
  • Upload date:
  • Size: 17.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for taskshed-0.8.1.tar.gz
Algorithm Hash digest
SHA256 8dc1e2e5218a1f438fd027f29593637c6f43d326a645c7adfe0f4c0450ab9f0b
MD5 31097219296307504f35cc20fe32b7f5
BLAKE2b-256 41dfdbd942b883b3d4a113600477264e2e928e80850668401cba15ada9c73522

See more details on using hashes here.

File details

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

File metadata

  • Download URL: taskshed-0.8.1-py3-none-any.whl
  • Upload date:
  • Size: 21.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.5

File hashes

Hashes for taskshed-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5c551aa964f9904368898ec5cd60e8e2e6ed3990f18717983d5514b2e9fd9ee3
MD5 7f06fd1c7b7e234fb6d4e7f3fcd09dda
BLAKE2b-256 1dcafafb78693e035b9c798d458fe0ae2806eb9c64d7879febb93b5699f3d538

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