簡體   English   中英

完美的任務調度

[英]Prefect Task Scheduling

我是 Prefect 的新手,主要使用 Airflow 工作。 我整理了一個工作流程,執行得很好,但任務沒有按我期望的順序執行。 流在這里:

with Flow(name='4chan_extract') as flow:
    board_param = Parameter(name='board_name', required = True, default='pol')
    getData(board= board_param)
    checkDB(url= 'postgresql://postgres:user@localhost:5434/postgres')
    upload_raw(url="postgresql://postgres:user@localhost:5434/postgres", 
    board=board_param)
    remove_dupes(board=board_param)

但是,當我使用flow.visualise()這個流時,DAG 看起來真的很奇怪。

我的理解是with集合順序的上下文運算符? 在每個任務中使用up_stream沒有幫助。

任何幫助表示贊賞。

如果您希望您的任務一個接一個地被順序調用,您可以將upstream_tasks添加到您的每個任務中。 此外,為了輕松傳遞 state 依賴項,您可以在調用任務時為其分配一個名稱( data = get_data(board=board_param) ),這允許將此命名引用傳遞給下游依賴項。

我只能猜測您希望此流程看起來如何,但假設您希望它按順序運行,這里有一個完整的示例和 DAG 可視化:

from prefect import task, Flow, Parameter


@task
def get_data(board):
    pass


@task
def check_db(url):
    pass


@task
def upload_raw(url, board):
    pass


@task
def remove_duplicates(board):
    pass


with Flow(name="4chan_extract") as flow:
    board_param = Parameter(name="board_name", required=True, default="pol")
    data = get_data(board=board_param)
    check = check_db(
        url="postgresql://postgres:user@localhost:5434/postgres", upstream_tasks=[data]
    )
    upload = upload_raw(
        url="postgresql://postgres:user@localhost:5434/postgres",
        board=board_param,
        upstream_tasks=[check],
    )
    remove_duplicates(board=board_param, upstream_tasks=[upload])

if __name__ == "__main__":
    flow.visualize()

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM