Cowait是一个使用异步Python创建容器化工作流的框架。

cowait的Python项目详细描述


cowait

考威特

Actions StatusPyPI versionWebsite shields.io

Cowait是一个使用异步Python创建容器化分布式应用程序的框架。容器化函数,称为Tasks,可以在Docker或远程Kubernetes集群中本地运行。其目的是构建一种新颖的工作流引擎,它提供最大的灵活性,同时也需要最少的设置和配置。由于对任务可能是什么的松散定义,以及与Docker&Kubernetes的集成,Cowait可用于轻松构建多种类型的分布式应用程序。在

请在https://docs.cowait.io/查看文档

通知

Cowait仍处于相当早期的开发阶段。我们邀请您尝试一下,并乐意接受您的反馈和贡献,但请注意,可能会引入破坏性的API更改。在

入门

要求

  • 码头工人
  • python 3.6+

安装

$ pip install cowait

任务开发

第一个任务

  1. 编写任务。

任务可以写成cowait.Task的修饰函数或子类。最简单的方法是编写修饰函数:

^{pr2}$
  1. 构建任务映像

当前目录中的所有文件都绑定到docker映像中。在

在与hello.py相同的文件夹中,运行:

$ cowait build
  1. 在本地运行

要运行任务,请将模块导入名称的名称传递给cowait run。因为我们的任务代码位于hello.py,所以模块名将是hello。在与hello.py相同的文件夹中,运行:

$ cowait run hello

注释

  • ^提供给cowait run的{}是python模块名。这个模块应该正好包含one任务类。模块可以是单个python文件或带有__init__.py文件的子目录。在
  • 从CLI运行时,任务的实际函数/类名并不重要,只有在从python导入和执行任务时。在

子任务、参数和返回值

任务可以通过使用await关键字异步导入和调用来执行子任务。子任务接受命名参数并返回结果,非常类似于常规函数。在

假设我们有一个Square任务,它是一个整数的平方。在

# square.pyfromcowaitimporttask@taskasyncdefSquare(number:int)->int:returnnumber**2

我们可以将其导入另一个任务并执行它:

# main.pyfromcowaitimporttaskfromsquareimportSquare@taskasyncdefMainTask():value=22squared=awaitSquare(number=22)print(f'{value} squared is {squared}!')

任务上下文

任务上下文是包含cowait.yml配置文件的目录。此目录将充当项目的根目录,并且在构建步骤期间,此文件夹中的所有内容都将复制到生成的docker映像中。如果尚未创建cowait.yml文件,则将使用当前工作目录(执行cowait build时)。在

**任务上下文示例**

 /var/stuff/my_cowait_project
   src/
     library.py
   cowait.yml
   requirements.txt
   task1.py
   task2.py

在本例中,/var/stuff/my_cowait_project将是上下文目录。在

推送任务图像

在Kubernetes集群上运行任务之前,必须将它们推送到可以从集群访问的docker注册表。为此,必须在上下文配置文件中定义一个正确的映像名。在

version:1cowait:image:docker.io/username/cowait-task

{16>配置完映像后,您可以使用完整的映像名^:

$ cowait push

群集部署

要求

  • 已配置kubernetes群集上下文。在
  • 可从群集访问Docker注册表。在

首先,确保图像已被推送到docker注册表。在

$ cowait push

Kubernetes配置

在kubernetes集群上运行任务之前,您需要一个具有创建/列出pod权限的服务帐户。k8setup.yml中提供了一个示例配置,允许默认服务帐户拥有的任何pod创建、列出和销毁其他pod。在

有关在Kuberne上运行的详细信息tes,见documentation。在

正在运行任务

要在远程集群上运行任务,请使用--cluster选项将集群名称传递给cowait run。在

Cowait附带了一个名为kubernetes的预定义集群,它总是指默认配置的集群(由$ kubectl config current-context返回的集群)。在

$ cowait run docker.io/username/cowait-task --cluster kubernetes

发展

要求

  • 码头工人
  • python 3.6+
  • pipenv/virtualenv(可选)

安装

  1. 克隆存储库
  2. $ python3 -m pip install -e .

cowait/目录的更改需要重建基础映像。您可以使用存储库根目录中提供的帮助程序脚本执行此操作:

$ ./build.sh

注意:要使更改生效,必须使用cowait build重新生成任务。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android HttpClient cookies   如何使用Java在远程系统上运行SSH命令?   java从字符串数组中的字符串末尾删除“,”   在One plus 3t手机上,当应用程序被终止或从最近的应用程序中刷出时,java Android FCM推送通知不起作用   java如何使垂直滚动条始终位于jtable的末尾   在java中解析迄今为止“未知”的字符串   javascript在Java中获取Nashorn JsonObject   java windows 10和ubuntu可以使用相同的JDK吗?   java在不同的文件中记录不同的日志。但所有日志都放在同一个文件中   具有特定jdk的java Gradle构建项目   xml Java web服务生成错误响应   javascript Jaggery文件更改不显示   java输出二进制搜索树数组   将BufferedReader解析为JSON对象时,java在位置处意外标记文件结尾