【定时任务知多少, 横跨10余项目,6种实践方式】

请添加图片描述

工作多年,随着项目的不断研发落地,大大小小做了有10+个项目,其中不少涉及到定时任务。今天来盘一下,这些项目中,定时任务的实现方式 。
通过项目的需求场景,可以看出定时任务需要有什么样的功能。

需求

1 调度需求

  • 任务,增,删,查。
  • 时效,实时发送 / 定时发送。

2 执行需求

  • 分布式,多机计算
  • 跨平台,跨语言

方案

这里列举6个方案 ,上手从简单到难,功能从基础到完备。
1,crontab (native in linux)
2,k8s cronjob (k8s)
3,timeloop (most simple)
4,apSchdule (simple)
5,celery (distribute)
6,airflow (most complete)

使用速览

定时任务在开发和运维中非常常见。这里是六种不同的定时任务框架及其基本使用示例:

1. Crontab (Native in Linux)

介绍: Crontab是Linux系统中用于定时执行任务的工具。它的配置文件crontab可以通过简单的语法来设定任务的执行时间和频率。

使用示例:

  1. 使用如下命令打开crontab编辑器:

    crontab -e
    
  2. 添加一个定时任务,比如每天凌晨2点执行/path/to/script.sh

    0 2 * * * /path/to/script.sh
    

2. Kubernetes CronJob (K8s)

介绍: Kubernetes CronJob用于在Kubernetes集群中创建基于时间调度的任务。它的工作方式类似于Crontab,但具有容器化和分布式的优势。

使用示例:

  1. 创建一个CronJob YAML文件 (cronjob.yaml):

    apiVersion: batch/v1beta1
    kind: CronJob
    metadata:name: example-cronjob
    spec:schedule: "0 2 * * *"jobTemplate:spec:template:spec:containers:- name: exampleimage: busyboxargs:- /bin/sh- -c- date; echo Hello from Kubernetes CronJobrestartPolicy: OnFailure
  2. 应用该CronJob:

    kubectl apply -f cronjob.yaml
    

3. Timeloop (Most Simple)

介绍: Timeloop是一个简单的Python库,用于执行定时任务。它特别适合于轻量级的定时任务调度。

使用示例:

  1. 安装Timeloop:

    pip install timeloop
    
  2. 创建一个简单的定时任务:

    from timeloop import Timeloop
    from datetime import timedeltatl = Timeloop()@tl.job(interval=timedelta(seconds=10))
    def sample_job():print("Job executed")if __name__ == "__main__":tl.start(block=True)
    

4. APScheduler (Simple)

介绍: APScheduler是一个轻量级但功能强大的Python库,用于调度定时任务。它支持多种触发器和持久化后端。

使用示例:

  1. 安装APScheduler:

    pip install apscheduler
    
  2. 创建一个定时任务:

    from apscheduler.schedulers.blocking import BlockingSchedulerdef job_function():print("Job executed")scheduler = BlockingScheduler()
    scheduler.add_job(job_function, 'interval', seconds=10)try:scheduler.start()
    except (KeyboardInterrupt, SystemExit):pass
    

5. Celery (Distributed)

介绍: Celery是一个分布式任务队列系统,支持实时处理和定时任务。它适用于需要高并发、分布式任务执行的场景。

使用示例:

  1. 安装Celery:

    pip install celery
    
  2. 创建一个Celery应用并定义定时任务:

    from celery import Celeryapp = Celery('tasks', broker='pyamqp://guest@localhost//')@app.task
    def add(x, y):return x + yfrom celery.schedules import crontabapp.conf.beat_schedule = {'add-every-30-seconds': {'task': 'tasks.add','schedule': 30.0,'args': (16, 16)},
    }if __name__ == '__main__':app.start()

6. Apache Airflow (Most Complete)

介绍: Apache Airflow是一个用于编排和调度复杂工作流的工具,具有丰富的功能和可视化界面。适用于复杂的任务依赖和调度场景。

使用示例:

  1. 安装Airflow:

    pip install apache-airflow
    
  2. 创建一个DAG文件 (example_dag.py):

    from airflow import DAG
    from airflow.operators.python_operator import PythonOperator
    from datetime import datetimedef print_hello():print('Hello from Airflow')default_args = {'owner': 'airflow','depends_on_past': False,'start_date': datetime(2023, 1, 1),'retries': 1,
    }dag = DAG('example_dag', default_args=default_args, schedule_interval='@daily')t1 = PythonOperator(task_id='print_hello',python_callable=print_hello,dag=dag,
    )
  3. 启动Airflow服务并加载DAG:

    airflow webserver
    airflow scheduler
    

以上是六种不同定时任务框架的简要介绍和基本使用示例。我们接下来用表格对比下,

一表对比

名称crontabk8s cronjobapSchedulertimeloopceleryairflow
介绍Linux 原生定时任务调度工具Kubernetes 定时任务调度简单的 Python 调度库最简单的 Python 任务调度工具分布式任务队列功能最完整的工作流调度工具
优点原生Linux等系统支持。灵活 ,好配置。简单易用,如果作为python 小型任务调度器 特别合适。使用最简单。架构天然适合分布式场景。功能最全,实时,延时任务, 分布式,拓扑编排,编程接口,跨语言等。
部署与运营成本简单简单,主要依赖k8s环境简单简单中等偏难,依赖多
缺点功能少,配套不全。扩展功能少。分布式支持弱(需要自己实现基类扩展),语言只能用python。功能很少,适合本地跑 或者 简单demo使用。相对较为原始。很重,很复杂。

选择

几种方案的优缺点很明显,选择困难症患者 也不用纠结。

  • crontab (native in linux):linux老鸟们都懂 ,最原始。物理机上跑一跑。
  • k8s cronjob: cronjob升级版,上云,灵活 ,好配置。用k8s服务的可以配套用。
  • timeloop (most simple):python语言,中小型项目 可选。
  • apschdule (simple) :python语言,中小型项目 可选。
  • celery (distribute ) :一般不单独使用,可以作为中间件。
  • airflow (most complete) :功能最全,最强大, 中大型项目,调用关系复杂,项目结构复杂,拓扑依赖多 可以选用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/846150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaSE——集合框架二(6/6)-(案例)补充知识:集合的嵌套(需求与分析、问题解决、运行测试)

目录 案例引入 需求与分析 问题解决 运行测试 集合的嵌套 顾名思义,指的是集合中的元素又是一个集合。 本篇通过一个案例对这一知识进行了解: 案例引入 需求与分析 要求在程序中记住如下省份和其对应的城市信息,记录成功后&#xff0…

prometheus的rules配置

说明:本文介绍prometheus中的规则配置; 规则说明 groups:- name: MySQLAlertsrules:- alert: MysqlDownexpr: mysql_up 0for: 0mlabels:severity: criticalannotations:summary: MySQL down (实例:{{ $labels.instance }})description: &q…

VMware Workstation中WinXP联网问题

我一直以为我的虚拟机上的XP没有联网 因为 蒙了半天,发现是因为这个网址打不开,不是没有网 太傻了 不如在cmd命令行中通过ping baidu.com来判断是否联网

【康耐视国产案例】Nvidia/算能+智能AI相机:用AI驱动 | 降低电动车成本的未来之路

受环保观念影响、政府激励措施推动与新能源技术的发展,消费者对电动汽车(EV)的需求正在不断增长,电动汽车已经成为了未来出行方式的重要组成部分。然而,电动汽车大规模取代燃油汽车的道路还很漫长。最大的障碍就是电动汽车的售价相对过高。尽…

【Python面试50题】

1. **基础概念** 1. Python 是解释型还是编译型语言? 2. 什么是 Python 的 GIL(全局解释器锁)? 3. 如何理解 Python 中的可变与不可变数据类型? 4. 解释一下 Python 中的 pass 语句。 5. Python 中的列…

基于昇腾910B训练万亿参数的语言模型简介

