Rocketry项目基础教程:任务调度与执行管理

Rocketry项目基础教程:任务调度与执行管理

rocketry Modern scheduling library for Python rocketry 项目地址: https://gitcode.com/gh_mirrors/ro/rocketry

前言

Rocketry是一个功能强大的Python任务调度库,它提供了直观的方式来定义和管理定时任务。本文将深入介绍Rocketry的基础功能,包括任务调度原理、执行选项配置以及日志管理方法,帮助开发者快速上手这个强大的工具。

任务调度基础

条件式调度原理

Rocketry的核心调度机制基于条件判断系统。每个任务都关联一个条件表达式,当条件为真时任务就会被执行。这种设计提供了极大的灵活性,开发者可以基于时间、事件或自定义逻辑来触发任务。

举个简单例子,我们可以定义一个条件:"当前时间在上午8点到下午2点之间"。当系统时间满足这个范围时,条件为真,关联的任务就会执行;否则条件为假,任务不会触发。

条件定义方式

Rocketry提供了三种定义条件的方式:

  1. 字符串语法(最简单直观)
  2. 条件API(提供更多控制)
  3. 条件类(最灵活)

对于初学者,我们建议从字符串语法开始,它简洁易懂且能满足大部分基础需求。

时间调度示例

基本时间调度

最基本的调度需求是在特定时间点或时间间隔后执行任务:

# 每分钟执行一次
@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提供了多种任务执行方式,适应不同的应用场景:

执行模式类型

  1. main模式(默认):在主进程和主线程中执行
  2. process模式:在独立进程中执行
  3. thread模式:在独立线程中执行
  4. 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 rocketry 项目地址: https://gitcode.com/gh_mirrors/ro/rocketry

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

谢月连Jed

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值