Celery Autoscale: что в лоб — то по лбу?
okolobackend 15 минут назад Celery Autoscale: что в лоб — то по лбу? Уровень сложности Средний Время на прочтение 9 мин Охват и читатели 590 Программирование * Python * Из песочницы Моей первой большой самостоятельной...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. okolobackend 15 минут назад Celery Autoscale: что в лоб — то по лбу? Уровень сложности Средний Время на прочтение 9 мин Охват и читатели 590 Программирование * Python * Из песочницы Моей первой большой самостоятельной работой программиста была инвентаризация celery-задач. Нам с товарищем по бэкенду достался легаси-проект товарно-учетного приложения.
С горем пополам перевезли его из Hetzner в родное «облако» и поняли, что срочно необходимо всё документировать, очищать и структурировать. Пока коллега упаковывал приложение в контейнеры, я занялся Celery, так как на этой библиотеке было завязано много бизнес-логики. Пока группировал и отлаживал задачи, определял им очереди, нашел в документации загадочное autoscale .
Технические детали
Кажется, что в тот момент этот параметр светился золотом. Сейчас там как всё наладится и заработает без сучка и задоринки. Ровно, чинно, благородно.
Мне повезло, что так и случилось, очереди стали более спокойными. Причин тому несколько: было достаточно ресурсов сервера; задачи были, в основном, I\O-bound; в процессе работы избавился от некоторых утечек памяти и ограничил время исполнения самых «отмороженных» задач. Спустя время я решил отрефлексировать и пересмотреть тот опыт и был удивлен тому, как autoscale работает в действительности на разного рода очередях.
Если у вас есть сомнения, стоит ли читать статью, то предлагаю решить загадку: 1. Запускаем воркер: `-A celery_app worker --autoscale=4,0 --worker_prefetch_multiplier=1` 2. Запускаем скрипт: `for idx_task in range(1, 601): io_task.
Отраслевые последствия
delay() if idx_task % 4 == 0: time. Который генерирует такие задачи: `@celery. task(name='io') def io_task() -> int: result = 0 for i in range(10**7): result += i**2 time.
sleep(1) return result` Вопрос: сколько всего процессов будет создано за время обработки 600 задач? 0 Если выбрали второй вариант — 4 процесса, то мне есть, чем вас удивить. Правильный ответ будет позже.
О понятиях Воркер — экземпляр Celery, включающий в себя процесс-супервизор и все дочерние процессы. Супервизор — ведущий процесс воркера, устанавливающий соединение с брокером и порождающий и управляющий прочими рабочими процессами. Сам задачи не обрабатывает.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





