Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Prefict中,在流运行期间是否可以缓存任务值?_Python 3.x_Caching_Etl_Prefect - Fatal编程技术网

Python 3.x 在Prefict中,在流运行期间是否可以缓存任务值?

Python 3.x 在Prefict中,在流运行期间是否可以缓存任务值?,python-3.x,caching,etl,prefect,Python 3.x,Caching,Etl,Prefect,我有一个使用.map()的流程;因此,我在多个输入上“循环”,然而一些输入我只需要生成一次,但我注意到我的流不断地重新生成它们 是否可以在运行期间缓存/检查任务(用于其他任务)的结果 我的理解是,可以在特定的时间内进行缓存,如下所示: import datetime from prefect import task @task(cache_for=datetime.timedelta(hours=1)) def some_task(): ... 但是,如果运行时间小于缓存时间时,缓

我有一个使用
.map()
的流程;因此,我在多个输入上“循环”,然而一些输入我只需要生成一次,但我注意到我的流不断地重新生成它们

是否可以在运行期间缓存/检查任务(用于其他任务)的结果

我的理解是,可以在特定的时间内进行缓存,如下所示:

import datetime

from prefect import task

@task(cache_for=datetime.timedelta(hours=1))
def some_task():
    ...

但是,如果运行时间小于
缓存时间
时,缓存是否仍能在下一次运行时保持(如果不是,我想长时间的缓存可以工作)。

是的,有几种不同的方法来实现这种类型的缓存:

使用不同的缓存验证器 除了配置缓存过期(如上所述),您还可以选择配置。在您的情况下,您可以使用输入或参数验证器

使用缓存密钥 通过在任务上指定
cache\u键,可以在任务之间“共享”缓存(在单个流内和跨流):

@task(cache\u for=datetime.timedelta(小时数=1),cache\u key=“my key”)
定义一些任务():
...
然后,它将按键而不是按任务ID查找候选
缓存的
状态

使用基于文件的目标 最后,越来越流行的设置是使用。然后,您可以使用
flow\u run\u id
和提供给任务的输入等内容来模板这个目标字符串。每当任务运行时,它首先检查指定目标位置是否存在数据,如果找到,则不会重新运行。例如:

@task(target=“{flow\u run\u id}/{scheduled\u start\u time:%Y-%d-%m}/results.bytes”)
定义一些任务():
...
如果以下两项均为真,则此模板具有在目标位置重新使用数据的效果:

  • 任务将在同一天内重新运行
  • 该任务将作为同一流运行的一部分重新运行
然后,您可以跨多个任务(或者在您的情况下,跨所有映射的子任务)共享此模板

请注意,如果需要,您还可以向
目标
模板提供输入和参数