千家信息网

Python如何使用定时调度任务

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,小编给大家分享一下Python如何使用定时调度任务,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1、简单循环 Simple
千家信息网最后更新 2025年11月08日Python如何使用定时调度任务

小编给大家分享一下Python如何使用定时调度任务,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1、简单循环 Simple loops

使用简单循环来实现调度任务这是毫不费力的。使用无限运行的 while 循环定期调用函数可用于调度作业,但这不是最好的方法,不过它是很有效的。可以使用内置time模块的slleep()来延迟执行。不过这并不是大多数作业的调度方式,因为,它看起来很难看,而且与其他方法相比,它的可读性较差。

import timedef task():    print("Job Completed!") while 1:    task()    time.sleep(10)

当涉及到每天早上 9:00 或每周三晚上 7:45 等这些日程安排时,事情就变得比较棘手了。

import datetimedef task():    print("Job Completed!") while 1:    now = datetime.datetime.now()    # schedule at every wednesday,7:45 pm    if now.weekday == 3 and now.strftime("%H:%m") == "19:45":        task()    # sleep for 6 days    time.sleep(6 * 24 * 60 * 60)

这是我的第一时间想到的解决办法,不用谢!这种方法的一个问题是这里的逻辑是阻塞的,即一旦在 python 项目中发现这段代码,它就会卡在 while 1 循环中,从而阻塞其他代码的执行。

2、简单循环但是使用了线程Simple loops but threaded

线程是计算机科学中的一个概念。具有自己指令的小程序由进程执行并独立管理,这就可以解决我们第一种方法的阻塞情况,让我们看看怎么样。

import timeimport threadingdef task():    print("Job Completed!")def schedule():    while 1:        task()        time.sleep(10)# makes our logic non blockingthread = threading.Thread(target=schedule)thread.start()

线程启动后,其底层逻辑无法被主线程修改,因此我们可能需要添加资源,程序通过这些资源可以检查特定场景并根据它们执行逻辑。

3、定时调度库 Schedule Library

早些时候,我说使用 while 循环进行调度看起来很丑陋,调度库可以解决这个问题。

import scheduleimport timedef task():    print("Job Executing!")# for every n minutesschedule.every(10).minutes.do(task)# every hourschedule.every().hour.do(task)# every daya at specific timeschedule.every().day.at("10:30").do(task)# schedule by name of dayschedule.every().monday.do(task)# name of day with timeschedule.every().wednesday.at("13:15").do(task)while True:    schedule.run_pending()    time.sleep(1)

正如您所见,通过这样我们可以毫不费力地创建多个调度计划。我特别喜欢创建作业的方式和方法链(Method Chaining),另一方面,这个片段有一个 while 循环,这意味着代码被阻塞,不过我相信你已经知道什么可以帮助我们解决这个问题。

4、Python Crontab

Liunx 中的 crontab 实用程序是一种易于使用且被广泛接受的调度解决方案。Pythonpython-crontab提供了一个 API 来使用 Python 中的 CLI 工具。在crontab中,一个定时调度使用 unix-cron字符串格式( *)来描述,它是一组五个值的一条线,这表明当作业应该被执行时,python-crontab 将在文件中写入 crontab 的计划转换为写入编程方法。

from crontab import CronTabcron = CronTab(user='root')job = cron.new(command='my_script.sh')job.hour.every(1)cron.write()

python-crontab 不会自动保存计划,需要执行 write() 方法来保存计划。还有更多功能,我强烈建议您查看他们的文档。

5、RQ 调度器 RQ Scheduler

有些任务不能立即执行,因此我们需要根据 LIFOFIFO 等队列系统创建任务队列并弹出任务。python-rq允许我们做到这一点,使用 Redis 作为代理来排队作业。新作业的条目存储为带有信息的哈希映射,例如created_at, enqueued_at, origin, data, description.

排队任务由名为 worker 的程序执行。workersRedis 缓存中也有一个条目,负责将任务出列以及更新 Redis 中的任务状态。任务可以在需要时排队,但要安排它们,我们需要rq-scheduler

from rq_scheduler import Schedulerqueue = Queue('circle', connection=Redis())scheduler = Scheduler(queue=queue)scheduler.schedule(    scheduled_time=datetime.utcnow(), # Time for first execution, in UTC timezone    func=func,                     # Function to be queued    args=[arg1, arg2],             # Arguments passed into function when executed    kwargs={'foo': 'bar'},         # Keyword arguments passed into function when executed    interval=60,                   # Time before the function is called again, in seconds    repeat=None,                     # Repeat this number of times (None means repeat forever)    meta={'foo': 'bar'}            # Arbitrary pickleable data on the job itself)

RQ worker(RQ 工作器)必须在终端中单独启动或通过 python-rq 工作器启动。一旦任务被触发,就可以在工作终端中看到,在成功和失败场景中都可以使用单独的函数回调。

以上是"Python如何使用定时调度任务"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

调度 任务 方法 循环 作业 程序 线程 阻塞 代码 篇文章 逻辑 问题 工作 毫不费力 内容 函数 场景 方式 更多 条目 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 关注小学生网络安全 服务器端ui 怎么数据库中增加一列 暨南大学网络安全复试考什么 信息科技 互联网的发展 办公网络安全分析与设计方案 试述网站层次数据库的优缺点 我国的网络安全现状分析 校园网络安全平台要求 邯郸软件开发厂家价格 进销存软件连接不上数据库 移动5g测速为什么跳联通服务器 青岛启航游戏软件开发有限公司 数据库触发器代码 国家安全下的网络安全是什么 服务器和网站空间 江门市本猿网络技术有限公司 英国石油公司数据库官网 古冶区信息网络技术不二之选 怎么查财务软件数据库的客户端 互联网科技有限公司门口照片 靖江工业网络技术供应商家 真人吃鸡哪个服务器最好 数据库一行表示一个实体是什么 关于数据库系统设计步骤的说法中 系统软件开发的难点 netflow服务器 徐州财金学院里软件开发好吗 php 刷新更新的数据库 网络安全主题征文300字
0