千家信息网

Python的Schedule模块如何使用

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇"Python的Schedule模块如何使用"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来
千家信息网最后更新 2026年11月03日Python的Schedule模块如何使用

这篇"Python的Schedule模块如何使用"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"Python的Schedule模块如何使用"文章吧。

如果你想在Linux服务器上周期性地执行某个 Python 脚本,最出名的选择应该是 Crontab 脚本,但是 Crontab 具有以下缺点:

1.不方便执行秒级的任务。

2.当需要执行的定时任务有上百个的时候,Crontab的管理就会特别不方便

另外一个选择是 Celery,但是 Celery 的配置比较麻烦,如果你只是需要一个轻量级的调度工具,Celery 不会是一个好选择。

在你想要使用一个轻量级的任务调度工具,而且希望它尽量简单、容易使用、不需要外部依赖,最好能够容纳 Crontab 的所有基本功能,那么 Schedule 模块是你的不二之选。

使用它来调度任务可能只需要几行代码,感受一下:

import scheduleimport timedef job():    print("I'm working...")schedule.every(10).minutes.do(job)while True:    schedule.run_pending()    time.sleep(1)

上面的代码表示每10分钟执行一次 job 函数,非常简单方便。你只需要引入 schedule 模块,通过调用 scedule.every(时间数).时间类型.do(job) 发布周期任务。

发布后的周期任务需要用 run_pending 函数来检测是否执行,因此需要一个 While 循环不断地轮询这个函数。

下面具体讲讲Schedule模块的安装和初级、进阶使用方法。

1.准备

请选择以下任一种方式输入命令安装依赖:

1. Windows 环境 打开 Cmd (开始-运行-CMD)。

2. MacOS 环境 打开 Terminal (command+空格输入Terminal)。

3. 如果你用的是 VSCode编辑器 或 Pycharm,可以直接使用界面下方的Terminal.

pip install schedule

2.基本使用

最基本的使用在文首已经提到过,下面给大家展示更多的调度任务例子:

import scheduleimport timedef job():    print("I'm working...")# 每十分钟执行任务schedule.every(10).minutes.do(job)# 每个小时执行任务schedule.every().hour.do(job)# 每天的10:30执行任务schedule.every().day.at("10:30").do(job)# 每个月执行任务schedule.every().monday.do(job)# 每个星期三的13:15分执行任务schedule.every().wednesday.at("13:15").do(job)# 每分钟的第17秒执行任务schedule.every().minute.at(":17").do(job)while True:    schedule.run_pending()    time.sleep(1)

可以看到,从月到秒的配置,上面的例子都覆盖到了。不过如果你想只运行一次任务的话,可以这么配:

import scheduleimport timedef job_that_executes_once():    # 此处编写的任务只会执行一次...    return schedule.CancelJobschedule.every().day.at('22:30').do(job_that_executes_once)while True:    schedule.run_pending()    time.sleep(1)

参数传递

如果你有参数需要传递给作业去执行,你只需要这么做:

import scheduledef greet(name):    print('Hello', name)# do() 将额外的参数传递给job函数schedule.every(2).seconds.do(greet, name='Alice')schedule.every(4).seconds.do(greet, name='Bob')

获取目前所有的作业

如果你想获取目前所有的作业:

import scheduledef hello():    print('Hello world')schedule.every().second.do(hello)all_jobs = schedule.get_jobs()

取消所有作业

如果某些机制触发了,你需要立即清除当前程序的所有作业:

import scheduledef greet(name):    print('Hello {}'.format(name))schedule.every().second.do(greet)schedule.clear()

标签功能

在设置作业的时候,为了后续方便管理作业,你可以给作业打个标签,这样你可以通过标签过滤获取作业或取消作业。

import scheduledef greet(name):    print('Hello {}'.format(name))# .tag 打标签schedule.every().day.do(greet, 'Andrea').tag('daily-tasks', 'friend')schedule.every().hour.do(greet, 'John').tag('hourly-tasks', 'friend')schedule.every().hour.do(greet, 'Monica').tag('hourly-tasks', 'customer')schedule.every().day.do(greet, 'Derek').tag('daily-tasks', 'guest')# get_jobs(标签):可以获取所有该标签的任务friends = schedule.get_jobs('friend')# 取消所有 daily-tasks 标签的任务schedule.clear('daily-tasks')

设定作业截止时间

如果你需要让某个作业到某个时间截止,你可以通过这个方法:

import schedulefrom datetime import datetime, timedelta, timedef job():    print('Boo')# 每个小时运行作业,18:30后停止schedule.every(1).hours.until("18:30").do(job)# 每个小时运行作业,2030-01-01 18:33 todayschedule.every(1).hours.until("2030-01-01 18:33").do(job)# 每个小时运行作业,8个小时后停止schedule.every(1).hours.until(timedelta(hours=8)).do(job)# 每个小时运行作业,11:32:42后停止schedule.every(1).hours.until(time(11, 33, 42)).do(job)# 每个小时运行作业,2020-5-17 11:36:20后停止schedule.every(1).hours.until(datetime(2020, 5, 17, 11, 36, 20)).do(job)

截止日期之后,该作业将无法运行。

立即运行所有作业,而不管其安排如何

如果某个机制触发了,你需要立即运行所有作业,可以调用 schedule.run_all() :

import scheduledef job_1():    print('Foo')def job_2():    print('Bar')schedule.every().monday.at("12:40").do(job_1)schedule.every().tuesday.at("16:40").do(job_2)schedule.run_all()# 立即运行所有作业,每次作业间隔10秒schedule.run_all(delay_seconds=10)

3.高级使用

装饰器安排作业

如果你觉得设定作业这种形式太啰嗦了,也可以使用装饰器模式:

from schedule import every, repeat, run_pendingimport time# 此装饰器效果等同于 schedule.every(10).minutes.do(job)@repeat(every(10).minutes)def job():    print("I am a scheduled job")while True:    run_pending()    time.sleep(1)

并行执行

默认情况下,Schedule 按顺序执行所有作业。其背后的原因是,很难找到让每个人都高兴的并行执行模型。

不过你可以通过多线程的形式来运行每个作业以解决此限制:

import threadingimport timeimport scheduledef job1():    print("I'm running on thread %s" % threading.current_thread())def job2():    print("I'm running on thread %s" % threading.current_thread())def job3():    print("I'm running on thread %s" % threading.current_thread())def run_threaded(job_func):    job_thread = threading.Thread(target=job_func)    job_thread.start()schedule.every(10).seconds.do(run_threaded, job1)schedule.every(10).seconds.do(run_threaded, job2)schedule.every(10).seconds.do(run_threaded, job3)while True:    schedule.run_pending()    time.sleep(1)

日志记录

Schedule 模块同时也支持 logging 日志记录,这么使用:

import scheduleimport logginglogging.basicConfig()schedule_logger = logging.getLogger('schedule')# 日志级别为DEBUGschedule_logger.setLevel(level=logging.DEBUG)def job():    print("Hello, Logs")schedule.every().second.do(job)schedule.run_all()schedule.clear()

效果如下:

DEBUG:schedule:Running *all* 1 jobs with 0s delay in between
DEBUG:schedule:Running job Job(interval=1, unit=seconds, do=job, args=(), kwargs={})
Hello, Logs
DEBUG:schedule:Deleting *all* jobs

异常处理

Schedule 不会自动捕捉异常,它遇到异常会直接抛出,这会导致一个严重的问题:后续所有的作业都会被中断执行,因此我们需要捕捉到这些异常。

你可以手动捕捉,但是某些你预料不到的情况需要程序进行自动捕获,加一个装饰器就能做到了:

import functoolsdef catch_exceptions(cancel_on_failure=False):    def catch_exceptions_decorator(job_func):        @functools.wraps(job_func)        def wrapper(*args, **kwargs):            try:                return job_func(*args, **kwargs)            except:                import traceback                print(traceback.format_exc())                if cancel_on_failure:                    return schedule.CancelJob        return wrapper    return catch_exceptions_decorator@catch_exceptions(cancel_on_failure=True)def bad_task():    return 1 / 0schedule.every(5).minutes.do(bad_task)

这样,bad_task 在执行时遇到的任何错误,都会被 catch_exceptions 捕获,这点在保证调度任务正常运转的时候非常关键。

以上就是关于"Python的Schedule模块如何使用"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。

作业 任务 运行 模块 小时 标签 内容 调度 函数 时间 选择 参数 可以通过 周期 日志 时候 截止 代码 例子 功能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州万易互联网科技有限公司 美国互联网保险保险科技 壹账通互联网科技 美国互联网黑科技 科技互联网公司logo 融贸通互联网科技 齐家互联网科技有限公司 互联网科技公司介绍 汉立互联网科技有限公司联系电话 青岛中康互联网医疗科技有限公司 深圳前海聚择互联网科技有限公司 互联网科技有哪些公司 宝灵互联网科技有限公司 崇明区互联网教育科技诚信经营 信承诺互联网科技有限公司 中国科技和美国互联网 北京互联网科技类企业分布 互联网科技对化妆品行业 互联网科技创新方面的资料 颐高云石互联网科技 互联网金融 金融科技 万易互联网科技有限公司 深圳天众互联网科技公司 互联网科技公司需要的职位 移动互联网科技股 互联网方面的科技前沿 深圳互联网科技的发展 科技互联网行业投资研究 陕西九四连强互联网科技有限公司 安徽零酒互联网科技有限公司
0