0

嗨,我正在尝试将 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()

省长的文档提到了这个例子:

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

但是,如果我需要通过 let say 来运行程序poetry run main.py -p 10,我需要提供一个固定的命令行参数并使用诗歌运行。在那种情况下,我应该如何组织或重构我的代码以适应 Prefect?

4

1 回答 1

3

一般来说,使用 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
于 2021-12-13T08:46:25.703 回答