是否可以循环 prefect.Parameter?
Is it possible to loop over a prefect.Parameter?
我有以下 flow:
with Flow("My flow") as flow:
urls = Parameter("urls", default=['url1', 'url2'])
for url in urls:
result = get_url(urls)
当我通过 flow.run()
运行 时,出现以下错误:
TypeError: 'Parameter' object is not iterable
是否可以对其进行迭代,如果可以,如何迭代?
对于刚接触延迟计算范例的人来说,这是一个非常常见的绊脚石。
Prefect Parameter
s(更一般地说,anyPrefect 任务)代表将来 运行 的工作单元。当您构建流程时,您正在指定稍后 运行 的工作单元之间的依赖关系。这是一个强大的抽象,因为它可以让您在 运行 工作流之前推断出工作流的某些属性。
需要注意的是,您需要区分 构建时间 可用的内容(在 运行 构建 Flow 之前)和 运行 time(在流的上下文中运行)。在你的情况下,你正在使用 Prefect 无法知道的知识,即你的参数将 return 可迭代的东西。此外,即使 Prefect 可以推断参数输出 将 是可迭代的,它也无法知道有多少元素将被 returned(每个 运行的流量!)。
鉴于所有这些,Prefect 使用称为“映射”的概念处理这些“延迟迭代”:https://docs.prefect.io/core/concepts/mapping.html
对于您的情况,您可以将代码重构为:
with Flow("My flow") as flow:
urls = Parameter("urls", default=['url1', 'url2'])
result = get_url.map(urls)
将为参数的 return 值中的每个值动态生成 get_url
的副本。
我有以下 flow:
with Flow("My flow") as flow:
urls = Parameter("urls", default=['url1', 'url2'])
for url in urls:
result = get_url(urls)
当我通过 flow.run()
运行 时,出现以下错误:
TypeError: 'Parameter' object is not iterable
是否可以对其进行迭代,如果可以,如何迭代?
对于刚接触延迟计算范例的人来说,这是一个非常常见的绊脚石。
Prefect Parameter
s(更一般地说,anyPrefect 任务)代表将来 运行 的工作单元。当您构建流程时,您正在指定稍后 运行 的工作单元之间的依赖关系。这是一个强大的抽象,因为它可以让您在 运行 工作流之前推断出工作流的某些属性。
需要注意的是,您需要区分 构建时间 可用的内容(在 运行 构建 Flow 之前)和 运行 time(在流的上下文中运行)。在你的情况下,你正在使用 Prefect 无法知道的知识,即你的参数将 return 可迭代的东西。此外,即使 Prefect 可以推断参数输出 将 是可迭代的,它也无法知道有多少元素将被 returned(每个 运行的流量!)。
鉴于所有这些,Prefect 使用称为“映射”的概念处理这些“延迟迭代”:https://docs.prefect.io/core/concepts/mapping.html
对于您的情况,您可以将代码重构为:
with Flow("My flow") as flow:
urls = Parameter("urls", default=['url1', 'url2'])
result = get_url.map(urls)
将为参数的 return 值中的每个值动态生成 get_url
的副本。