基于昇腾910B训练万亿参数的语言模型 Abstract 在本工作中,作者开发了一个系统,该系统在Ascend 910 AI处理器集群和MindSpore框架上训练了一个万亿参数的语言模型,并提出了一个含有1.085T参数的语言模型,名为PanGu-。 从PanGu-[…

3.基础光照

从宏观上讲渲染包含了两大部分:决定一个像素的可见性,决定一个像素的光照计算 而光照模型就是用于决定在一个像素上决定怎样的渲染光照计算。 一、我们是如何看到这个世界的 1.光源 实时渲染中,我们通常把光源当成一个没有体积的点&#…

远程服务器上,再次配笔记1、2、11、12相同的深度学习和gcc环境

文章目录 参考文献 创建环境在(zgp_m3dm)中安装会显示zgp_m3dm_main环境中的情况满足(base) ~/zgp/M3DM-repetition conda deactivate 再次安装如果服务器本身不能联网,需下载pysocks包以设置反向代理(具体可参考之前的笔记10): 再…

简易版本的QFD质量屋

比如餐馆要考虑什么因素最重要,这里列出好吃,快速,便宜三类问题,然后设置上图的权重, 然后设置9,3,1三类因子,9比如是最重要的,3,1,依次没那么重要…

[vue2项目]vue2+supermap[mapboxgl]+天地图之地图的初始化

Supermap参考教程 天地图 一、安装 1、终端:npm install supermap/vue-iclient-mapboxgl 2、在package.json文件的dependencies查看supermap/vue-iclient-mapboxgl依赖是否安装成功。 3、在mian.js全局引入 import VueiClient from supermap/vue-iclient-mapboxgl; Vue.use(…

牛客网刷题 | BC106 K形图案

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 描述 KiKi学习了循环&am…

WPS部分快捷操作汇总

记录一些个人常用的WPS快捷操作 一、去除文档中所有的超链接: 1、用WPS打开文档; 2、用Ctrla全选,或者点击上方的【选择】-【全选】,选中文档全部内容; 3、按CTRLSHIFTF9组合键,即可一次性将取文档中所有…

Linux的程序管理2:设置优先级,程序的查看与处理---ps命令详解与kill,killall,top,renice,nice搭配使用管理linux

前言 程序的管理除了前文说到的前后台执行,离线执行。还包括下面几个方面: 1:如何找到最耗费系统资源的程序? (使用top命令找到PID然后排查原因) 2:设置程序的优先级,让其被执行的概…

“论软件的可靠性评价”必过范文,突击2024软考高项论文

论文部分 摘要 2023年03月,我参与了某艺术品公司线上拍卖管理平台的研发。该项目的目标是建立一个互联网在线拍卖平台,用户可以通过手机或PC浏览器进入拍卖平台,对喜欢的拍品进行参拍出价。平台提供了在线支付、在线出价、保证金管理、拍品…

Android开机动画的结束过程BootAnimation(基于Android10.0.0-r41)

文章目录 Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41) Android 开机动画的结束过程BootAnimation(基于Android10.0.0-r41) 路径frameworks/base/cmds/bootanimation/bootanimation_main.cpp init进程把我们的BootAnimation的二进制文件拉起来了&#xf…

YOLOv5改进 | 添加注意力篇 | 利用YOLOv10提出的PSA注意力机制助力YOLOv5有效涨点(附代码 + 详细修改教程)

一、本文介绍 本文给大家带来的改进机制是YOLOv10提出的PSA注意力机制,自注意力在各种视觉任务中得到了广泛应用,因为它具有显著的全局建模能力。然而,自注意力机制表现出较高的计算复杂度和内存占用。为了解决这个问题,鉴于注意…

一个可以自动生成随机区组试验的excel VBA小程序

在作物品种区域试验时,通常会采用随机区组试验设计,特制作了一个可以自动生成随机区组试验的小程序。excel参数界面如下: 参数含义如下: 1、生成新表的名称:程序将新建表格,用于生成随机区组试验。若此处为…

arm cortex-m架构 SVC指令详解以及其在freertos的应用

1. 前置知识 本文基于arm cortex-m架构描述, 关于arm cortex-m的一些基础知识可以参考我另外几篇文章: arm cortex-m 架构简述arm异常处理分析c语言函数调用规范-基于arm 分析 2 SVC指令 2.1 SVC指令位域表示 bit15 - bit12:条件码&#…

SOFA-RPC学习记录

文章目录 需求分析模块划分微服务模块交互模块 可拓展架构插件机制 功能分析交互模块 学习微服务模块交互模块 dubbo与nacos集成学习Nacos配置中心实战 dubbo与apollo集成学习配置中心组件与k8s的抉择参考资料 结论 本报告旨在深入学习SOFA-RPC框架,特别是其动态配置…

Linux综合实践(Ubuntu)

目录 一、配置任务 1.1 配置该服务器的软件源为中科大软件源 1.2 安装相关软件openssh-server和vim 1.3 设置双网卡,网卡1为NAT模式,网卡2为桥接模式(桥接模式下,使用静态ip,该网卡数据跟实验室主机网络设置相似,除…