在Celery中获取工作者ID

时间:2013-06-18 19:41:20

标签: python celery

我想使用Celery在带有四张Tesla卡的GPU服务器上运行作业。我用一个由四名工人组成的工作人员来管理芹菜工人,这样每张卡片总能运行一份工作。

我的问题是如何指示工人每个人声称一个GPU。目前,我依赖于工作进程应该都具有连续进程ID的假设:

device_id = os.getpid() % self.ndevices

但是,我无法保证始终正常工作,即工作进程随着时间的推移重新启动。理想情况下,我想直接获得每个工人的ID。有人可以告诉我是否可以从任务中检查工作人员,或者可以建议不同的解决方案来在GPU之间分配作业?​​

1 个答案:

答案 0 :(得分:11)

如果您使用CELERYD_POOL = 'processes',则工作池由billiard处理,这恰好暴露了其基于0的流程索引:

from billiard import current_process
from celery import task

@task
def print_info():
    # This will print an int in [0..concurrency[
    print current_process().index

index是基于0的,如果工作人员恰好重新启动,它将保留其索引。

我找不到关于index值的任何文档:/