Внутреннее устройство: Рабочий¶
Введение¶
Рабочий состоит из 4 основных компонентов: потребитель, планировщик, посредник и пул задач. Все эти компоненты работают параллельно, работая с двумя структурами данных: очередью готовности и расписанием ETA.
Структуры данных¶
таймер¶
Таймер использует heapq
для планирования внутренних функций. Он очень эффективен и может обрабатывать сотни тысяч записей.
Компоненты¶
Потребитель¶
Принимает сообщения от брокера, используя Kombu.
Когда сообщение получено, оно преобразуется в объект celery.worker.request.Request
.
Задания с ETA или ограничением скорости вводятся в таймер, сообщения, которые могут быть немедленно обработаны, отправляются в пул выполнения.
ETA и rate-limit при совместном использовании приведут к тому, что ограничение скорости будет соблюдено, а задача будет запланирована после ETA.
Таймер¶
Таймер планирует выполнение внутренних функций, таких как очистка и внутренний мониторинг, а также планирует выполнение задач ETA и задач с ограничением скорости. Если запланированное задание прошло ETA, оно перемещается в пул выполнения.
TaskPool¶
Это немного модифицированный multiprocessing.Pool
. В основном он работает так же, за исключением того, что он следит за тем, чтобы все рабочие были запущены в любое время. Если рабочий отсутствует, он заменяет его новым.