您可以根据您要实现的目标,以各种方式将任务、流程和子流程组合成可组合和模块化的工作流程。
任何流动或者子流可以返回数据和状态.任务可以额外返回**PrefectFutures******当他们被提交给任务运行器时。让我们详细了解一下。
返回数据是什么意思?每当您的流程或任务直接返回任何Python对象时,都会发生这种情况。例如,这是一个返回整数值的流程:
Prefectflowreturninganintegervalue
这是一个数据流,其中任务和主要流程返回pandas数据帧:
FlowandtasksreturningPandasdataframes
当你运行这个(例如,从本地终端或Jupyter笔记本),您的计算结果是一个熊猫数据框:
PandasdataframereturnedbyaPrefectflow
返回数据(而不是状态或期货)是您调用任务或流时的默认行为。返回的值可以作为数据依赖项传递给任何下游任务甚至流:
Passingdatabetweentasks
但是您也可以有一个不返回任何内容的流程:
“Helloworld”inPrefect—flowreturningnothing
您可以将Prefect流代码视为带有“附加”的纯Python,仅当它变得有用时才应用。对于任何给定的工作流程,您可以根据需要尽可能多地利用Prefect。
返回数据的好处:
什么是**PrefectFuture**
**PrefectFuture**是一个对象,表示在任务运行器中发生的计算结果。它同时拥有:
返回一个是什么意思**PrefectFuture**当您使用调用任务时your_task.submit(),它们被提交给一个任务运行器,它为访问任务的状态和结果创建了一个未来。
期货可以作为数据依赖传递给下游任务,即使任务被提交并行执行仪表板或者射线,或并发执行异步:
ExampleshowinghowyoucanretrievethestateandreturnvaluefromaPrefectfuture,evenforfailedtasks
既然你知道如何与**PrefectFutures**,你可以更好地理解(并且可能会欣赏)任务运行者的好处。运行直接返回数据的流时,任何失败的任务运行都会堵塞进一步执行和立即停止运行(下图中的第一个流程)。
相反,当提交任务以供任务运行程序执行时,阻塞调用(返回一个_PrefectFuture_)允许您使用所有任务运行整个流程。一项任务的失败不会阻止另一项任务的执行(下图中的第二个流程)。
Blockingvs.non-blockingtaskcalls
什么是**知府**它是一个代表运行状态的对象。状态通常被称为Prefect编排的“货币”——它们决定了您的流程和任务在计划、提交和最终执行时的运行进度。有些状态表示重试、失败、完成、取消、崩溃等。
Prefect允许您在任务和流程转换到特定状态时采取行动,并让您控制自动化数据流对计算结果的反应方式。例如,您可能想要:
这一切都归功于Prefect州丰富的词汇。
返回一个是什么意思**知府**目的?任何时候你调用你的任务return_state=真参数,Prefect将直接返回一个状态对象,您可以使用该对象基于您关心的状态更改构建自定义行为,例如任务或流失败或重试。以下是如何在两者中调用该参数的示例任务和子流:
上面的流程演示了如何在执行任务时返回状态,以及从流程运行过程中的流程。下面是一个示例,展示了在将工作提交给任务运行器以进行异步
Prefect为您提供构建块,您可以在需要时灵活地应用到您的工作流程中。
根据您的工作流程的需要使用尽可能多的Prefect。
了解返回数据、状态和期货之间的区别后,让我们看看您可能更喜欢其中一种的常见用例。
你什么时候回来数据直接地,您的Prefect任务或流程与本机Python函数的工作方式相同。这样做的好处是自然蟒蛇经验。不利的一面是,如果您的任务或子流程失败,则会急切地引发异常,并且您的工作流程会在故障发生后立即终止。
这种行为对于顺序处理,例如,当您想要运行一些必须一个接一个地发生的数据转换时。如果之前的任何一个失败,您希望整个工作流程立即结束。
当您想利用Dask、Ray或异步事件循环时,您可以将任务提交给任务运行器并获得以下好处平行或者同时执行。如果您需要更多控制来处理故障,这同样适用。**PrefectFutures**由于阻塞了任务运行提交调用,它提供了高度可定制的编排功能,这与在分布式设置中的本地工作方式相同(例如,当向分布式Dask或Ray集群提交工作时),即使是异步任务和流(利用Python_异步_图书馆)。
如果您想根据特定的状态转换采取行动,状态就变得很重要。例如,如果某些API调用未返回任何数据,您可能希望提前完成流程运行:
下面是一个示例,展示了如何在重要任务成功完成时通过Slack获得通知:
Prefect根据返回值确定流程运行的最终状态。这就是它在实践中的含义——如果你的流程返回: