自动注册新的完美流程?

Automatically register new prefect flows?

是否有一种机制可以在本地代理 运行ning 时自动注册 flows/new 流,而无需手动 运行 例如flow.register(...) 每一个?

在 airflow 中,我相信他们有一个进程会定期扫描指定 airflow 主文件夹中名称中带有 dag 的任何文件,然后在其中搜索 DAG 对象。如果找到它们,它会加载它们,这样就可以通过 UI 访问它们,而无需手动 'register' 它们。

prefect 是否存在类似的东西。因此,例如,如果我刚刚创建了以下文件 test_flow.py,而不必 运行 或添加 flow.run_agent() 是否有一种方法可以通过 [=25] 神奇地注册和访问它=] :) - 只是因为它存在于适当的位置?

# prefect_home_folder/test_flow.py
import prefect
from prefect import task, Flow

@task
def hello_task():
    logger = prefect.context.get("logger")
    logger.info("Hello, Cloud!")

flow = Flow("hello-flow", tasks=[hello_task])

flow.register(project_name='main')

我可以编写一个与气流过程具有相似行为的脚本来扫描文件夹并定期注册流,但我想知道它是否有点老套或者是否有更好的解决方案,我只是在想气流太多了?

好问题(还有很棒的用户名!)- 简而言之,我建议您在 Airflow 方面想得太多了。 Prefect 当前不可用的原因有几个:

  • 显式优于隐式
  • Prefect flows 不局限于存在于一个地方,也不局限于具有相同的运行时环境;这使得自动流的发现+从单个代理进程对其进行重新序列化变得复杂(不需要与其提交的流共享相同的运行时环境)
  • 代理最好被认为是由部署基础设施参数化的,而不是流存储

对于生产工作流程,您最好使用 CI/CD 流程,这样只要您更改代码,就会触发自动作业,重新注册流程。一些可能有用的评论:

  • 您实际上不需要为每个可能的代码更改重新注册流程;例如,如果您在示例中更改了 hello_task 记录的消息,您只需将流程重新保存到其原始位置(这看起来像什么取决于您使用的存储类型)。最终,您只需要在有关流的任何元数据发生更改(重试设置、任务名称、依赖关系等)时重新注册
  • 你可以使用flow.register("My Project", idempotency_key=flow.serialized_hash())来自动捕获它;如果流程的后端表示以某种方式发生变化,此模式只会注册一个新版本