Rocketry项目基础教程:任务调度与执行管理
rocketry Modern scheduling library for Python 项目地址: https://gitcode.com/gh_mirrors/ro/rocketry
前言
Rocketry是一个功能强大的Python任务调度库,它提供了直观的方式来定义和管理定时任务。本文将深入介绍Rocketry的基础功能,包括任务调度原理、执行选项配置以及日志管理方法,帮助开发者快速上手这个强大的工具。
任务调度基础
条件式调度原理
Rocketry的核心调度机制基于条件判断系统。每个任务都关联一个条件表达式,当条件为真时任务就会被执行。这种设计提供了极大的灵活性,开发者可以基于时间、事件或自定义逻辑来触发任务。
举个简单例子,我们可以定义一个条件:"当前时间在上午8点到下午2点之间"。当系统时间满足这个范围时,条件为真,关联的任务就会执行;否则条件为假,任务不会触发。
条件定义方式
Rocketry提供了三种定义条件的方式:
- 字符串语法(最简单直观)
- 条件API(提供更多控制)
- 条件类(最灵活)
对于初学者,我们建议从字符串语法开始,它简洁易懂且能满足大部分基础需求。
时间调度示例
基本时间调度
最基本的调度需求是在特定时间点或时间间隔后执行任务:
# 每分钟执行一次
@app.task("every 1 minute")
def task_per_minute():
print("每分钟执行的任务")
# 每2小时执行一次
@app.task("every 2 hours")
def task_every_two_hours():
print("每两小时执行的任务")
周期性调度
对于需要按固定周期(如每天、每周、每月)执行的任务:
# 每天执行
@app.task("daily")
def daily_task():
print("每日任务")
# 每周一执行
@app.task("weekly on Monday")
def monday_task():
print("每周一任务")
# 每月第一天执行
@app.task("monthly starting 1")
def monthly_task():
print("每月第一天任务")
带时间限制的周期任务
可以结合时间范围限制来创建更精确的调度:
# 每天下午执行(12:00-18:00)
@app.task("daily between 12:00 and 18:00")
def afternoon_task():
print("每天下午执行的任务")
# 每周工作日(周一至周五)上午9点执行
@app.task("weekly between Monday and Friday at 09:00")
def workday_morning_task():
print("工作日早晨任务")
持续执行的任务
对于需要在某个时间段内持续运行的任务,可以使用"time of"语法:
# 在10:00到18:00之间持续运行
@app.task("time of day between 10:00 and 18:00")
def daytime_process():
print("日间持续处理任务")
# 周末持续运行
@app.task("time of week between Saturday and Sunday")
def weekend_process():
print("周末持续处理任务")
任务执行选项
Rocketry提供了多种任务执行方式,适应不同的应用场景:
执行模式类型
- main模式(默认):在主进程和主线程中执行
- process模式:在独立进程中执行
- thread模式:在独立线程中执行
- async模式:异步执行
执行模式示例
# 独立进程执行
@app.task("daily", execution="process")
def process_task():
print("在独立进程中执行")
# 独立线程执行
@app.task("daily", execution="thread")
def thread_task():
print("在独立线程中执行")
# 异步执行
@app.task("daily", execution="async")
async def async_task():
print("异步执行的任务")
# 主线程执行(默认)
@app.task("daily", execution="main")
def main_task():
print("在主线程中执行")
全局执行模式设置
如果项目中大部分任务使用同一种执行模式,可以设置默认执行方式:
app = Rocketry(execution="async") # 设置默认异步执行
@app.task("daily")
def default_async_task():
print("默认使用异步执行的任务")
日志管理配置
日志系统的重要性
Rocketry的日志系统记录了任务的关键状态信息,包括:
- 任务启动时间
- 执行成功记录
- 执行失败记录
这些日志不仅用于审计,还用于调度决策,防止同一任务被重复执行。
日志存储选项
默认情况下,日志存储在内存中,程序重启后会丢失。Rocketry支持多种持久化存储方案:
内存存储(默认)
from rocketry import Rocketry
from redbird.repos import MemoryRepo
app = Rocketry(
logger_repo=MemoryRepo() # 内存存储
)
CSV文件存储
from rocketry import Rocketry
from redbird.repos import CSVFileRepo
app = Rocketry(
logger_repo=CSVFileRepo(
filename="task_logs.csv" # 日志保存到CSV文件
)
)
日志系统扩展
Rocketry的日志系统基于Python标准库的logging模块构建,并通过Red Bird库增强了日志读取能力。开发者可以根据需要选择不同的存储后端,包括数据库、消息队列等。
结语
本文介绍了Rocketry任务调度库的基础功能,包括灵活的条件调度系统、多种任务执行模式以及可配置的日志管理系统。这些基础功能已经能够满足大多数定时任务场景的需求。掌握这些基础知识后,开发者可以进一步探索Rocketry更高级的功能,如复杂条件组合、自定义条件类等,以构建更加强大和灵活的任务调度系统。
rocketry Modern scheduling library for Python 项目地址: https://gitcode.com/gh_mirrors/ro/rocketry
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考