На странице собраны вопросы по Celery — от проверки базовых принципов до практического применения и архитектурных решений. В подборке чаще встречаются темы: celery, backend, rabbitmq.
Нужно разделить ускорение HTTP-ответа и полное время оформления заказа. Вынос в Celery может убрать ожидание из запроса, но не сделать саму работу в 60 раз быстрее.
Веб-приложение кладёт задачу в брокер, отдельный Celery worker её исполняет. Падение веб-процесса не равно падению worker; повторную доставку нужно считать нормальным событием.
acks_late в Celery откладывает подтверждение до выполнения задачи. Если эффект уже произошёл, а подтверждение потерялось, брокер может доставить задачу повторно.
Постановку Celery-задачи нужно отложить через transaction.on_commit: воркер получит задание только после успешного commit, а не раньше появления данных в БД.
Отделите долгую задачу в собственную очередь и worker-пул, чтобы она не занимала ресурсы коротких заданий. По возможности разбейте четыре часа работы на возобновляемые части.
Celery выполняет и координирует фоновые задачи, RabbitMQ передаёт сообщения о них между приложением и worker-ами. Брокер отделяет постановку задачи от её выполнения.
Оба варианта возможны: общий кластер RabbitMQ с изолированными очередями и правами либо отдельные брокеры. На интервью нужно описать фактическую схему своего проекта.
Поставьте отправку Celery-задачи в transaction.on_commit, чтобы она запускалась только после успешного commit. При rollback callback не выполняется, и worker не увидит незаписанные данные.
Celery добавляет брокер, распределение задач между машинами, retries, маршрутизацию и управление очередями; multiprocessing организует процессы преимущественно внутри одного приложения. Это разные уровни.
Объясните конкретные ограничения Celery в вашем проекте и ожидаемую выгоду TaskIQ: например, интеграцию async-кода или упрощение сопровождения. Само появление нового инструмента не является причиной миграции.
CPU-квота cgroup ограничивает время выполнения, а не обязательно видимое число процессоров. Поэтому os.cpu_count() может видеть 64 CPU, хотя контейнеру разрешено лишь 2 CPU-времени.