Могу ли я использовать Celery для задачи, которая вызывает внешнюю библиотеку, использующую многопроцессорность?Python

Программы на Python
Ответить
Anonymous
 Могу ли я использовать Celery для задачи, которая вызывает внешнюю библиотеку, использующую многопроцессорность?

Сообщение Anonymous »

Я надеюсь использовать Celery для управления очередью задач моего приложения, и мне интересно, способен ли он управлять задачами, которые сами используют многопроцессорную обработку, вызываемую из внешней библиотеки. Например, мне нужно использовать задачу, подобную:

Код: Выделить всё

from celery import shared_task
# external library that uses multiprocessing
from mp_module import mp_func

@shared_task
def long_task(n_proc):
mp_func(n_proc) # takes a long time, but uses multiprocessing to speed it up
Я нашел следующие вопросы полезными, но не применимыми напрямую к моей цели:
  • Параллельная распределенная задача Celery с многопроцессорной обработкой
  • сельдерей: демоническим процессам не разрешено иметь дочерних элементов
  • Запуск многопоточного модуля с сельдереем; демоническим процессам не разрешено иметь дочерних элементов
Короче говоря, кажется, что рекомендуемые параметры для задачи celery с многопроцессорной обработкой заключаются в следующем:
  • Разделение задачи celery на отдельные задачи, чтобы пул предварительной обработки сельдерея мог предварительно выполнить многопроцессорную обработку задачи, которая изначально была одной функцией.
  • Используйте метод billiard вместо многопроцессорной обработки внутри задачи celery.
  • Используйте аргумент -P threads работника (т. е. celery worker -P threads).
Насколько я понимаю, я не могу использовать ни одно из этих трех решений. Чтобы применить (1) или (2), мне пришлось бы изменить исходный код, чего я не могу сделать. Я мог бы сделать (3), но это будет многопоточность вместо использования нескольких ядер, а это означает, что задача начнет выполняться намного дольше, поскольку сельдерей будет обрабатывать ее на одном ядре.
Есть ли способ использовать Celery, чтобы он мог разделить одну задачу на несколько рабочих процессов, когда в этой задаче используется модуль многопроцессорности, без рефакторинга кода? Если нет, то какой будет простейшая альтернатива такого рода иерархическому управлению задачами (управление несколькими задачами, каждая из которых запускает несколько процессов)?

Подробнее здесь: https://stackoverflow.com/questions/798 ... multiproce
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»