SlideShare a Scribd company logo
Продвинутое 
использование 
Celery 
Александр Кошелев, Яндекс 
29 
Python Party, Киев, 4 октября 2014
Содержание 
Общее описание – что такое Celery 
Использование MongoDB и Redis в качестве 
брокера 
Несколько приложений Celery в одном проекте 
Эксклюзивный доступ к ресурсам 
Логирование ошибок 
Мониторинг Celery
Что такое Celery 
Для пользователя 
"Distributed task queue" 
Асинхронные задачи 
Задачи по расписанию
Что такое Celery 
Для пользователя 
Задачи ставятся в очереди клиентами 
Очереди хранит брокер 
Очереди разбираются воркерами 
Задачи возвращают результаты 
Воркеры создают события
Что такое Celery 
Для разработчика 
Kombu + абстракция над "задачей" 
Kombu 
"Messaging library" 
Несколько транспортов для сообщений 
AMQP или "virtual AMQP"
Что такое Celery 
Для админа 
Воркеры (1..N) 
Мастер-процесс (1) 
Процессы выполняющие задачи (1..N) 
Воркер слушает очереди (1..N) у брокера 
Особый воркер - celery beat 
Имеет расписание 
Ставит задачи в очереди 
Сохраняет своё состояние 
Брокер - транспорт между клиентом и воркерами
Альтернативные 
брокеры 
Нет дополнительной сущности 
Лучше подходят под задачу
Альтернативные 
брокеры 
Virtual AMQP 
Эмуляция AMQP 
Есть не все возможности 
Больше кода, который может сломаться 
Потенциально меньшая эффективность
Альтернативные 
брокеры 
Redis 
Работает через virtual AMQP 
Быстрый 
Встроенный LRU механизм
Альтернативные 
брокеры 
MongoDB 
Работает через virtual AMQP 
Failover через Replica Set 
Экспериментальный статус 
Не работают события
Несколько приложений 
Что такое "приложение" 
Набор настроек 
Зарегистрированные задачи 
Всегда есть хотя бы одно
Несколько приложений 
Разные брокеры 
Разный профиль нагрузки 
Разный тип задач
Несколько приложений 
Использование 
from celery import Celery 
app_global = Celery() 
app_global.conf.update(BROKER_URL='mongodb://') 
app_local = Celery() 
app_local.conf.update(BROKER_URL='redis://') 
app_global.set_current() 
task_a.apply_async() 
app_local.set_current() 
task_b.apply_async()
Блокировки ресурсов 
Ограниченная пропускная способность 
Эксклюзивный доступ 
Запуск одной задачи за раз
Блокировки ресурсов 
Интеграция 
Декоратор 
@task 
@locked('lock-name') 
def my_task(): 
... 
Базовый класс 
class MyTask(LockedTask): 
def locked_run(self): 
... 
Внутри beat шедулера
Блокировки ресурсов 
Инструмент 
ZooKeeper (kazoo) 
etcd 
... MongoDB
Блокировки ресурсов 
Semaphore 
Нужно ограничить нагрузку на компонент 
У компонента есть емкость - кол-во тикетов 
Если тикеты кончились - обратно в очередь
Блокировки ресурсов 
Semaphore 
zk = KazooClient() 
def locked(name, capacity): 
def _decorator(func): 
def _wrapper(self, *args, **kwargs): 
semaphore = zk.Semaphore('/path', name, capacity) 
if semaphore.acquire(blocking=False): 
try: 
return func(self, *args, **kwargs) 
finally: 
semaphore.release() 
else: 
raise self.retry(coundown=5) 
return _wrapper 
return _decorator
Блокировки ресурсов 
Semaphore 
@task(bind=True) 
@locked('save-to-storage-task', 10) 
def save_to_storage(self, data): 
storage.save(data)
Блокировки ресурсов 
Mutex 
Эксклюзивный доступ 
Если лок у кого-то другого - обратно в очередь
Блокировки ресурсов 
Mutex 
from celery import Task 
class LockedTask(Task): 
lock_name = None 
retry_on_lock = True 
def run(self, *args, **kwargs): 
lock = zk.Lock('/path', self.lock_name) 
if lock.acquired(blocking=False): 
try: 
return self.locked_run(*args, **kwargs) 
finally: 
lock.release() 
elif self.retry_on_lock: 
raise self.rerty(countdown=5) 
def locked_run(self): 
raise NotImplementedError
Блокировки ресурсов 
Mutex 
class ImportDataTask(LockedTask): 
name = 'import-data' 
retry_on_lock = False 
def locked_run(self, url): 
response = requests.get(url) 
...
Логирование ошибок 
Варианты 
Воркер пишет ошибки в консоль или файл 
Настройка логинга в обработчике сигнала 
Настройка логинга в проекте
Логирование ошибок 
Настройка 
import logging 
from celery.signals import setup_logging 
@setup_logging.connect 
def setup_worker_logging(loglevel, logfile, format, colorize): 
root = logging.getLogger() 
root.setLevel(loglevel) 
root.addHandler(logging.handlers.SysLogHandler())
Логирование ошибок 
Аналитика
Мониторинг 
Получение текущего состояния воркера 
celery inspect ping 
celery inspect active 
celery inspect stats 
Подписка на события воркера 
celery events 
celery flower
Мониторинг 
celery inspect 
user@host:~$ celery inspect ping 
-> default@host01: OK 
pong 
-> management@host01: OK 
pong 
-> swarm@host02: OK 
pong 
-> swarm_check@host02: OK 
pong 
-> swarm_push@host03: OK 
pong 
-> swarm_store@host03: OK 
pong 
-> swarm_walk@host04: OK 
pong
Мониторинг 
Flower
Мониторинг 
Что выбрать 
celery inspect - текущий мониторинг 
celery flower - глубокая отладка и медитация
Вопросы? 
daevaorn@yandex.ru 
github.com/daevaorn

More Related Content

PPTX
Основы и нюансы параллельного тестрования
PPTX
Использование Open Source инструментов для автоматизации тестирования
PPTX
Автоматизация тестирования многопоточности
PDF
DUMP-2015: «Распределенная обработка миллионов документов на Scala и Akka» Ст...
PPTX
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
PDF
Опыт разработки и тестирования RESTful JSON сервиса
PDF
Работа с Akka Сluster, @afiskon, scalaby#14
PDF
How to build solid CI-CD pipeline / Илья Беда (beda.software)
Основы и нюансы параллельного тестрования
Использование Open Source инструментов для автоматизации тестирования
Автоматизация тестирования многопоточности
DUMP-2015: «Распределенная обработка миллионов документов на Scala и Akka» Ст...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Опыт разработки и тестирования RESTful JSON сервиса
Работа с Akka Сluster, @afiskon, scalaby#14
How to build solid CI-CD pipeline / Илья Беда (beda.software)

What's hot (20)

PPTX
PowerShell
PPTX
Zabbix 3.4 - простая непростая дружба с сообществом / Алексей Владышев (Zabbix)
PPT
Easy authcache 2 кеширование для pro родионов игорь
PPTX
Введение в Akka
PDF
Превышаем скоростные лимиты с Angular 2
PDF
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
PDF
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
PPTX
антон веснин Rails Application Servers
PPT
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
PDF
Java 9: what is there beyond modularization
PDF
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
PDF
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
PDF
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
PDF
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
PPTX
Java Ahead-Of-Time compilation
PDF
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
PDF
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
PPT
бегун
PPT
Alexander manuhin selenium_php_v2.0
PowerShell
Zabbix 3.4 - простая непростая дружба с сообществом / Алексей Владышев (Zabbix)
Easy authcache 2 кеширование для pro родионов игорь
Введение в Akka
Превышаем скоростные лимиты с Angular 2
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
антон веснин Rails Application Servers
Проект «Одноклассники» Mail.Ru Group, Андрей Паньгин
Java 9: what is there beyond modularization
Библиотеки для передачи данных (Lecture 13 – multithreading, network (libs))
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Юлия Цисык «RESTFul API в вашем.NET приложении: как, зачем и почему?»
Хранение, обработка и отдача статики с использованием \Zend\File. Опыт социал...
Java Ahead-Of-Time compilation
«Изоморфные js приложения с использованием catberry.js», Денис Речкунов
Никита Цуканов "Параллелизм и распределённые вычисления на акторах с Akka.net"
бегун
Alexander manuhin selenium_php_v2.0
Ad

Similar to Продвинутое использование Celery — Александр Кошелев (20)

PDF
Продвинутое использование Celery
PDF
Чуть сложнее чем Singleton: аннотации, IOC, АОП
PPT
бегун
PPT
Easy authcache 2 кэширование для pro. Родионов Игорь
PPTX
Clojure: Lisp for the modern world (русская версия)
PPTX
Node.js введение в технологию, КПИ #ITmeetingKPI
PPTX
PHP 5.4: Что нового?
PPTX
Java осень 2012 лекция 5
PDF
Инструментируй это
PPTX
PDF
Методы защиты Java-приложений и их обход
KEY
Testing RIA with Selenium
PDF
Java осень 2014 занятие 1
PDF
Zend framework 2
PPTX
Django Rest Framework vs Graph Ql
PPTX
PDF
ZooKeeper Java Cloud
PDF
Истинный DevOps. Секрет 42.
PDF
Сергей Константинов — Что интересного готовит нам W3C
PPTX
Взломать сайт на ASP.NET
Продвинутое использование Celery
Чуть сложнее чем Singleton: аннотации, IOC, АОП
бегун
Easy authcache 2 кэширование для pro. Родионов Игорь
Clojure: Lisp for the modern world (русская версия)
Node.js введение в технологию, КПИ #ITmeetingKPI
PHP 5.4: Что нового?
Java осень 2012 лекция 5
Инструментируй это
Методы защиты Java-приложений и их обход
Testing RIA with Selenium
Java осень 2014 занятие 1
Zend framework 2
Django Rest Framework vs Graph Ql
ZooKeeper Java Cloud
Истинный DevOps. Секрет 42.
Сергей Константинов — Что интересного готовит нам W3C
Взломать сайт на ASP.NET
Ad

More from Yandex (20)

PDF
Предсказание оттока игроков из World of Tanks
PDF
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
PDF
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
PDF
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
PDF
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
PDF
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
PDF
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
PDF
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
PDF
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
PDF
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
PDF
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
PDF
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
PDF
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
PDF
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
PDF
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
PDF
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
PDF
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
PDF
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
PDF
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
PDF
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Предсказание оттока игроков из World of Tanks
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...

Продвинутое использование Celery — Александр Кошелев