基于 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 模式支持按需手动触发
- 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,
)
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 间隔秒数 |
常用方法:
| 方法 | 说明 |
|---|---|
start() |
启动调度(manual 模式可跳过) |
stop() |
停止调度并唤醒 wait_until_done() |
run_manual_once() |
manual 模式手动执行一次 |
wait_until_done() |
阻塞等待结束或 shutdown |
request_shutdown() |
仅唤醒 wait_until_done(),不停止 job |
许可证
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file llm_async_scheduler-0.1.2.tar.gz.
File metadata
- Download URL: llm_async_scheduler-0.1.2.tar.gz
- Upload date:
- Size: 9.1 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
820f579d0b00cc7bff3b0d18f685a6beb5d50827817d31f1d4e4e098482c9c1a
|
|
| MD5 |
5727a9d23cd0930f93d64b9b1cef2498
|
|
| BLAKE2b-256 |
6d8dba7d840d9b8451ef372ae56505950c7c6899d6115f857c82da58761d7895
|
File details
Details for the file llm_async_scheduler-0.1.2-py3-none-any.whl.
File metadata
- Download URL: llm_async_scheduler-0.1.2-py3-none-any.whl
- Upload date:
- Size: 6.3 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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a360857debb7d147a9b69e956bfe391bd5a81814c20938844e36fef5ed981155
|
|
| MD5 |
70a1c9cba4262fc2d80990b552905bbf
|
|
| BLAKE2b-256 |
15bc79e87fe649a963bb180939f9d5cc420d8660c4eac86d7c9572145e342f19
|