一个轻量、直观、支持异步与同步双模式的定时任务调度器
Reason this release was yanked:
Task Cron parsing reveals bug
Project description
FasterCron
FasterCron 是一个轻量级、直观且功能强大的 Python 定时任务调度工具库。它完美支持 Asyncio (异步) 和 Threading (多线程) 双模式,专为需要高可靠性、简单配置和任务并发控制的场景设计。
🌟 核心特性
- 双模式支持:一套逻辑同时提供
AsyncFasterCron(异步)和FasterCron(同步多线程)两种实现。 - 任务级并发控制:通过
allow_overlap参数精准控制同一个任务是否允许重叠执行(单例模式 vs 并发模式)。 - 智能参数注入:自动检测任务函数签名,按需注入包含调度时间、任务名称的
context上下文。 - 标准 Cron 支持:兼容 5 位(分时日月周)和 6 位(秒分时日月周)Cron 表达式。
- 健壮性:内置异常捕获机制,单个任务崩溃不影响调度器运行。
- 无外部依赖:仅使用 Python 标准库实现,轻量无负担。
📦 安装
您可以直接通过 pip 安装:
pip install faster-cron
或者直接将源码放入您的项目中。
🚀 快速上手
1. 异步模式 (Async Mode)
适用于使用了 aiohttp, httpx 或 tortoise-orm 等异步库的项目。
import asyncio
from faster_cron import AsyncFasterCron
cron = AsyncFasterCron()
# 示例:每 5 秒执行一次,禁止重叠(若上一个任务没跑完,则跳过本次)
@cron.schedule("*/5 * * * * *", allow_overlap=False)
async def my_async_job(context):
print(f"正在执行任务: {context['task_name']}, 计划时间: {context['scheduled_at']}")
await asyncio.sleep(6) # 模拟长耗时任务
async def main():
await cron.start()
if __name__ == "__main__":
asyncio.run(main())
2. 同步模式 (Sync Mode)
适用于传统的阻塞式脚本或爬虫。
from faster_cron import FasterCron
import time
cron = FasterCron()
# 示例:每秒执行一次,允许并发执行
@cron.schedule("* * * * * *", allow_overlap=True)
def my_sync_job():
print("滴答,同步任务正在运行...")
time.sleep(2)
if __name__ == "__main__":
cron.run()
🛠 核心 API 说明
调度装饰器 schedule
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
expression |
str |
- | Cron 表达式。支持 *, ,, -, /。 |
allow_overlap |
bool |
True |
关键参数。True: 时间点到达即执行;False: 若该任务的上一个实例未结束,则跳过本次执行循环。 |
上下文参数 context
如果您的任务函数接收名为 context 的参数,FasterCron 会自动注入以下字典:
task_name: 函数名称。scheduled_at: 任务触发的精确datetime对象。expression: 该任务使用的 Cron 表达式。
📅 Cron 表达式参考
FasterCron 支持灵活的表达式定义:
* * * * * *: 每秒执行。*/5 * * * * *: 每 5 秒执行。0 0 * * * *: 每整小时执行。0 30 9-17 * * *: 每天 9:00 到 17:00 之间的每半小时执行。0 0 0 * * 0: 每周日凌晨执行。
🧪 运行测试
本项目包含完善的单元测试。您可以使用 pytest 来验证功能:
# 安装测试依赖
pip install pytest pytest-asyncio
# 运行所有测试
pytest
📄 开源协议
MIT License.
如果您觉得好用,欢迎点一个 Star!🌟
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 faster_cron-0.1.0.tar.gz.
File metadata
- Download URL: faster_cron-0.1.0.tar.gz
- Upload date:
- Size: 6.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3a24bcabb31362dfb15c5ce8eb387151d0be52e96e20bcb508fb086383031e27
|
|
| MD5 |
e32c3615fc836c83b1f151e46cccbc48
|
|
| BLAKE2b-256 |
dd22b0aae95034df900d47c4a21bccff7c40c0ac4eda3508385128846edde98c
|
File details
Details for the file faster_cron-0.1.0-py3-none-any.whl.
File metadata
- Download URL: faster_cron-0.1.0-py3-none-any.whl
- Upload date:
- Size: 6.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3fb9179955c0bf061fd2690f33b6ccc9b4c14f4c0f6d43b315181dba9eaab17
|
|
| MD5 |
9adc2536244ccc82682c18f7dc8f4fcf
|
|
| BLAKE2b-256 |
ad9bca8bef95f7f64594464047b357869d27faf0faad3026e7d92b967d164e98
|