Внутреннее устройство: Рабочий

Введение

Рабочий состоит из 4 основных компонентов: потребитель, планировщик, посредник и пул задач. Все эти компоненты работают параллельно, работая с двумя структурами данных: очередью готовности и расписанием ETA.

Структуры данных

таймер

Таймер использует heapq для планирования внутренних функций. Он очень эффективен и может обрабатывать сотни тысяч записей.

Компоненты

Потребитель

Принимает сообщения от брокера, используя Kombu.

Когда сообщение получено, оно преобразуется в объект celery.worker.request.Request.

Задания с ETA или ограничением скорости вводятся в таймер, сообщения, которые могут быть немедленно обработаны, отправляются в пул выполнения.

ETA и rate-limit при совместном использовании приведут к тому, что ограничение скорости будет соблюдено, а задача будет запланирована после ETA.

Таймер

Таймер планирует выполнение внутренних функций, таких как очистка и внутренний мониторинг, а также планирует выполнение задач ETA и задач с ограничением скорости. Если запланированное задание прошло ETA, оно перемещается в пул выполнения.

TaskPool

Это немного модифицированный multiprocessing.Pool. В основном он работает так же, за исключением того, что он следит за тем, чтобы все рабочие были запущены в любое время. Если рабочий отсутствует, он заменяет его новым.

Вернуться на верх