使用CircuitPython_Schedule模块定时执行任务【CircuitPython】

219 阅读2分钟

CircuitPython_Schedule 简介

python中有一个轻量级的定时任务调度的库:schedule。他可以完成每分钟,每小时,每天,周几,特定日期的定时任务。因此十分方便我们执行一些轻量级的定时任务。

import schedule
import time
 
def job():
    print("I'm working...")
 
schedule.every(10).minutes.do(job)
schedule.every().hour.do(job)
schedule.every().day.at("10:30").do(job)
schedule.every(5).to(10).days.do(job)
schedule.every().monday.do(job)
schedule.every().wednesday.at("13:15").do(job)
 
while True:
    schedule.run_pending()
    time.sleep(1)

意思就是:

  • 每隔十分钟执行一次任务
  • 每隔一小时执行一次任务
  • 每天的10:30执行一次任务
  • 每隔5到10天执行一次任务 
  • 每周一的这个时候执行一次任务
  • 每周三13:15执行一次任务

CircuitPython_Schedule是用于CircuitPython的精简版时间表库

这个库是Python schedule library的缩小版本。基于Dan Bader (dbader)的这个优秀的库。

CircuitPython_Schedule 依赖

这个库的依赖项目:

请确保CircuitPython文件系统中的所有依赖项都可用。这可以通过下载Adafruit库和驱动包轻松实现

在支持的GNU/Linux系统(如Raspberry Pi)上,你可以在本地从PyPI安装该驱动。要为当前用户安装。

pip3 install circuitpython-schedule

要在整个系统内安装(在某些情况下可能需要这样做)。

sudo pip3 install circuitpython-schedule

要在你当前项目的虚拟环境中安装。

mkdir project-name && cd project-name
python3 -m venv .env
source .env/bin/activate
pip3 install circuitpython-schedule

使用实例

# SPDX-FileCopyrightText: 2017 Scott Shawcroft, 为Adafruit Industries编写
# SPDX-FileCopyrightText: Copyright (c) 2021 Nathan Byrd

# SPDX-License-Identifier: 麻省理工学院

import time
import rtc
import busio
import board
import adafruit_pcf8523
import circuitpython_schedule as schedule


def greet():
    print("Hello, world!")


i2c = busio.I2C(board.SCL, board.SDA)
rtc_device = adafruit_pcf8523.PCF8523(i2c)
rtc.RTC().datetime = rtc_device.datetime

# 每10秒安排一次
schedule.every(10).seconds.do(greet)

# 每10分钟安排一次
schedule.every(10).minutes.do(greet)

# 每天安排一次
schedule.every().day.at("10:30").do(greet)

# 从510分钟的时间表
schedule.every(5).to(10).minutes.do(greet)

# 在某一天的时间表
schedule.every().monday.do(greet)

# 安排日期和时间
schedule.every().wednesday.at("13:15").do(greet)

# 每分钟安排一次,每次17秒
schedule.every().minute.at(":17").do(greet)


while True:
    # 运行任何未完成的工作
    schedule.run_pending()
    time.sleep(1)