色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Bamboo-pipeline:Python高效流程編排引擎

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-10-31 16:39 ? 次閱讀

Bamboo-pipeline 是藍鯨智云旗下SaaS標準運維的流程編排引擎。其具備以下特點:

  1. 多種流程模式 :支持串行、并行,支持子流程,可以根據全局參數自動選擇分支執行,節點失敗處理機制可配置。
  2. 參數引擎 :支持參數共享,支持參數替換。
  3. 可交互的任務執行 :任務執行中可以隨時暫停、繼續、撤銷,節點失敗后可以重試、跳過。

1.準備

開始之前,你要確保Python和pip已經成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。

(可選1) 如果你用Python的目的是數據分析,可以直接安裝Anaconda:Python數據分析與挖掘好幫手—Anaconda,它內置了Python和pip.

(可選2) 此外,推薦大家用VSCode編輯器,它有許多的優點:Python 編程的最好搭檔—VSCode 詳細指南

請選擇以下任一種方式輸入命令安裝依賴

  1. Windows 環境 打開 Cmd (開始-運行-CMD)。
  2. MacOS 環境 打開 Terminal (command+空格輸入Terminal)。
  3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install bamboo-engine
pip install bamboo-pipeline
pip install django
pip install celery

2. 項目初始化

(選項一:無Django項目) 如果你沒有任何的現成Django項目,請按下面的流程初始化

由于 ** bamboo-pipeline ** 運行時基于 Django 實現,所以需要新建一個 Django 項目:

django-admin startproject easy_pipeline
cd easy_pipeline

在 ** easy_pipeline.settings.py ** 下添加如下配置:

from pipeline.eri.celery.queues import *
from celery import Celery

app = Celery("proj")

app.config_from_object("django.conf:settings")

INSTALLED_APPS = [
    ...
    "pipeline",
    "pipeline.engine",
    "pipeline.component_framework",
    "pipeline.eri",
    ...
]

在 ** easy_pipeline **目錄下初始化數據庫:

python manage.py migrate

(選項二:有Django項目需要使用流程引擎) 如果你有現成的PipeLine項目需要使用此流程引擎,請在項目的** settings.py **下添加如下配置:

from pipeline.eri.celery.queues import *
from celery import Celery

app = Celery("proj")

app.config_from_object("django.conf:settings")

INSTALLED_APPS = [
    ...
    "pipeline",
    "pipeline.engine",
    "pipeline.component_framework",
    "pipeline.eri",
    ...
]

然后重新執行migrate,生成pipeline相關的流程模型:

python manage.py migrate

migrate 執行完畢后會如下圖所示:

圖片

由于是在原有項目上使用流程引擎,可能會遇到一些版本不匹配的問題,如果遇到報錯,請排查解決或到藍鯨官網上進行詢問。

3. 簡單的流程例子

首先在項目目錄下啟動 celery worker:

python manage.py celery worker -Q er_execute,er_schedule --pool=solo -l info

啟動成功類似下圖所示:

圖片

(注意) 如果你是在你的原有Django項目上做改造,它并不一定能夠順利地啟動成功,這是因為Pipeline使用了 Django 2.2.24,會存在許多版本不兼容的情況。如果遇到報錯,請排查解決或到藍鯨官網上進行詢問。

在下面的例子中,我們將會創建并執行一個簡單的流程:

圖片

3.1 創建流程APP

在 bamboo_pipeline 中,一個流程由多個組件組成,官方推薦使用APP統一管控組件:

python manage.py create_plugins_app big_calculator

該命令會在 Django 工程根目錄下生成擁有以下目錄結構的 APP:

big_calculator
├── __init__.py
├── components
│   ├── __init__.py
│   └── collections
│   ├── __init__.py
│   └── plugins.py
├── migrations
│   └── __init__.py
└── static
    └── big_calculator
        └── plugins.js

別忘了把新創建的這個插件添加到 Django 配置的 **INSTALLED_APPS **中:

INSTALLED_APPS = (
    ...
    'big_calculator',
    ...
)

3.2 編寫流程的Service原子

組件服務 ** Service是組件的核心,Service ** 定義了組件被調用時執行的邏輯,下面讓我們實現一個計算傳入的參數n的階乘,并把結果寫到輸出中的 ** Service ** ,在 **big_calculator/components/collections/plugins.py ** 中輸入以下代碼:

import math
from pipeline.core.flow.activity import Service


class FactorialCalculateService(Service):

    def execute(self, data, parent_data):
        """
        組件被調用時的執行邏輯
        :param data: 當前節點的數據對象
        :param parent_data: 該節點所屬流程的數據對象
        :return:
        """
        n = data.get_one_of_inputs('n')
        if not isinstance(n, int):
            data.outputs.ex_data = 'n must be a integer!'
            return False

        data.outputs.factorial_of_n = math.factorial(n)
        return True

    def inputs_format(self):
        """
        組件所需的輸入字段,每個字段都包含字段名、字段鍵、字段類型及是否必填的說明。
        :return:必須返回一個 InputItem 的數組,返回的這些信息能夠用于確認該組件需要獲取什么樣的輸入數據。
        """
        return [
            Service.InputItem(name='integer n', key='n', type='int', required=True)
        ]

    def outputs_format(self):
        """
        組件執行成功時輸出的字段,每個字段都包含字段名、字段鍵及字段類型的說明
        :return: 必須返回一個 OutputItem 的數組, 便于在流程上下文或后續節點中進行引用
        """
        return [
            Service.OutputItem(name='factorial of n', key='factorial_of_n', type='int')
        ]

首先我們繼承了 ** Service基類,并實現了execute() ** 和 **outputs_format() ** 這兩個方法,他們的作用如下:

  1. execute :組件被調用時執行的邏輯。接收 data 和 parent_data 兩個參數。
    其中,data 是當前節點的數據對象,這個數據對象存儲了用戶傳遞給當前節點的參數的值以及當前節點輸出的值。parent_data 則是該節點所屬流程的數據對象,通常會將一些全局使用的常量存儲在該對象中,如當前流程的執行者、流程的開始時間等。
  2. outputs_format :組件執行成功時輸出的字段,每個字段都包含字段名、字段鍵及字段類型的說明。這個方法必須返回一個 OutputItem 的數組,返回的這些信息能夠用于確認某個組件在執行成功時輸出的數據,便于在流程上下文或后續節點中進行引用。
  3. inputs_format :組件所需的輸入字段,每個字段都包含字段名、字段鍵、字段類型及是否必填的說明。這個方法必須返回一個 InputItem 的數組,返回的這些信息能夠用于確認某個組件需要獲取什么樣的輸入數據。

下面我們來看一下 **execute() **方法內部執行的邏輯,首先我們嘗試從當前節點數據對象的輸出中獲取輸入參數n,如果獲取到的參數不是一個 int 實例,那么我們會將異常信息寫入到當前節點輸出的 **ex_data **字段中, 這個字段是引擎內部的保留字段,節點執行失敗時產生的異常信息都應該寫入到該字段中 。隨后我們返回 ** False ** 代表組件本次執行失敗,隨后節點會進入失敗狀態:

n = data.get_one_of_inputs('n')
if not isinstance(n, int):
    data.outputs.ex_data = 'n must be a integer!'
    return False

若獲取到的 n 是一個正常的 int,我們就調用 **math.factorial() **函數來計算 n 的階乘,計算完成后,我們會將結果寫入到輸出的 factorial_of_n 字段中,以供流程中的其他節點使用:

data.outputs.factorial_of_n = math.factorial(n)
return True

3.3 編寫流程組件,綁定Service原子

完成 Service 的編寫后,我們需要將其與一個 Component 綁定起來,才能夠注冊到組件庫中,在**big_calculatorcomponents__init__.py **文件下添加如下的代碼:

import logging
from pipeline.component_framework.component import Component
from big_calculator.components.collections.plugins import FactorialCalculateService

logger = logging.getLogger('celery')


class FactorialCalculateComponent(Component):
    name = 'FactorialCalculateComponent'
    code = 'fac_cal_comp'
    bound_service = FactorialCalculateService

我們定義了一個繼承自基類 **Component **的類 FactorialCalculateComponent ,他擁有以下屬性:

1.name:組件名。
2.code:組件代碼,這個代碼必須是全局唯一的。
3.bound_service:與該組件綁定的 Service。

這樣一來,我們就完成了一個流程原子的開發。

3.4 生成流程,測試剛編寫的組件

在 big_calculatortest.py 寫入以下內容,生成一個流程,測試剛剛編寫的組件:

# Python 實用寶典
# 2021/06/20

import time

from bamboo_engine.builder import *
from big_calculator.components import FactorialCalculateComponent
from pipeline.eri.runtime import BambooDjangoRuntime
from bamboo_engine import api
from bamboo_engine import builder


def bamboo_playground():
    """
    測試流程引擎
    """
    # 使用 builder 構造出流程描述結構
    start = EmptyStartEvent()
    # 這里使用 我們剛創建好的n階乘組件
    act = ServiceActivity(component_code=FactorialCalculateComponent.code)
    # 傳入參數
    act.component.inputs.n = Var(type=Var.PLAIN, value=4)
    end = EmptyEndEvent()

    start.extend(act).extend(end)

    pipeline = builder.build_tree(start)
    api.run_pipeline(runtime=BambooDjangoRuntime(), pipeline=pipeline)

    # 等待 1s 后獲取流程執行結果
    time.sleep(1)

    result = api.get_execution_data_outputs(BambooDjangoRuntime(), act.id).data

    print(result)

隨后,在命令行輸入:

python manage.py shell

打開 django console, 輸入以下命令,執行此流程:

from big_calculator.test import bamboo_playground
bamboo_playground()

流程運行完后,獲取節點的執行結果,可以看到,該節點輸出了 factorial_of_n,并且值為 24(4 * 3 * 2 *1),這正是我們需要的效果:

{'_loop': 0, '_result': True, 'factorial_of_n': 24}

恭喜你,你已經成功的創建了一個流程并把它運行起來了!在這期間你可能會遇到不少的坑,建議嘗試先自行解決,如果實在無法解決,可以前往 標準運維 倉庫提 issues,或者前往藍鯨智云官網提問。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • WINDOWS
    +關注

    關注

    4

    文章

    3551

    瀏覽量

    88801
  • 參數
    +關注

    關注

    11

    文章

    1838

    瀏覽量

    32261
  • 編輯器
    +關注

    關注

    1

    文章

    806

    瀏覽量

    31190
  • python
    +關注

    關注

    56

    文章

    4797

    瀏覽量

    84750
