在Luigi pipelin中释放“resource”

2024-09-28 05:28:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Luigi管道,它由一个批量运行的任务图组成。其中一些任务依赖于昂贵的资源(例如awsec2机器集群或其他昂贵的资源)。在

我试图以一种聪明的方式使用这个resource,这样我acquire在运行任务之前使用它,release在所有任务完成后立即使用它。一般来说,昂贵的资源是在管道开始时分配的,而依赖关系图的一半可以很好地释放出来。在

有没有一种有效的方法在Luigi中建模,以实现资源的aquire和{}?在

AquireReleaseluigi.Tasks来建模并不是最佳的,因为它给我的图增加了很多复杂性和不必要的边。理想情况下,scheduler将检查其state,当不再有RUNNING或{}任务需要资源时,它可以release它。在

这个已经存在了吗,或者我必须自己将这个功能添加到Luigi中?在


Tags: 方法机器release管道关系方式集群资源
1条回答
网友
1楼 · 发布于 2024-09-28 05:28:38

Luigi支持这样的概念:当任务被调度和运行时,这些资源将被占用,然后在taks完成时释放。为什么你需要更先进的方法。在

doc

This section can contain arbitrary keys. Each of these specifies the amount of a global resource that the scheduler can allow workers to use. The scheduler will prevent running jobs with resources specified from exceeding the counts in this section. Unspecified resources are assumed to have limit 1. Example resources section for a configuration with 2 hive resources and 1 mysql resource:

[resources]
hive: 2
mysql: 1

在您的例子中,您可以通过使aws : 1来建模。此资源一次只能使用一次。现在,如果你想控制任务是如何安排的,那么你可以尝试使用优先级。在

然后,您可以在任务中添加:

^{pr2}$

据我所知,没有办法直接获取资源,因为这是由任务执行控制的。在

更新(来自评论):

例如,如果您想执行某些操作(例如,清理),则可能需要使用事件处理程序。在

 @luigi.Task.event_handler(luigi.Event.FAILURE)
 def handler_failure(self, exception):
       # do cleanups

有关详细信息,请参阅完整的documentation。在

相关问题 更多 >

    热门问题