如何使用 cmd 参数组织完美流程?

How to organize prefect flow with the using of cmd arguments?

您好,我正在尝试将 prefect 应用于我的项目,该项目使用库 click 来处理命令行参数。下面是一个演示代码片段:

@click.command()
@click.option(
    "-p",
    "--pages",
    type=int,
    default=0,
    help="...",
)
def main(pages):
    print("Running...")
    if pages > 0:
      a()
    else:
      b()
    print("Finished without errors.")

if __name__ == "__main__":
    main()
    another_method()

prefect 的文档提到了这个例子:

flow = Flow("hello-flow", tasks=[hello_task])
flow.register(project_name="tester")

但是,如果我需要 运行 程序,比如说 poetry run main.py -p 10,我需要给出一个固定的命令行参数,还需要 运行 诗歌。在那种情况下,我应该如何组织或重构我的代码以适应 Prefect?

一般来说,使用 Prefect,您不必使用任何这些(clickpoetry)即可从 CLI 运行 您的流程,因为Prefect 附带了自己的 CLI。要从 CLI 启动流程 运行,您可以使用:

prefect run -p /path/to/your/flow_file.py

假设您的流程如下所示:

from prefect import task, Flow, Parameter

@task(log_stdout=True)
def hello_world(name):
    print(f"Hello {name}!")

with Flow("mini-example") as flow:
    name = Parameter("name", default="world")
    hw = hello_world(name)

如果您想 运行 在本地使用与“world”不同的参数值,您可以使用 --param 选项:

prefect run -p /path/to/your/flow_file.py --param name=Marvin

然后,一旦您准备好将项目部署到您的 Prefect 后端,您就可以注册它:

prefect register --project yourprojectname -p /path/to/your/flow_file.py

然后您甚至可以触发一个远程流程 运行,它将存储在后端(即 Prefect Cloud 或服务器),使用:

prefect run --name mini-example --project yourprojectname