跳转到主要内容

工作流编译器。

项目描述

Couler

Couler是一种描述工作流的编程语言。它与Python共享语法,但仅包含一小部分——函数定义和调用。Couler还是编译器的名称,它将Couler程序转换为Argo YAML文件。

动机

Couler的动机之一来自SQLFlow的要求。SQLFlow将SQL程序(可选带有AI语法扩展)转换为Couler程序,然后Couler编译器将其转换为Argo YAML文件。

SQLFlow需要Couler,因为它需要Argo。它需要Argo,因为它需要一个工作流执行引擎。它需要一个工作流引擎,因为在大多数设置中,SQLFlow服务器不能仅仅将每个SQL语句转换为Python提交者程序并逐个运行。如果这样做,SQLFlow引擎就像工作流引擎一样,需要保持工作流执行的状态。然而,遗憾的是,由于SQLFlow作为服务运行在Kubernetes上,这是最常见的情况,每个服务器实例可能随时被抢占。SQLFlow服务器确实可以在etcd等健壮的存储中保存状态;然而,这引入了大量的代码,使得SQLFlow类似于Argo这样的可靠工作流引擎的重复。

由于一些原因,我们基于Argo构建了Couler。

  • Argo YAML不够全面,如果我们让SQLFlow直接生成YAML文件,调试会很困难。
  • 由于我们将Couler作为人类可读的中间表示法引入,它不仅对SQLFlow用户,也对Python程序员有益。

设计

步骤和函数

Couler用户将工作流程编写为Python程序,其中每个步骤都是一个Python函数定义,而工作流程本身是一系列函数调用的序列。我们希望步骤函数如下。

  • couler.mysql.run(sql)
  • couler.mysql.export_table(table, filename)
  • couler.xgboost.train(model_def, training_data)
  • couler.xgboost.predict(trained_mode, test_data)

Couler核心

当用户定义一个步骤函数时,他们可以调用Couler提供以下基本函数。

  • couler.run_container(docker_image, cmd, args)通过带有参数的命令行启动容器。它返回从标准输出提取的值。
  • couler.run_script(docker_image, function_name)在一个容器中运行当前Couler程序中定义的Python函数。它返回从标准输出提取的值。
  • couler.when(condition, step)如果条件lambda返回true,则运行步骤。
  • couler.map(step, a_list)对给定Python列表中的每个值重复运行步骤。

步骤动物园

这是一个从步骤动物园收集的Couler步骤函数集合。由于每个步骤都在Docker容器中运行,步骤动物园也可能包含一些Dockerfile。建议配置CI/CD系统以自动从Dockerfile构建Docker镜像。

Argo和Docker模式

为了让调试更加舒适,我们可以在Argo模式之外让Couler支持Docker模式。在这两种方式中,每个步骤都以Docker容器运行。区别在于,容器在Argo模式下在Kubernetes集群上运行,但在Docker模式下在本地主机计算机上运行。

项目详情


下载文件

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

源分布

couler-0.0.0.dev0.tar.gz (7.5 kB 查看散列)

上传时间

构建分布

couler-0.0.0.dev0-py3-none-any.whl (8.7 kB 查看散列)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面