Skip to main content

基于 APScheduler 的异步任务调度通用库,支持 cron、interval 与 manual 触发模式。

Project description

llm-async-scheduler

基于 APScheduler 的异步任务调度通用库,提供统一的任务抽象与 cron / interval / manual 三种触发模式。

PyPI 包名:llm-async-scheduler,import 名:async_scheduler

特性

  • 统一的 ScheduleTask 基类,内置超时、重试与生命周期钩子
  • 基于 AsyncIOScheduler 的 cron 与 interval 调度
  • manual 模式支持按需手动触发
  • cron / interval 支持 immediate=True 启动后立即执行一次
  • 同一任务不支持并发执行(max_instances=1
  • Python 3.12+,纯 asyncio

安装

pip install llm-async-scheduler

或使用 uv

uv add llm-async-scheduler

快速开始

定义任务

继承 ScheduleTask 并实现 run()

import asyncio
from async_scheduler import AsyncTaskScheduler, ScheduleTask


class HelloTask(ScheduleTask):
    async def run(self) -> None:
        print(f"hello from {self.task_id}")


async def main() -> None:
    task = HelloTask("hello", timeout=30, retry_times=1, tags=["demo"])
    scheduler = AsyncTaskScheduler(task, "manual")
    await scheduler.run_manual_once()


asyncio.run(main())

Cron 调度

import asyncio
from async_scheduler import AsyncTaskScheduler, ScheduleTask


class SyncDataTask(ScheduleTask):
    async def run(self) -> None:
        # 业务逻辑
        ...


async def main() -> None:
    task = SyncDataTask("sync-data")
    scheduler = AsyncTaskScheduler(
        task,
        "cron",
        cron_expr="0 */6 * * *",  # 每 6 小时
    )
    scheduler.start()
    await scheduler.wait_until_done()  # 常驻进程,可通过 stop() 退出


asyncio.run(main())

Interval 调度

scheduler = AsyncTaskScheduler(
    task,
    "interval",
    interval_seconds=60,
    immediate=True,  # 启动后立即执行一次,之后按 interval 周期调度
)
scheduler.start()
await scheduler.wait_until_done()

API 概览

ScheduleTask

参数 类型 默认值 说明
task_id str 任务唯一标识
timeout int 3600 单次执行超时(秒)
retry_times int 0 失败后重试次数
retry_delay int 5 重试间隔(秒)
tags Sequence[str] [] 可选标签,便于日志与监控

可覆写钩子:

  • before_run():执行前
  • run():核心业务(必须实现)
  • after_run(success):执行后
  • on_error(exc):每次失败时

调度器调用 safe_execute(),不要直接调用 run()

AsyncTaskScheduler

参数 类型 说明
task ScheduleTask 任务实例
trigger_mode "cron" | "interval" | "manual" 触发模式
cron_expr str | None cron 表达式(5 段,如 0 2 * * *
interval_seconds int | None interval 间隔秒数
immediate bool False

cron / interval job 固定 max_instances=1,同一任务不会并发执行。若单次执行耗时超过调度间隔,后续触发会被跳过(misfire)。

常用方法:

方法 说明
start() 启动调度(manual 模式可跳过)
stop() 停止调度并唤醒 wait_until_done()
run_manual_once() manual 模式手动执行一次
wait_until_done() 阻塞等待结束或 shutdown
request_shutdown() 仅唤醒 wait_until_done(),不停止 job

许可证

MIT

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

llm_async_scheduler-0.1.3.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

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

llm_async_scheduler-0.1.3-py3-none-any.whl (6.7 kB view details)

Uploaded Python 3

File details

Details for the file llm_async_scheduler-0.1.3.tar.gz.

File metadata

  • Download URL: llm_async_scheduler-0.1.3.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","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 llm_async_scheduler-0.1.3.tar.gz
Algorithm Hash digest
SHA256 b8c24b4396131956f487fa814ee5a3a6c6447a2b2900d75523ad389bf070f9c1
MD5 5fabc0dc37504dc405b0332dd51750ae
BLAKE2b-256 3621c5712898165752127df66aeceec4f76c1df6b889a1d8b0d906b27807ac0d

See more details on using hashes here.

File details

Details for the file llm_async_scheduler-0.1.3-py3-none-any.whl.

File metadata

  • Download URL: llm_async_scheduler-0.1.3-py3-none-any.whl
  • Upload date:
  • Size: 6.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.2 {"installer":{"name":"uv","version":"0.11.2","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 llm_async_scheduler-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 96c012aa28c7c38319dd85f9294a6e8fd48c2da372b00ffdedd50158cda3eedc
MD5 39f379eb7f180c2116fce16d03a76164
BLAKE2b-256 2ea5b06878c19083c4c45cdd6f6fbc8a36c68266550202ced5f3a18286a5bfee

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