首页 > 编程问答 >如何在 Python 中获得类似 Cron 的调度程序?

如何在 Python 中获得类似 Cron 的调度程序?

时间:2024-09-25 03:24:13浏览次数:1  
标签:python cron scheduled-tasks

我正在寻找一个Python库,它将提供 at cron 类似的功能。

我很想有一个纯Python解决方案,而不是依赖于安装在盒子上的工具;这样我就可以在没有 cron 的机器上运行。

对于那些不熟悉 cron 的人:您可以根据如下表达式来安排任务:

 0 2 * * 7 /usr/bin/run-backup # run the backups at 0200 on Every Sunday
 0 9-17/2 * * 1-5 /usr/bin/purge-temps # run the purge temps command, every 2 hours between 9am and 5pm on Mondays to Fridays.

cron 时间表达式语法不太重要,但我想要一些东西具有这种灵活性。

如果没有什么东西可以为我开箱即用地执行此操作,那么任何有关构建块的建议都将非常感激。

编辑 I我对启动进程不感兴趣,只是也用 Python 编写的“作业” - python 函数。我认为这必然是一个不同的线程,但不是在不同的进程中。

为此,我正在寻找 cron 时间表达式的表达能力,但在 Python 中。

Cron 已经存在很多年了,但我正在努力尽可能地便携。我不能依赖它的存在。


Python 中类似 Cron 的调度器

有很多 Python 库可以实现类似 Cron 的调度功能,无需依赖系统安装的 Cron。以下是一些流行的选择:

1. Schedule:

  • 纯 Python 实现,易于使用。
  • 支持类 Cron 语法的时间表达式。
  • 不支持秒级精度。
import schedule
import time

def job():
  print("I'm running!")

schedule.every().day.at("10:30").do(job)

while True:
  schedule.run_pending()
  time.sleep(1)

2. APScheduler:

  • 功能强大的调度库,支持多种调度器后端(内存、数据库等)。
  • 支持类 Cron 语法以及更复杂的时间表达式。
  • 支持秒级精度。
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.cron import CronTrigger

def job():
  print("I'm running!")

scheduler = BackgroundScheduler()
trigger = CronTrigger(day_of_week='mon-fri', hour='9-17', minute='*/2')
scheduler.add_job(job, trigger=trigger)
scheduler.start()

# 保持主线程运行
try:
    while True:
        time.sleep(2)
except (KeyboardInterrupt, SystemExit):
    scheduler.shutdown()

3. Celery:

  • 分布式任务队列,可以用于调度和执行异步任务。
  • 支持类 Cron 语法的时间表达式。
  • 需要额外的配置,例如消息代理(例如 RabbitMQ 或 Redis)。
from celery import Celery
from celery.schedules import crontab

app = Celery('tasks', broker='redis://localhost')

@app.on_after_configure.connect
def setup_periodic_tasks(sender, **kwargs):
    sender.add_periodic_task(
        crontab(minute='*/1'), # 每分钟执行一次
        my_task.s('hello'),
    )

@app.task
def my_task(arg):
    print(arg)

4. 自定义解决方案:

  • 如果你只需要简单的调度功能,可以考虑使用 time threading 模块构建自己的解决方案。
  • 可以使用正则表达式解析 Cron 表达式,并使用 time.sleep() 控制任务执行时间。

选择建议:

  • 对于简单的调度需求, Schedule 是一个不错的选择。
  • 对于更复杂的需求, APScheduler 提供了更多的功能和灵活性。
  • 如果需要分布式任务调度, Celery 是一个强大的选择。
  • 如果你只需要简单的功能并且想要完全控制代码,可以考虑 自定义解决方案

希望这些信息能帮到你!

标签:python,cron,scheduled-tasks
From: 373335

相关文章

  • 我找不到一种方法让我的 python print 语句在几秒钟后自行删除
    我正在尝试制作一款基于文本的冒险游戏,我希望能够让文本自行删除。举个例子,游戏将使用print()语句打印文本,5秒后文本将被删除或对玩家隐藏。我试图找到其他人与此问题相关的问题,并且我找不到任何信息。我不知道该使用什么命令或与之相关的任何内容,请帮忙。Ivetriedtof......
  • 在 python 中可视化四元数
    我在无人机上安装了一个IMU,每0.1秒收集一次四元数数据(w,x,y,z)。现在我想将四元数数据与实际的无人机方向(视频数据)进行比较。所以我想创建某种盒子对象来显示基于四元数数据的方向。我实现了以下教程,将四元数转换为欧拉以进行可视化:https://www.youtube.com/watch?......
  • 有没有办法在 python 中获取特定的键盘输入
    我正在为学校开发一个项目,它目前有行输入(“按Enter继续”),它可以工作,但只要用户按Enter键程序继续,输入是什么并不重要,而且我我希望它仅在按下特定键时才起作用。我查了一下,曾经有一个键盘模块,但由于某种莫名其妙的原因它被删除了,那么还有其他方式获取输入吗?你绝对可以......
  • python+flask计算机毕业设计基于微信小程序的法律问题咨询系统设计与实现(程序+开题+论
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网的飞速发展和智能手机的普及,人们获取信息和解决问题的途径日益多样化。在法律服务领域,传统的线下咨询方式已难以满足公众日益增......
  • python+flask计算机毕业设计基于人脸识别的医疗保险系统的设计与实现(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着科技的飞速发展和人口老龄化的加剧,医疗保险系统面临着前所未有的挑战与机遇。传统医疗保险管理方式依赖于人工审核与纸质记录,不仅效率......
  • python+flask计算机毕业设计基于微信小程序的河南省美食分享平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在移动互联网时代,智能手机和社交媒体已成为人们日常生活不可或缺的一部分。微信小程序作为腾讯推出的一种轻量级应用形态,凭借其无需安装、......
  • python+flask计算机毕业设计基于微信小程序的网络文学管理平台(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网的迅猛发展,网络文学已成为当代文化生活中不可或缺的一部分,它不仅丰富了人们的阅读体验,还促进了文学创作的多元化与普及化。然而......
  • Python不同方式正倒序遍历的时间开销
    fromtimeitimporttimeitli=[iforiinrange(1000000)]deffor_loop(n):#使用for直接遍历ret=0foriinli:ret=li[i]deffor_loop_enumerate(n):#使用enumerate进行遍历ret=0foridx,iinenumerate(li):re......
  • 【入门岛·第2关】python基础
    目录Python实现wordcountVscode连接InternStudiodebug笔记Python实现wordcountimportstringdefwordcount(text):#去掉标点符号,并将文本转换为小写text=text.translate(str.maketrans('','',string.punctuation)).lower()#按空格分割文本为单词......
  • Anaconda的使用命令,方便python的管理
    pythonpython是世界上最好的编程语言(有杠精,你就对。)python的领域涉及了AI,大数据,网络爬虫,运维,开发等等方面。python的环境由解释器和包组成。1、python的解释器Python解释器是Python环境的本体,也就是python.exe文件。我们需要在环境变量的路径中将python.exe所在的目录添加上,这......