前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python中有啥好用的开源任务调度管理项目

Python中有啥好用的开源任务调度管理项目

作者头像
马拉松程序员
发布2022-04-26 19:09:01
8.5K0
发布2022-04-26 19:09:01
举报

任务背景:

上个月领导给我一个模型工程化专项工作,大体内容就是,把模型团队交付的项目代码,部署到应用环境中,跑出来的结果供系统使用。这也是我最近一直在忙着做的一个事情,天天加班到8、9点。

不过,这并不是一个从0到1的工作,之前最开始是采用的Django框架搭建起一个服务,使用apschedule 做任务管理,但是没有可视化的监控和预警。

任务需求:

在实际生产中,因为业务系统是一个基本投资收益分析的系统,对于基金来说,多数的数据分析都是基于季报来的,所以模型运行在一定程度上运行频率并不高。

模型的运行任务大体的分为三块,

  1. 数据准备,检查数据是否已经下发,模型运行的前置要求
  2. 模型运行,检查模型是否运行完成,中间是否有报错
  3. 模型结果,检查目标结果表是否有模型跑出来的结果

这三步是具有依赖关系,后者的运行依赖前者运行完成。

理想目标:

在Java中有很多开源的任务管理项目,比如说国产的xxl-job。

地址:https://www.xuxueli.com/xxl-job/ 但是呢,模型相关的内容基本都是Python交付的,偶然还有matlab,所以期望能找到一个开源的Python任务管理调度项目

开源寻找:

1.Airflow

地址:https://github.com/apache/airflow

Airflow 是一个使用 Python 语言编写的 data pipeline 调度和监控工作流的平台。Airflow 是通过 DAG(Directed acyclic graph 有向无环图)来管理任务流程的任务调度工具, 不需要知道业务数据的具体内容,设置任务的依赖关系即可实现任务调度。

这个平台拥有和 Hive、Presto、MySQL、HDFS、Postgres 等数据源之间交互的能力,并且提供了钩子(hook)使其拥有很好地扩展性。除了一个命令行界面,该工具还提供了一个基于 Web 的用户界面可以可视化管道的依赖关系、监控进度、触发任务等。

airflow架构图

airflow可视化管理页面

总结:

这么看Airflow是一个很好的解决方案,但是呢,有一个比较尴尬的问题是,Airflow的运行是依赖Linux系统的,可是由于历史原因公司现在的生产上模型是运行在window server环境中,一个巨大的尴尬写在脸上,这么好用的工具因为客观限制无法使用。

2.Django+Celery+Flower

地址: https://github.com/celery/celery/

Celery 是一个简单、灵活且可靠的分布式系统,用于处理大量消息,同时为操作提供维护此类系统所需的工具。它是一个专注于实时处理的任务队列,同时也支持任务调度。

Celery本身不含消息服务,它使用第三方消息服务来传递任务,目前,Celery支持的消息服务有RabbitMQ、Redis甚至是数据库,当然Redis应该是最佳选择。

不像是Airflow,Celery本身也没有可视化页面管理,不过有相配套的可视化管理工具——Flower,地址:https://github.com/mher/flower

Flower 是一个基于 Web 的工具,用于监控和管理 Celery 集群。

Flower 具有以下重要的特性:

  • 任务进度和历史
  • 能够显示任务详细信息(参数、开始时间、运行时间等)
  • 图表和统计

Flower 管理页面

总结:

Celery是一个很好的任务调度框架,正如它说的那样,支持大量消息,可以支持到百万级别的量级。但是它用起来的还需要配置消息对列,redis或者mq,使用起来配置比较多,而且需要三方插件的支持。也是解决目前问题的一种方式,不过有种高射炮打蚊子的感觉,后面维护也很费劲。

3.Django+Apscheduler

地址:https://github.com/jcass77/django-apscheduler

Apscheduler是Python的第三方库,提供了基于日期、固定时间间隔以及crontab 类型的任务,可以在主程序的运行过程中快速增加新作业或删除旧作业,如果把作业存储在数据库中,那么作业的状态会被保存,当调度器重启时,不必重新添加作业,作业会恢复原状态继续执行。

Apscheduler可以当作一个跨平台的调度工具来使用,可以做为 linux 系统crontab 工具或 windows 计划任务程序的替换。

相应的在Django中有集成包——django-apscheduler,它是一个 Django 应用程序,它为 APScheduler 添加了一个轻量级的包装器。它允许使用 Django 的 ORM 在数据库中存储持久作业。

总结:

这是目前正在使用的方式,目前历史上使用的是Django的1.x版本,而且并没有做可视化的管理,Django本身自带了一个admin管理页面,这个页面并不能满足所有的需求。

4.JobCenter(Flask+Apscheduler)

地址:https://github.com/guomaoqiu/JobCenter

Jobcenter的slogan是Apscheduler的最佳实践,看名字是国人开发的。

特点:

  • 可视化界面操作
  • 定时任务统一管理
  • 完全完全的Crontab
  • 支持秒级任务
  • 作业任务可搜索、暂停、编辑、删除
  • 作业任务持久化存储、各种不同类型作业动态添加

Jobcenter任务列表

某个Job的日志

Jobcenter是基于Flask和Apscheduler开发的,本质上也是对Apscheduler的封装和使用,不过作者做了一个不错的前端。但列表中编辑功能不可用,也没有在列表操作中接入任务日志查看的功能。

总结:

有句话说,踏破铁鞋无觅处,得来全不费功夫。从目前来看,JobCenter的功能仿佛可以实现我的需求,本身模型的任务量级也不大,在百八十个左右。

倾向选择:

3、4的区别在于web管理的实现框架上,一个是Django,一个是Flask,两个框架的特点都非常的鲜明。

从目前的工作做下来,我个人倾向选择3或者4。

对于当前的实际情况来说,选择3的优点,是可以基于历史项目升级,部分的功能可以复用(之前是基于Api管理),缺点是需要自主开发可视化的管理。

选择4的优点,前端功能大部分已经实现了。缺点是还需要根据实际情况做功能改造,作者分享的源码中部分功能没有实现,看提交,最近的更新是14个月前,看样子维护的不勤快。

好了,具体怎么选择还得领导排版,或者你有什么更好的开源项目欢迎分享给我。

我是马拉松程序员,可不止代码。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 马拉松程序员 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档