工作流编译器。
项目描述
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的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 06b51ab1e0989762f3f8ac7089a9be8b5e8e688776849d1e612b2efdf2ab6473 |
|
MD5 | 691e2cd659231a8c0bf7ffc2aec3dc02 |
|
BLAKE2b-256 | 08235f5426a669fd17388cc83542a14551e1391c57eaf5d3d108c80a84aa485a |
couler-0.0.0.dev0-py3-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 5585aaf2c22e1853b9f0aede2fa83b36b0552fbb9b74278bbaeaa5b2c5ab9fcd |
|
MD5 | 875d52d864ca9651a0f322e1060983c1 |
|
BLAKE2b-256 | c9b275626a022f6cd2cd2efa9d57967f0571d1006dd28e5ae5fc3f9237ffa37e |