生產級編排AI工作流套件:Flyte全面使用指南 — Core concepts Launch plans

生產級編排AI工作流套件:Flyte全面使用指南 — Core concepts Launch plans

Flyte 是一個開源編排器,用于構建生產級數據和機器學習流水線。它以 Kubernetes 作為底層平臺,注重可擴展性和可重復性。借助 Flyte,用戶團隊可以使用 Python SDK 構建流水線,并將其無縫部署在云端和本地環境中,從而實現分布式處理和高效的資源利用。

文中內容僅限技術學習與代碼實踐參考,市場存在不確定性,技術分析需謹慎驗證,不構成任何投資建議。

Flyte

啟動計劃

啟動計劃是工作流調用的模板。它將以下元素整合在一起:

  • 一個工作流
  • 啟動該工作流所需的(可能不完整)輸入參數集合
  • 可選的通知和調度計劃

當調用時,啟動計劃會傳遞輸入參數來啟動工作流。如果啟動計劃未包含所有必需的工作流輸入參數,則需要在執行時提供額外的輸入參數。

默認啟動計劃

每個工作流自動附帶一個_默認啟動計劃_。該啟動計劃不定義任何默認輸入參數,因此所有參數必須在執行時提供。默認啟動計劃始終與其對應工作流同名。

啟動計劃具有版本控制

與任務和工作流一樣,啟動計劃具有版本控制。可以更新啟動計劃來更改輸入參數集合、調度計劃或通知配置。每次更新都會創建新的啟動計劃版本。

自定義啟動計劃

除了默認啟動計劃外,可以為任何工作流定義額外的啟動計劃。通常,一個工作流可以關聯多個啟動計劃,但每個啟動計劃只能關聯一個特定工作流。

查看工作流的啟動計劃

要查看指定工作流的啟動計劃,在UI中導航至工作流頁面并點擊Launch Workflow。從Launch Plan下拉菜單中可選擇用于啟動工作流的啟動計劃。默認情況下會選中默認啟動計劃。如果未為該工作流定義任何自定義啟動計劃,則僅顯示默認計劃。若已定義自定義啟動計劃,它們將與默認計劃一起顯示在下拉菜單中。更多細節請參考運行啟動計劃。

注冊啟動計劃

通過命令行注冊啟動計劃

大多數情況下,啟動計劃與項目代碼中的工作流和任務一起定義,并通過CLI與其他實體一起批量注冊(參見運行代碼)。

使用FlyteRemote在Python中注冊啟動計劃

與所有Flyte命令行操作類似,您也可以通過編程方式使用FlyteRemote注冊啟動計劃,具體方法是調用FlyteRemote.register_launch_plan

注冊結果

當上述代碼注冊到Flyte時,會創建四個對象:

  • 任務 workflows.launch_plan_example.my_task
  • 工作流 workflows.launch_plan_example.my_workflow
  • 默認啟動計劃 workflows.launch_plan_example.my_workflow(注意其名稱與工作流相同)
  • 自定義啟動計劃 my_workflow_custom_lp(即我們在代碼中定義的那個)

修改啟動計劃

通過修改代碼中的定義并重新注冊來更改啟動計劃。當重新注冊具有相同項目(project)、域(domain)和名稱的啟動計劃時,將創建該啟動計劃的新版本。

定義啟動計劃

您可以使用 LaunchPlan 類 定義啟動計劃。

以下是一個定義啟動計劃的簡單示例:

import flytekit as fl@fl.workflow
def my_workflow(a: int, b: str) -> str:return f"Result: {a} and {b}"# 創建默認啟動計劃
default_lp = @fl.LaunchPlan.get_or_create(workflow=my_workflow)# 創建命名啟動計劃
named_lp = @fl.LaunchPlan.get_or_create(workflow=my_workflow,name="my_custom_launch_plan"
)

默認與固定輸入

默認輸入可在執行時被覆蓋,而固定輸入不可修改。

import flytekit as fl# 帶默認輸入的啟動計劃
lp_with_defaults = fl.LaunchPlan.get_or_create(workflow=my_workflow,name="with_defaults",default_inputs={"a": 42, "b": "default_value"}
)# 帶固定輸入的啟動計劃
lp_with_fixed = fl.LaunchPlan.get_or_create(workflow=my_workflow,name="with_fixed",fixed_inputs={"a": 100}  # 'a' 將始終為 100,只有 'b' 可被指定
)# 組合默認與固定輸入
lp_combined = fl.LaunchPlan.get_or_create(workflow=my_workflow,name="combined_inputs",default_inputs={"b": "default_string"},fixed_inputs={"a": 200}
)

定時執行

import fl
from datetime import timedelta
from flytekit.core.schedule import CronSchedule, FixedRate# 使用 cron 調度(每周一 UTC 時間 10:00 AM 運行)
cron_lp = fl.LaunchPlan.get_or_create(workflow=my_workflow,name="weekly_monday",default_inputs={"a": 1, "b": "weekly"},schedule=CronSchedule(schedule="0 10 * * 1",  # Cron 表達式: 分鐘 小時 日 月 周幾kickoff_time_input_arg=None)
)# 使用固定頻率調度(每 6 小時運行)
fixed_rate_lp = fl.LaunchPlan.get_or_create(workflow=my_workflow,name="every_six_hours",default_inputs={"a": 1, "b": "periodic"},schedule=FixedRate(duration=timedelta(hours=6))
)

標簽與注解

標簽和注解有助于組織管理,可用于過濾或添加元數據。

import fl
from flytekit.models.common import Labels, Annotations# 添加標簽和注解
lp_with_metadata = fl.LaunchPlan.get_or_create(workflow=my_workflow,name="with_metadata",default_inputs={"a": 1, "b": "metadata"},labels=Labels({"team": "data-science", "env": "staging"}),annotations=Annotations({"description": "測試用啟動計劃", "owner": "jane.doe"})
)

執行參數

import fl# 設置最大并行度限制并發任務執行
lp_with_parallelism = fl.LaunchPlan.get_or_create(workflow=my_workflow,name="with_parallelism",default_inputs={"a": 1, "b": "parallel"},max_parallelism=10  # 最多允許 10 個任務節點并發執行
)# 禁用該啟動計劃的執行緩存
lp_no_cache = fl.LaunchPlan.get_or_create(workflow=my_workflow,name="no_cache",default_inputs={"a": 1, "b": "fresh"},overwrite_cache=True  # 總是全新執行,忽略緩存結果
)# 注冊時自動激活
lp_auto_activate = fl.LaunchPlan.get_or_create(workflow=my_workflow,name="auto_active",default_inputs={"a": 1, "b": "active"},auto_activate=True  # 注冊后立即激活啟動計劃
)

安全與認證

我們可以覆蓋用于執行啟動計劃的認證角色(IAM 角色或 Kubernetes 服務賬戶)。

import fl
from flytekit.models.common import AuthRole
from flytekit import SecurityContext# 為啟動計劃設置認證角色
lp_with_auth = fl.LaunchPlan.get_or_create(workflow=my_workflow,name="with_auth",default_inputs={"a": 1, "b": "secure"},auth_role=AuthRole(assumable_iam_role="arn:aws:iam::12345678:role/my-execution-role")
)# 設置安全上下文
lp_with_security = fl.LaunchPlan.get_or_create(workflow=my_workflow,name="with_security",default_inputs={"a": 1, "b": "context"},security_context=SecurityContext(run_as=SecurityContext.K8sServiceAccount(name="my-service-account"))
)

原始輸出數據配置

from flytekit.models.common import RawOutputDataConfig# 配置大型輸出存儲位置
lp_with_output_config = LaunchPlan.get_or_create(workflow=my_workflow,name="with_output_config",default_inputs={"a": 1, "b": "output"},raw_output_data_config=RawOutputDataConfig(output_location_prefix="s3://my-bucket/workflow-outputs/")
)

完整整合示例

以下是一個較為全面的示例。該自定義啟動計劃包含:

comprehensive_lp = LaunchPlan.get_or_create(workflow=my_workflow,name="comprehensive_example",default_inputs={"b": "configurable"},fixed_inputs={"a": 42},schedule=CronSchedule(schedule="0 9 * * *"),  # 每日 UTC 時間 9:00 AMnotifications=[\Notification(\phases=["SUCCEEDED", "FAILED"],\email=EmailNotification(recipients_email=["team@example.com"])\)\],labels=Labels({"env": "production", "team": "data"}),annotations=Annotations({"description": "每日數據處理"}),max_parallelism=20,overwrite_cache=False,auto_activate=True,auth_role=AuthRole(assumable_iam_role="arn:aws:iam::12345678:role/workflow-role"),raw_output_data_config=RawOutputDataConfig(output_location_prefix="s3://results-bucket/daily-run/")
)

這些示例展示了 Flyte 中啟動計劃的靈活性,您可以根據工作流需求自定義執行參數、輸入、調度等多種配置。

查看啟動計劃

通過用戶界面查看啟動計劃

在側邊欄選擇Launch Plans,將顯示項目與域中所有已注冊啟動計劃的列表:

啟動計劃列表

您可以通過以下方式篩選:

  • 按名稱搜索啟動計劃
  • 過濾僅顯示已歸檔的啟動計劃

啟動計劃表格列定義如下:

  • 名稱:啟動計劃的名稱。點擊可查看具體詳情
  • 觸發器
    • 若啟動計劃處于激活狀態,會顯示綠色Active徽章。激活狀態下,所有關聯的調度將生效并按計劃觸發
    • 顯示是否包含觸發器。可通過右上角Has Triggers復選框過濾含觸發器的啟動計劃
  • 最后執行:最近一次執行的時間戳(包含調度觸發、手動觸發等所有方式)
  • 最近10次執行:以可視化方式展示最近10次執行記錄(包含所有觸發方式)

點擊列表條目可進入具體啟動計劃視圖:

啟動計劃詳情

在此界面可查看:

  • 啟動計劃詳情(最新版本)
    • 預期輸入:啟動計劃的輸入輸出類型
    • 固定輸入:顯示預定義的輸入值(如有)
  • 啟動計劃版本:該計劃的所有歷史版本列表
  • 所有執行記錄:該計劃的所有執行歷史

右上角顯示激活狀態(若激活則顯示具體激活版本),并提供版本切換或完全停用的控制選項。詳見激活與停用

通過uctl命令行查看啟動計劃

查看項目與域中所有啟動計劃:

$ uctl get launchplans \--project <project-id> \--domain <domain>

查看具體啟動計劃:

$ uctl get launchplan \--project <project-id> \--domain <domain> \<launch-plan-name>

更多詳情請參考Uctl CLI文檔

通過Python的FlyteRemote查看啟動計劃

使用FlyteRemote.client.list_launch_plans_paginated方法獲取啟動計劃列表。

通知

一個啟動計劃(launch plan)可以關聯一個或多個通知,當該啟動計劃關聯的工作流(workflow)執行完成時,這些通知會被觸發。

共有三種類型的通知:

  • Email: 向指定收件人發送電子郵件
  • PagerDuty: 向配置的PagerDuty服務發送通知(需指定接收方)。PagerDuty將根據您的配置轉發通知
  • Slack: 向指定Slack頻道的關聯郵箱地址發送通知。此功能要求預先配置Slack賬戶以接收通知

可以根據工作流執行的不同最終狀態發送對應的通知。可選狀態包括:

  • WorkflowExecutionPhase.ABORTED(執行中止)
  • WorkflowExecutionPhase.FAILED(執行失敗)
  • WorkflowExecutionPhase.SUCCEEDED(執行成功)
  • WorkflowExecutionPhase.TIMED_OUT(執行超時)

示例:

from datetime import datetimeimport flytekit as flfrom flytekit import (WorkflowExecutionPhase,Email,PagerDuty,Slack
)@fl.task
def add_numbers(a: int, b: int, c: int) -> int:return a + b + c@fl.task
def generate_message(s: int, kickoff_time: datetime) -> str:return f"sum: {s} at {kickoff_time}"@fl.workflow
def my_workflow(a: int, b: int, c: int, kickoff_time: datetime) -> str:return generate_message(add_numbers(a, b, c),kickoff_time,)fl.LaunchPlan.get_or_create(workflow=my_workflow,name="my_workflow_custom_lp",fixed_inputs={"a": 3},default_inputs={"b": 4, "c": 5},notifications=[\Email(\phases=[WorkflowExecutionPhase.FAILED],\recipients_email=["me@example.com", "you@example.com"],\),\PagerDuty(\phases=[WorkflowExecutionPhase.SUCCEEDED],\recipients_email=["myboss@example.com"],\),\Slack(\phases=[\WorkflowExecutionPhase.SUCCEEDED,\WorkflowExecutionPhase.ABORTED,\WorkflowExecutionPhase.TIMED_OUT,\],\recipients_email=["your_slack_channel_email"],\),\],
)

調度計劃

啟動計劃允許您對工作流的定時調用進行調度。一個啟動計劃可以關聯一個或多個調度方案,但同一時間最多只能有一個調度處于激活狀態。如果在啟動計劃上激活了調度,系統將按照預定時間自動調用工作流,并使用啟動計劃提供的輸入參數。

要為啟動計劃添加調度方案,請按以下方式向啟動計劃添加調度對象:

from datetime import timedeltaimport flytekit as fl
from flytekit import FixedRate@fl.task
def my_task(a: int, b: int, c: int) -> int:return a + b + c@fl.workflow
def my_workflow(a: int, b: int, c: int) -> int:return my_task(a=a, b=b, c=c)fl.LaunchPlan.get_or_create(workflow=my_workflow,name="my_workflow_custom_lp",fixed_inputs={"a": 3},default_inputs={"b": 4, "c": 5},schedule=FixedRate(duration=timedelta(minutes=10))
)

這里我們指定了FixedRate調度方案,系統將每10分鐘調用一次工作流。固定頻率調度也可以使用天數或小時數來定義。

或者,您也可以指定CronSchedule:

import flytekit as fl
from flytekit import CronSchedule@fl.task
def my_task(a: int, b: int, c: int) -> int:return a + b + c@fl.workflow
def my_workflow(a: int, b: int, c: int) -> int:return my_task(a=a, b=b, c=c)fl.LaunchPlan.get_or_create(workflow=my_workflow,name="my_workflow_custom_lp",fixed_inputs={"a": 3},default_inputs={"b": 4, "c": 5},schedule=CronSchedule(schedule="*/10 * * * *")
)

kickoff_time_input_arg

FixedRateCronSchedule都可以接受名為kickoff_time_input_arg的可選參數。

該參數用于指定工作流輸入參數的名稱。每次系統通過此調度調用工作流時,調用的時間將通過指定的參數傳遞給工作流。例如:

from datetime import datetime, timedeltaimport flytekit as fl
from flytekit import FixedRate@fl.task
def my_task(a: int, b: int, c: int) -> int:return a + b + c@fl.workflow
def my_workflow(a: int, b: int, c: int, kickoff_time: datetime ) -> str:return f"sum: {my_task(a=a, b=b, c=c)} at {kickoff_time}"fl.LaunchPlan.get_or_create(workflow=my_workflow,name="my_workflow_custom_lp",fixed_inputs={"a": 3},default_inputs={"b": 4, "c": 5},schedule=FixedRate(duration=timedelta(minutes=10),kickoff_time_input_arg="kickoff_time")
)

在此示例中,每次調度調用my_workflow時,調用時間都會通過kickoff_time參數傳遞。

激活與停用

您可以為啟動計劃設置激活/停用狀態。具體規則如下:

  • 在具有相同名稱的啟動計劃版本中,最多只能有一個版本處于激活狀態,其他所有版本均為停用狀態

  • 若激活包含執行計劃的啟動計劃版本,其關聯的執行計劃也會自動激活,工作流將按照該計劃自動觸發

  • 當包含執行計劃的啟動計劃版本處于停用狀態時,其關聯的執行計劃也會停用,不會用于觸發工作流程

未關聯執行計劃的啟動計劃也可以設置激活版本。對于此類非計劃型啟動計劃,激活狀態可作為版本標識,用于區分不同版本。例如,管理邏輯可依據此狀態決定使用哪個版本進行新調用。

新注冊的啟動計劃首個版本默認為停用狀態。若該版本包含執行計劃,該計劃同樣處于停用狀態。一旦激活,該版本將保持激活狀態,即使后續注冊新版本也不會改變其狀態。

包含執行計劃的啟動計劃版本可通過以下方式激活:用戶界面、uctl命令行工具或FlyteRemote

通過用戶界面激活/停用啟動計劃

激活操作步驟:

  1. 進入啟動計劃視圖
  2. 點擊屏幕右上角的添加激活啟動計劃按鈕:

激活計劃

  1. 在彈出的模態框中選擇要激活的版本:

激活計劃

該列表僅顯示包含執行計劃的版本。注意同一時間只能激活一個版本(即最多一個執行計劃)。

選擇版本后點擊更新即可激活該版本及其執行計劃。系統將根據執行計劃定期觸發工作流。

注意

  • 未關聯執行計劃的啟動計劃無法通過UI激活
  • UI不支持管理無執行計劃的啟動計劃狀態,需使用uctlFlyteRemote

停用操作步驟:

  1. 定位到包含激活計劃的啟動計劃
  2. 點擊Active launch plan旁的**…**圖標
  3. 選擇"停用"選項:

停用計劃

  1. 在確認模態框中完成停用操作

注意

  • 未關聯執行計劃的啟動計劃無法通過UI停用
  • 需使用uctlFlyteRemote管理無執行計劃的啟動計劃狀態

使用uctl命令行工具管理啟動計劃狀態

激活命令:

$ uctl update launchplan \--activate \--project <project-id> \--domain <domain> \<launch-plan-name> \--version <launch-plan-version>

停用命令:

$ uctl update launchplan \--deactivate \--project <project-id> \--domain <domain> \<launch-plan-name> \--version <launch-plan-version>

詳細說明請參考Uctl CLI文檔

使用Python的FlyteRemote管理啟動計劃狀態

激活示例代碼:

from union.remote import FlyteRemote
from flytekit.configuration import Configremote = FlyteRemote(config=Config.auto(), default_project=<project-id>, default_domain=<domain>)
launch_plan = remote.fetch_launch_plan(ame=<launch-plan-name>, version=<launch-plan-version>).id
remote.client.update_launch_plan(launch_plan.id, "ACTIVE")

停用示例代碼:

from union.remote import FlyteRemote
from flytekit.remote import Configremote = FlyteRemote(config=Config.auto(), default_project=<project-id>, default_domain=<domain>)
launch_plan = remote.fetch_launch_plan(ame=<launch-plan-name>, version=<launch-plan-version>)
remote.client.update_launch_plan(launch_plan.id, "INACTIVE")

運行啟動計劃

在用戶界面中運行啟動計劃

要調用啟動計劃,請進入工作流列表,選擇目標工作流,點擊啟動工作流。在新執行對話框中,從啟動計劃下拉菜單中選擇目標啟動計劃,然后點擊啟動

使用 uctl 命令行運行啟動計劃

要通過命令行調用啟動計劃,首先生成啟動計劃的執行規范文件:

$ uctl get launchplan \--project <project-id>--domain <domain> \<launch-plan-name> \--execFile <execution-spec-file-name>.yaml

然后使用以下命令執行啟動計劃:

$ uctl create execution \--project <project-id> \--domain <domain> \--execFile <execution-spec-file-name>.yaml

更多細節請參閱 Uctl CLI。

使用 FlyteRemote 在 Python 中運行啟動計劃

以下代碼使用 FlyteRemote 執行啟動計劃:

import flytekit as fl
from flytekit.remote import Configremote = fl.FlyteRemote(config=Config.auto(), default_project=<project-id>, default_domain=<domain>)
launch_plan = remote.fetch_launch_plan(name=<launch-plan-name>, version=<launch-plan-version>)
remote.execute(launch_plan, inputs=<inputs>)

更多細節請參閱 FlyteRemote。

子啟動計劃

上述調用示例假設您希望將啟動計劃作為項目中的頂級實體運行。但您也可以從_工作流內部_調用啟動計劃,創建_子啟動計劃_。這將使被調用的啟動計劃觸發其對應工作流,并向該工作流傳遞指定的參數。

這與子工作流的情況不同——當您在一個工作流函數中調用另一個工作流函數時,子工作流會成為父工作流執行圖的一部分,并共享相同的 execution ID 和執行上下文。而調用子啟動計劃時,會啟動一個完整的頂級工作流,該工作流擁有獨立的 execution ID 和執行上下文。

更多細節請參閱子工作流與子啟動計劃。

引用啟動計劃

引用啟動計劃是指引用先前已定義、序列化并注冊的啟動計劃。您可以跨項目引用其他啟動計劃,創建使用他人聲明的啟動計劃的工作流。

創建引用啟動計劃時,請務必驗證工作流接口是否與引用工作流的接口一致。

引用啟動計劃無法在本地運行。若需本地測試,請使用模擬實現。

示例

本例演示如何為Flytesnacks倉庫中的simple_wf工作流創建引用啟動計劃。

  1. 克隆Flytesnacks倉庫:

    git clone git@github.com:flyteorg/flytesnacks.git
    
  2. 進入basics目錄:

    cd flytesnacks/examples/basics
    
  3. 注冊simple_wf工作流:

    pyflyte register --project flytesnacks --domain development --version v1 basics/workflow.py.
    
  4. 創建simple_wf_ref_lp.py文件并復制以下代碼:

    import flytekit as fl
    from flytekit import reference_launch_plan@reference_launch_plan(project="flytesnacks",domain="development",name="basics.workflow.simple_wf",version="v1",
    )def simple_wf_lp(x: list[int], y: list[int]
    ) -> float:return 1.0@fl.workflow
    def run_simple_wf() -> float:x = [-8, 2, 4]y = [-2, 4, 7]return simple_wf_lp(x=x, y=y)
    
  5. 注冊run_simple_wf工作流:

    pyflyte register simple_wf_ref_lp.py
    
  6. 在Flyte UI中運行run_simple_wf工作流

風險提示與免責聲明
本文內容基于公開信息研究整理,不構成任何形式的投資建議。歷史表現不應作為未來收益保證,市場存在不可預見的波動風險。投資者需結合自身財務狀況及風險承受能力獨立決策,并自行承擔交易結果。作者及發布方不對任何依據本文操作導致的損失承擔法律責任。市場有風險,投資須謹慎。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/905831.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905831.shtml
英文地址,請注明出處:http://en.pswp.cn/news/905831.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 之類型注解

類型注解允許開發者顯式地聲明變量、函數參數和返回值的類型。但是加不加注解對于程序的運行沒任何影響&#xff08;是非強制的&#xff0c;且類型注解不影響運行時行為&#xff09;&#xff0c;屬于 有了挺好&#xff0c;沒有也行。但是大型項目按照規范添加注解的話&#xff…

rocketmq并發消費

netty的handler 在netty的網絡模型中&#xff0c;在想bootstrap設置handler時&#xff0c; 都是在等待 事件 的到來&#xff0c;才會被調用的方法&#xff0c;都是被動的&#xff0c; 服務端等待 request 的到來&#xff0c;進行read, 然后主動調用writeAndFlush寫出去。 客戶…

React 播客專欄 Vol.9|React + TypeScript 項目該怎么起步?從 CRA 到配置全流程

&#x1f44b; 歡迎回到《前端達人 React 播客書單》第 9 期&#xff08;正文內容為學習筆記摘要&#xff0c;音頻內容是詳細的解讀&#xff0c;方便你理解&#xff09;&#xff0c;請點擊下方收聽 你是不是常在網上看到 .tsx 項目、Babel、Webpack、tsconfig、Vite、CRA、ESL…

【PmHub后端篇】PmHub中基于自定義注解和AOP的服務接口鑒權與內部認證實現

1 引言 在現代軟件開發中&#xff0c;尤其是在微服務架構下&#xff0c;服務接口的鑒權和內部認證是保障系統安全的重要環節。本文將詳細介紹PmHub中如何利用自定義注解和AOP&#xff08;面向切面編程&#xff09;實現服務接口的鑒權和內部認證&#xff0c;所涉及的技術知識點…

芯片測試之X-ray測試

原理&#xff1a; X-ray是利用陰極射線管產生高能量電子與金屬靶撞擊&#xff0c;在撞擊過程中&#xff0c;因電子突然減速&#xff0c;其損失的動能會以X-Ray形式放出。而對于樣品無法以外觀方式觀測的位置&#xff0c;利用X-Ray穿透不同密度物質后其光強度的變化&#xff0c;…

QBasic 一款古老的編程語言在現代學習中的價值(附程序)

QBasic&#xff08;Quick Beginner’s All-purpose Symbolic Instruction Code&#xff09;是微軟公司于 1991 年推出的一款簡單易學的編程語言&#xff0c;作為BASIC語言的變種&#xff0c;它曾廣泛應用于教育領域和初學者編程入門。盡管在當今Python、Java等現代編程語言主導…

【八股戰神篇】Java高頻基礎面試題

1 面向對象編程有哪些特性&#xff1f; 面向對象編程&#xff08;Object-Oriented Programming&#xff0c;簡稱 OOP&#xff09;是一種以對象為核心的編程范式&#xff0c;它通過模擬現實世界中的事物及其關系來組織代碼。OOP 具有三大核心特性&#xff1a;封裝、繼承、多態。…

科學養生指南:解鎖健康生活新方式

在快節奏的現代生活中&#xff0c;健康養生成為人們關注的焦點。想要擁有良好的身體狀態&#xff0c;無需依賴復雜的傳統理論&#xff0c;通過科學的生活方式&#xff0c;就能輕松實現養生目標。? 規律運動是健康的基石。每周進行 150 分鐘以上的中等強度有氧運動&#xff0c…

OpenCV閾值處理完全指南:從基礎到高級應用

引言 閾值處理是圖像處理中最基礎、最常用的技術之一&#xff0c;它能夠將灰度圖像轉換為二值圖像&#xff0c;為后續的圖像分析和處理奠定基礎。本文將全面介紹OpenCV中的各種閾值處理方法&#xff0c;包括原理講解、代碼實現和實際應用場景。 一、什么是閾值處理&#xff1…

Java8到24新特性整理

本文整理了 Java 8 至 Java 24 各版本的新特性&#xff0c;內容包括每個版本的新增功能分類&#xff08;如語法增強、性能優化、工具支持等&#xff09;、詳細的代碼示例&#xff0c;并結合官方文檔資料&#xff0c;分析每項特性的應用場景及優缺點。Java 8 發布于 2014 年&…

輪詢仲裁器

參考視頻 https://www.bilibili.com/video/BV1VQ4y1w7Rr/?spm_id_from333.337.search-card.all.click&vd_sourceaedd69dc9740e91cdd85c0dfaf25304b 算法原理

Armijo rule

非精線搜索步長規則Armijo規則&Goldstein規則&Wolfe規則_armijo rule-CSDN博客 [原創]用“人話”解釋不精確線搜索中的Armijo-Goldstein準則及Wolfe-Powell準則 – 編碼無悔 / Intent & Focused

力扣HOT100之二叉樹:102. 二叉樹的層序遍歷

這道題太簡單了&#xff0c;相當于基礎的模板題&#xff0c;但凡涉及到層序遍歷一定會用到隊列來實現&#xff0c;其他的倒沒啥好說的&#xff0c;用兩層while循環來層序遍歷&#xff0c;外層while循環用于控制訪問二叉樹的每一層&#xff0c;而內層while循環則負責收割每一層的…

Ubuntu24.04 安裝 5080顯卡驅動以及cuda

前言 之前使用Ubuntu22.04版本一直報錯,然后換了24.04版本才能正常安裝 一. 配置基礎環境 Linux系統進行環境開發環境配置-CSDN博客 二. 安裝顯卡驅動 1.安裝驅動 按以下步驟來&#xff1a; sudo apt update && sudo apt upgrade -y#下載最新內核并安裝 sudo add…

WAS和Tomcat的對比

一、WAS和Tomcat的對比 WebSphere Application Server (WAS) 和 Apache Tomcat 是兩款常用的 Java 應用服務器&#xff0c;但它們有許多顯著的區別。在企業級應用中&#xff0c;它們扮演不同的角色&#xff0c;各自有其特點和適用場景。以下是它們在多個維度上的詳細對比&…

asp.net IHttpHandler 對分塊傳輸編碼的支持,IIs web服務器后端技術

IHttpHandler&#xff0c;不支持分塊傳輸編碼&#xff08;Chunked Transfer&#xff09;吧&#xff1f; IHttpHandler 對分塊傳輸編碼的支持 實際上&#xff0c;IHttpHandler 完全支持分塊傳輸編碼&#xff08;Chunked Transfer Encoding&#xff09;&#xff0c;但具體行為取…

為什么elasticsearch配置文件JVM配置31G最佳

Elasticsearch的JVM堆內存配置為32GB被視為最佳實踐&#xff0c;主要基于以下綜合技術原理和性能優化考量&#xff1a; 1. ?JVM指針壓縮機制優化內存效率? 當堆內存≤32GB時&#xff0c;JVM啟用?對象指針壓縮&#xff08;Compressed Ordinary Object Pointers, COOP&#…

Systemd基礎

1. 概述 Systemd 是一系列工具的集合&#xff0c;其作用也遠遠不僅是啟動操作系統&#xff0c;它還接管了后臺服務、結束、狀態查詢&#xff0c;以及日志歸檔、設備管理、電源管理、定時任務等許多職責&#xff0c;并支持通過特定事件&#xff08;如插入特定 USB 設備&#xf…

AI預測3D新模型百十個定位預測+膽碼預測+去和尾2025年5月16日第79彈

從今天開始&#xff0c;咱們還是暫時基于舊的模型進行預測&#xff0c;好了&#xff0c;廢話不多說&#xff0c;按照老辦法&#xff0c;重點8-9碼定位&#xff0c;配合三膽下1或下2&#xff0c;殺1-2個和尾&#xff0c;再殺6-8個和值&#xff0c;可以做到100-300注左右。 (1)定…

CentOS高手之路:從進階實戰到企業級優化

一、系統深度優化與性能調優 1. 內核參數調優 通過修改/etc/sysctl.conf文件調整內核參數&#xff0c;可顯著提升服務器性能。例如&#xff1a; net.ipv4.tcp_fin_timeout30&#xff08;快速釋放TCP連接&#xff09; vm.swappiness10&#xff08;減少交換分區使用&#xff0…