You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.3 KiB
Markdown
77 lines
1.3 KiB
Markdown
# 任务运行器
|
|
|
|
iTi-Flask 提供单进程任务注册表和运行器。
|
|
它适合轻量定时任务和手动任务。
|
|
|
|
## 能力
|
|
|
|
支持:
|
|
|
|
- 任务注册。
|
|
- 手动触发。
|
|
- `interval` 调度。
|
|
- 简单 cron-like 调度。
|
|
- 单进程内防重复执行。
|
|
- 内存运行记录。
|
|
|
|
不支持:
|
|
|
|
- 分布式锁。
|
|
- 多实例 exactly-once。
|
|
- 持久化队列。
|
|
- Celery 或 RQ 集成。
|
|
|
|
多进程部署时,只在一个专用进程启用调度。
|
|
|
|
## 配置
|
|
|
|
默认不启动调度线程。
|
|
|
|
```python
|
|
class DevConfig(BaseDevConfig):
|
|
def __init__(self) -> None:
|
|
super().__init__()
|
|
self.tasks_enabled = True
|
|
```
|
|
|
|
## 注册任务
|
|
|
|
```python
|
|
from iti.tasks import task_registry
|
|
|
|
|
|
def rebuild_reports():
|
|
return {"rebuilt": 10}
|
|
|
|
|
|
task_registry.register(
|
|
name="reports.rebuild",
|
|
handler=rebuild_reports,
|
|
schedule="interval:600",
|
|
description="重建报表缓存",
|
|
)
|
|
```
|
|
|
|
## 手动触发
|
|
|
|
```python
|
|
from iti.tasks import task_registry
|
|
|
|
run = task_registry.trigger("reports.rebuild")
|
|
print(run.status)
|
|
print(run.result)
|
|
```
|
|
|
|
同一任务正在运行时,再次触发会返回 `skipped`。
|
|
|
|
## 调度格式
|
|
|
|
```text
|
|
interval:60
|
|
cron:*/10 * * * *
|
|
cron:* * * * *
|
|
```
|
|
|
|
cron 解析只读取分钟字段。
|
|
`cron:* * * * *` 等价于每 60 秒。
|