跳转到主要内容

基于Celery的高级动态任务流管理

项目描述

一个基于Celery(一个异步分布式任务队列)的高级任务流管理。

codecov PyPI Current Version PyPI Implementation PyPI Wheel Travis CI Documentation Status GitHub stars GitHub license Twitter

此项目有帮助吗? 给我发一条简单温暖的短信

十字路口

最新稳定版本:Selinon 1.3.0

TLDR;

一个在Python3上编写的Celery(异步分布式任务队列)之上的高级流程管理,允许您

  • 根据先前任务的结果动态安排任务

  • 将任务分组到简单的YAML配置文件中的流程中

  • 从其他流程(甚至递归地)安排流程

  • 透明地将任务结果存储在您的存储和数据库中,并对定义的JSON模式进行验证

  • 在不清除队列(迁移)的情况下,尊重 YAML 配置文件中的更改进行重新部署

  • 通过内置的跟踪机制跟踪流程进度

  • 具有回退任务或回退流程的复杂按任务或按流程的故障处理

  • 您的流程中无 DAG 限制

  • 在选择执行任务时,选择性地选择您的流程图中应遵守任务依赖的任务

  • 使用如 Kubernetes 等编排工具使您的部署易于编排

  • 用于大数据处理管道的高度可扩展的图灵完备解决方案

  • (当然)还有更多…请查看 文档

YouTube 视频

让我们通过 YouTube 视频 解释 Selinon(点击跳转到 YouTube)。

Ironwoodland

关于

此工具是 Celery 的实现,允许您定义流程和流程中的依赖关系,根据 Celery 工作进程的结果、它们的成功或任何外部事件来安排任务。如果您不熟悉 Celery,请查看其主页 www.celeryproject.org这篇不错的教程

Selinon 最初是为了照顾 Red Hat 产品中的一个高级流程而设计的,它已经为数千个流程和任务提供服务。其主要目标是简化指定任务组、将任务分组到流程中、处理任务和流程之间的数据和执行依赖关系,轻松重用任务和流程,在 YAML 配置文件中建模高级执行单元,并使整个系统易于建模、易于维护和易于调试。

通过将整个系统的声明性配置放入 YAML 文件中,您可以保持任务尽可能简单。将任务的结果存储在数据库中、建模依赖关系或在失败时执行回退任务/流程与任务逻辑分开。这使得您可以根据需求动态更改任务和流程依赖关系,根据任务优化数据库的数据检索和数据存储,甚至根据系统中的跟踪事件跟踪进度。

Selinon 被设计用来为由 KubernetesOpenShift 或任何其他编排工具编排的集群或数据中心中的数百万个任务提供服务,但也可以简化小型系统。此外,Selinon 可以使它们在将来易于扩展,并使开发者的生活变得更加轻松。

快速概述

Selinon 在分布式环境中提供服务,让我们来准备一顿晚餐!

如果我们想准备一顿晚餐,我们需要购买食材。这些食材是在 buyIngredientsFlow 中购买的。这个流程由多个任务组成,但让我们关注我们的主流程。一旦所有食材都买回来了,我们就可以开始准备我们的晚餐了 prepareFlow。同样,这个流程也包含一些额外的步骤,这些步骤需要完成以满足我们的未来需求。如您所见,如果提到的流程中发生任何错误(见红色箭头),我们将回退到订购披萨和啤酒,这是我们订购的。为了使啤酒冷却,我们将它放在我们的 Fridge 存储中。如果我们成功完成了 prepareFlow 并成功购物,我们就可以继续到 serveDinnerFlow

仅为了指出 - 灰色节点表示流程(可以由其他流程或任务组成)和白色(圆形)节点是任务。条件以六边形表示(见下文)。黑色箭头表示节点之间的时间或数据依赖关系,灰色箭头指示任务结果存储的位置。

Main dinner flow

为了我们的晚餐,我们需要鸡蛋、面粉和一些额外的配料。此外,根据我们的条件,我们会条件性地购买一朵花。如果我们的条件为False,我们的任务BuyFlowerTask将不会被调度(或执行)。条件由谓词组成,这些谓词可以用逻辑运算符按需分组。如果您愿意,可以定义自己的谓词(默认的可在selinon.predicates中找到)。所购买的任何东西都会透明地存储在Basket存储中。

让我们可视化我们的buyIngredientsFlow

Buy ingredients flow

正如我们在主流程中所述,在购买配料后,我们继续进行晚餐准备,但首先我们需要检查位于http://recipes.lan/how-to-bake-pie.html的食谱。我们购买的任何配料都会根据我们的YAML配置文件中定义的存储透明地检索。我们将烤箱预热到预期的温度,一旦达到温度并且我们完成了面团,我们就可以开始烤制了。

根据上述描述,我们的prepareFlow将如下所示

Prepare flow

一切完成后,我们上菜。因为我们想为所有客人上菜,所以我们需要确保我们调度N个类型的ServePlateTask任务。每次我们运行整个晚餐流程时,客人的数量可能都会变化,所以请确保没有客人会饿着。我们的serveDinnerFlow将如下所示

Serve dinner flow

这个示例展示了非常简单的流程。整个配置可以在这里找到。只需查看一下您如何轻松定义您的流程!您还可以在这个仓库中找到一个可视化YAML配置的脚本。

更多信息

示例故意简化了。您还可以参数化您的流程,调度N个任务(其中N是一个运行时评估的变量),进行结果缓存,将任务放置在单独的队列中以进行流畅的系统更新,在时间上限制某些任务的执行,将任务的结果传播到子流程等。有关更多信息,请参阅文档

现场演示

您可以在这里找到一个包含几个示例的现场演示。请随意查看。

安装

$ pip3 install selinon

可用的额外功能

  • celery - 如果您使用Celery则需要

  • mongodb - 如果您使用MongoDB存储适配器则需要

  • postgresql - 如果您使用PostgreSQL存储适配器则需要

  • redis - 如果您使用Redis存储适配器则需要

  • s3 - 如果您使用S3存储适配器则需要

  • sentry - 如果您需要Sentry支持则需要

可以通过以下方式安装额外功能

$ pip3 install selinon[celery,mongodb,postgresql,redis,s3,sentry]

请随意选择您设置所需的额外功能。

项目详细信息


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

selinon-1.3.0.post0.tar.gz (215.5 kB 查看哈希值)

上传时间 源代码

构建分发

selinon-1.3.0.post0-py3-none-any.whl (324.5 kB 查看哈希值)

上传时间 Python 3

由以下组织支持