resources - 气流:如何指定资源池的定量使用?
问题描述
我正在研究几个开源工作流调度程序,用于具有异构 RAM 使用的 DAG 作业。调度程序不仅应该调度少于最大线程数,还应该保持所有并发任务的 RAM 总量低于可用内存。
在这个Luigi Q&A中,解释说
您可以在配置中设置有多少资源可用,然后将任务消耗多少资源作为任务的属性。然后,这将限制您
n
一次运行该任务。在配置中:
[resources] api=1
在任务代码中:
resources = {"api": 1}
对于 Airflow,我无法在其文档中找到相同的功能。似乎最好的办法是在资源池中指定多个可用槽,并指定任务实例使用资源池中的单个槽。但是,似乎无法指定任务实例在池中使用多个插槽。
问题:专门针对 Airflow,如何指定任务实例的量化资源使用情况?
解决方案
假设您正在使用CeleryExecutor
,那么从气流版本 1.9.0 开始,您可以管理 Celery 的任务并发。这不完全是您一直在询问的内存管理,而是执行任务的并发工作线程的数量。
调用了Tweakable 参数CELERYD_CONCURRENCY
,这里很好地解释了如何在 Airflow 中管理与 celery 相关的配置。
[编辑]
实际上,Pools
也可以用来限制并发。假设您想限制资源task_id
消耗,以便同时运行 2 个实例。你唯一需要做的是:
创建池(在 UI:
Admin
->中Pools
)为其分配名称,例如my_pool
并在字段中定义任务的并发性Slots
(在本例中2
)在实例化您
Operator
的执行此操作task_id
时,传递定义的池名称(pool=my_pool
)
推荐阅读
- ios - Swift - 仅在我关闭应用程序后切换更新
- amazon-web-services - 是否可以在 AWS 中为 Lambda 函数配置可用区(AZ)?
- javascript - 使用函数和 if 语句的 JavaScript 表单验证
- javascript - 如何在按下按钮时更改视频
- python - 有限连接超时和无限读取超时
- python - 如何让 discord.py 机器人说出服务器使用的前缀?
- appium - 每次运行 AppiumDriver 时阻止安装 webdriver 代理
- javascript - 如何在通过 java 脚本添加的输入上使用 keyup 功能?
- r - 使用 R Base 从 read.csv2 读取的折线图的图例
- java - 电子邮件未在 @Async 注释方法中发送