Skip to main content

A task manager for FastAPI. Robust Scheduling, Distributed Safety

Project description

FastAPI Task Manager

Lightweight, efficient and fast to code scheduled task management system built on FastAPI

Lightweight, efficient and fast to code scheduled task management system built on FastAPI.

PyPI - Version PyPI - Downloads PyPI - License PyPI - Python Version Pepy Total Downloads Coveralls


Documentation: https://fastapi-task-manager.morry98.com

Source Code: https://github.com/Morry98/fastapi-task-manager


Overview

FastAPI Task Manager is a lightweight and efficient scheduled task management system built on top of FastAPI and Redis. It is designed to help developers easily create, manage, and execute scheduled tasks within their FastAPI applications.

Key Features

  • FastAPI Extension - Built as an extension to FastAPI, making it easy to integrate into existing FastAPI applications and leverage its features
  • Redis-Based - Uses Redis as the backend for storing task information, ensuring high performance and single-instance execution
  • Fast to Code - Increase the speed to develop scheduled tasks by about 400% to 500%, only a wrapper function is needed*
  • Fewer Bugs - Reduce about 60% of human (developer) induced errors managing lock, Redis keys and task execution*
  • Scheduled Tasks - Provides a simple and intuitive API for defining and scheduling tasks to run at specific intervals or times
  • Task Management - Includes FastAPI router to manage tasks, such as pausing, resuming, and monitoring execution information
  • Easy to Use - Designed to be easy to use and learn. Less time reading docs
  • Robust - Get production-ready code

* estimation based on real production task migrated to FastAPI task manager from custom "cron job" solution.

Requirements

FastAPI Task Manager stands on the shoulders of giants:

  • FastAPI - Modern, fast web framework for building APIs
  • Redis - In-memory data structure store for task storage and locking

Installation

You need to have a FastAPI project set up. If you don't have one, check the FastAPI installation tutorial.

Install FastAPI Task Manager using pip:

pip install fastapi-task-manager

Quick Example

Here's a simple example to get you started:

from fastapi import FastAPI
from fastapi_task_manager import TaskManager, task, TaskGroup
from fastapi_task_manager import Config as ManagerConfig
from pydantic_settings import BaseSettings, SettingsConfigDict


class Config(BaseSettings):
    model_config = SettingsConfigDict(
        # `.env.prod` takes priority over `.env`
        env_file=(".env", ".env.prod"),
        extra="forbid",
    )

    # --------- Redis config variables ---------
    redis_host: str | None = None
    redis_port: int = 6379
    redis_password: str | None = None
    redis_db: int = 0
    # --------- End of redis config variables ---------

    # --------- App config variables ---------
    app_name: str = "my_fastapi_app"
    concurrent_tasks: int = 3
    # --------- End of app config variables ---------

CONFIG = Config()

app = FastAPI()
router = APIRouter()

task_manager = TaskManager(
    config=ManagerConfig(
        redis_host=CONFIG.redis_host,
        redis_port=CONFIG.redis_port,
        redis_password=CONFIG.redis_password,
        redis_db=CONFIG.redis_db,
        concurrent_tasks=CONFIG.concurrent_tasks,
        redis_key_prefix=CONFIG.app_name,
    ),
    app=app,
)
my_example_task_group = TaskGroup(
  tags=["example"],
  name="My Example Task Group",
)
task_manager.add_task_group(my_example_task_group)

manager_router = task_manager.get_manager_router()
router.include_router(
  manager_router,
  prefix="/task-manager",
  tags=["task-manager"],
)

app.include_router(router)

@my_example_task_group.add_task(
  "*/5 * * * *",  # Run every 5 minutes
  name="my_scheduled_task",
  description="This is my scheduled task"
)
async def my_scheduled_task():
    print("Task executed!")
    # Your task logic here

License

This project is licensed under the terms of 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

fastapi_task_manager-1.1.1a1.tar.gz (36.1 kB view details)

Uploaded Source

Built Distribution

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

fastapi_task_manager-1.1.1a1-py3-none-any.whl (45.1 kB view details)

Uploaded Python 3

File details

Details for the file fastapi_task_manager-1.1.1a1.tar.gz.

File metadata

  • Download URL: fastapi_task_manager-1.1.1a1.tar.gz
  • Upload date:
  • Size: 36.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastapi_task_manager-1.1.1a1.tar.gz
Algorithm Hash digest
SHA256 9f503bce7789b0990fe2202be53d2f818c746330f3b6f6a5d1629d895a3b9aad
MD5 f06e563c6cb4a5880e0657d421eb8fcb
BLAKE2b-256 4e86ccf9c95ead1105969ca0de4787a6553051e6b528bc7cc7805fd138b8e5de

See more details on using hashes here.

File details

Details for the file fastapi_task_manager-1.1.1a1-py3-none-any.whl.

File metadata

  • Download URL: fastapi_task_manager-1.1.1a1-py3-none-any.whl
  • Upload date:
  • Size: 45.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastapi_task_manager-1.1.1a1-py3-none-any.whl
Algorithm Hash digest
SHA256 7da053c5b3750d5a2a19058f15b004473e3087ab98fe44892ab327c8bd8a727f
MD5 3c557a9de3a620376c258f10b9997fc9
BLAKE2b-256 4958434f33042a52e05843d5bb3d87792852c5f248dd48b1b9586a6429253d24

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