收藏 人收藏

    評論

    相關推薦

    Python中的流程控制

    流程控制無非就是if else之類的控制語句,今天我們來看一下Python中的流程控制會有什么不太一樣的地方。
    發表于 06-28 08:54

    python基礎語法及流程控制

    爬蟲復習1.python基礎python基礎語法 流程控制 函數封裝2.防爬措施整體防爬User-AgentrefererIP代理池Cookie代理池 各自防爬數據內部動態加載網頁設置有干擾項標簽
    發表于 08-31 07:41

    什么是Python中的流程控制?

    什么是Python中的流程控制?
    發表于 10-09 07:24

    Pipeline ADCs Come of Age

    Pipeline ADCs Come of Age Abstract: In the mid 1970s, a new data converter architecture
    發表于 04-16 16:21 ?1126次閱讀
    <b class='flag-5'>Pipeline</b> ADCs Come of Age

    Pipeline ADCs Come of Age

    and mixed-signal community, called pipeline ADCs. The following article takes the knowledge of advantages and disadvantages of the pipeline
    發表于 04-25 10:22 ?1091次閱讀
    <b class='flag-5'>Pipeline</b> ADCs Come of Age

    LCD漢字編排軟件

    LCD漢字編排軟件LCD漢字編排軟件LCD漢字編排軟件LCD漢字編排軟件
    發表于 12-28 14:31 ?7次下載

    python爬蟲入門教程之python爬蟲視頻教程分布式爬蟲打造搜索引擎

    本文檔的主要內容詳細介紹的是python爬蟲入門教程之python爬蟲視頻教程分布式爬蟲打造搜索引擎
    發表于 08-28 15:32 ?29次下載

    Vivado綜合引擎的增量綜合流程

    從 Vivado 2019.1 版本開始,Vivado 綜合引擎就已經可以支持增量流程了。這使用戶能夠在設計變化較小時減少總的綜合運行時間。
    發表于 07-21 11:02 ?1695次閱讀

    什么是流程/規則編排

    以上兩種基本代表了傳統的編排思想,在簡單的例子下,看起來也是非常直觀,但,當變動發生時,尤其是需要靈活調整的場景,他們的表現又如何呢?
    的頭像 發表于 09-21 10:04 ?1976次閱讀

    Python一鍵轉化代碼為流程

    而今天我們要介紹的項目,就是基于Python和Graphviz開發的,能將源代碼轉化為流程圖的工具:pycallgraph。
    的頭像 發表于 02-24 11:19 ?4069次閱讀
    <b class='flag-5'>Python</b>一鍵轉化代碼為<b class='flag-5'>流程</b>圖

    一圖讀懂CodeArts Pipeline全新升級,5大特性使能企業研發治理

    2023 年2月27日,華為云正式發布流水線服務 CodeArts Pipeline ,旨在提升編排體驗,開放插件平臺,并提供標準化的DevOps企業治理模型,將華為公司內的優秀研發實踐賦能給伙伴
    的頭像 發表于 03-25 07:50 ?901次閱讀
    一圖讀懂CodeArts <b class='flag-5'>Pipeline</b>全新升級,5大特性使能企業研發治理

    開箱即用!教你如何正確使用華為云CodeArts Pipeline

    軟件持續交付流水線是一個可視化的自動化任務編排調度平臺,串聯編譯構建、代碼檢查、自動化測試、部署發布等任務,承載軟件從代碼提交到發布上線全自動化流程。一次配置后即可重復觸發執行,避免頻繁低效
    的頭像 發表于 08-30 11:20 ?1343次閱讀
    開箱即用!教你如何正確使用華為云CodeArts <b class='flag-5'>Pipeline</b>!

    Python 如何一鍵轉化代碼為流程

    Graphviz是一個可以對圖進行自動布局的繪圖工具,由貝爾實驗室開源。我們在上次 Python 快速繪制畫出漂亮的系統架構圖 提到的diagrams,其內部的編排邏輯就用到了這個開源工具包。 而今
    的頭像 發表于 11-01 10:39 ?2225次閱讀
    <b class='flag-5'>Python</b> 如何一鍵轉化代碼為<b class='flag-5'>流程</b>圖

    什么是pipeline?Go中構建流數據pipeline的技術

    本文介紹了在 Go 中構建流數據pipeline的技術。 處理此類pipeline中的故障很棘手,因為pipeline中的每個階段可能會阻止嘗試向下游發送值,并且下游階段可能不再關心傳入的數據。
    的頭像 發表于 03-11 10:16 ?624次閱讀

    行云流水線 滿足你對工作流編排的一切幻想~skr

    流水線模型 眾所周知,DevOps流水線(DevOps pipeline)的本質是實現自動化工作流程,用于支持軟件開發、測試和部署的連續集成、交付和部署(CI/CD)實踐。它是DevOps方法論
    的頭像 發表于 08-05 13:42 ?289次閱讀
    主站蜘蛛池模板: 亚洲 欧美 国产 综合五月天| 9久久99久久久精品齐齐综合色圆 9久高清在线不卡免费无吗视频 | 精品三级在线观看| 亚洲视频在线观看地址| 美女张开腿露出尿口扒开来摸动漫| ⅹxx日本护土| 窝窝色资源站| 亚洲精品国产AV成人毛片| xxx粗大长欧美| 妞干网手机免费视频| 扒开老师大腿猛进AAA片邪恶| 收集最新中文国产中文字幕| 国模玲玲自拍337p| 同时和两老师双飞| 精子网久久国产精品| 99久久免费精品| 亚洲 欧美 中文 日韩 另类 | 97超级碰久久久久香蕉人人| 色狠狠色综合吹潮| 国产 交换 丝雨 巅峰| 亚洲人交性视频| 欧美男男网站免费观看videos| 99久久综合| 性生片30分钟| 欧美性猛交AAA片| 红豆视频免费资源观看| chinese帅哥gv在线看| 亚洲精品青青草原avav久久qv | 青娱乐国产精品视频| 吉吉影音先锋av资源网| 成人毛片一区二区三区| 伊人久久大香线蕉综合色啪 | 亚洲成人三级| 秋霞电影网午夜鲁丝片| 久草青青在线| 国产成人精品免费视频大全办公室 | 丝袜美女自摸| 暖暖视频免费观看社区| 国产精品 中文字幕 亚洲 欧美| 最近免费中文字幕完整版HD| 亚洲国产在线综合018|