Получить идентификатор работника в сельдерее

Я хочу использовать Celery для запуска заданий на сервере GPU с четырьмя картами Tesla. Я управляю работником Сельдерей с пулом из четырех рабочих, так что каждая карта всегда выполняет одну работу.

Моя проблема заключается в том, как инструктировать работников по каждому требованию на одном графическом процессоре. В настоящее время я полагаюсь на предположение, что рабочие процессы должны иметь непрерывные идентификаторы процессов:

device_id = os.getpid() % self.ndevices 

Тем не менее, я не гарантированно всегда работать, т. Е. Когда рабочие процессы перезапускаются с течением времени. Поэтому в идеале я хотел бы получить идентификатор каждого работника напрямую. Может ли кто-нибудь сказать мне, можно ли осмотреть работника из задачи или предложить другое решение для распределения заданий по графическим процессорам?

One Solution collect form web for “Получить идентификатор работника в сельдерее”

Если вы используете 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 : /

Python - лучший язык программирования в мире.