КЛАСТЕР НА КОЛЕНКЕ
CELERY, RQ, STDLIB И СОБСТВЕННЫЕ ВЕЛОСИПЕДЫ

Minsk Python Meetup, ноябрь 2013
Роман Иманкулов / @rdotpy
ПАТТЕРН QUEUE
ПАТТЕРН QUEUE
CELERY — ТЯЖЕЛОВЕС АСИНХРОННОСТИ
CELERY — ИСПОЛЬЗОВАНИЕ ТРИВИАЛЬНО
Создали задачу (myworker.py)
fo clr ipr Clr
rm eey mot eey
ap=Clr(tss,boe=rds/' bced'ei:...
CELERY — ИСПОЛЬЗОВАНИЕ ТРИВИАЛЬНО
Запустили задачу и получили результат
>>aycrsl =smdly2 2
> sn_eut
u.ea(, )
>>pitaycrsl.e...
CELERY — ОТЛОЖЕННОЕ ВЫПОЛНЕНИЕ
КОМАНД
Задача будет выполнена не раньше, чем через 3 секунды
>>smapyayc(,2,cuton3.e(
> u.pl...
CELERY — ПОВТОРНОЕ ВЫПОЛНЕНИЕ
КОМАНД
В случае неудачи задача будет выполнена повторно
@p.akbn=re mxrtis3
apts(idTu, a_ere=...
CELERY — ЗАМЕНА CRON-А
Определяем задачи для запуска
apcn.EEYETSHDL ={
p.ofCLRBA_CEUE
'd-vr-0scns:{
adeey3-eod'
'ak:'ak.d'...
CELERY — ПРОДВИНУТЫЙ РОУТИНГ
Запускаем несколько worker-ов
$clr wre - peim
eey okr Q rmu
$nc clr wre #оееьп уочню
ie eey o...
CELERY CANVAS — ПЛАН АСИНХРОННЫХ
ОПЕРАЦИЙ
Цепочка команд: асинхронное последовательное выполнение
>>can=(d.(,2 |ads4 |ads8...
RQ. ЛЕГКОВЕСНАЯ
АЛЬТЕРНАТИВА
RQ. ЗАПУСКАЕТ ВСЁ
Старт worker-а
$rwre
qokr

Создаем очередь и отправляем в нее задачу
>>q=r.uu(oncinrdsRds)
>
qQeecneto=e...
RQ. ЗАПУСКАЕТ ВСЁ
1.  Redis в качестве брокера и result storage
2.  Нулевая настройка
3.  Запуск любых импортируемых функц...
ЧЕМ ЖЕ ОСОБЕННО ХОРОШ RQ?
ВОТ ЭТИМ ГРАФИКОМ!
СОБСТВЕННЫЕ МЕНЕДЖЕРЫ ОЧЕРЕДЕЙ
ЗАЧЕМ?
Потому что простые решения сложных задач — это круче, чем
сложные — простых
THE BEST CODE IS NO CODE AT ALL
Jeff Atwood, Stackoverflow
MULTIPROCESSING
запускает функции python в отдельных процессах
API как у threading
имеет примитивы для обмена данными (que...
MULTIPROCESSING

https://gist.github.com/imankulov/bbb49b57fc15ad171fa9
REDIS
LPUSH, BRPOP И ТРИДЦАТЬ СТРОК КОДА

https://gist.github.com/imankulov/702967fd559f718b4f1c
RQ ПРОТИВ НАШИХ РЕШЕНИЙ
СПАСИБО! ВОПРОСЫ?
Роман Иманкулов / @rdotpy
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные велосипеды
Upcoming SlideShare
Loading in...5
×

Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные велосипеды

1,181

Published on

Автор: Роман Иманкулов (doist.io)

Когда необходимо заставить веб-приложение выполнить тяжелую работу без ухудшения user experience, или нужно по-быстрому собрать кластер на коленке, возникает потребность в распределенном выполнении очередей команд. В докладе будут рассмотрены варианты организации таких очередей подручными средствами, будет выяснено, чем так хорош Celery, есть ли у него достойные альтернативы, и как написать рабочий менеджер очередей в тридцать строчек кода.

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,181
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
19
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные велосипеды

  1. 1. КЛАСТЕР НА КОЛЕНКЕ CELERY, RQ, STDLIB И СОБСТВЕННЫЕ ВЕЛОСИПЕДЫ Minsk Python Meetup, ноябрь 2013 Роман Иманкулов / @rdotpy
  2. 2. ПАТТЕРН QUEUE
  3. 3. ПАТТЕРН QUEUE
  4. 4. CELERY — ТЯЖЕЛОВЕС АСИНХРОННОСТИ
  5. 5. CELERY — ИСПОЛЬЗОВАНИЕ ТРИВИАЛЬНО Создали задачу (myworker.py) fo clr ipr Clr rm eey mot eey ap=Clr(tss,boe=rds/' bced'ei:/) p eey'ak' rkr'ei:/, akn=rds/' @p.ak apts dfsma b: e u(, ) rtr a+b eun Запустили worker $clr wre -apmwre eey okr -p=yokr
  6. 6. CELERY — ИСПОЛЬЗОВАНИЕ ТРИВИАЛЬНО Запустили задачу и получили результат >>aycrsl =smdly2 2 > sn_eut u.ea(, ) >>pitaycrsl.e( > rn sn_eutgt) 4
  7. 7. CELERY — ОТЛОЖЕННОЕ ВЫПОЛНЕНИЕ КОМАНД Задача будет выполнена не раньше, чем через 3 секунды >>smapyayc(,2,cuton3.e( > u.pl_sn(2 ) ondw=)gt)
  8. 8. CELERY — ПОВТОРНОЕ ВЫПОЛНЕНИЕ КОМАНД В случае неудачи задача будет выполнена повторно @p.akbn=re mxrtis3 apts(idTu, a_ere=) dfgtulsl,ul: e e_r(ef r) ty r: rtr uli2ulpnul.ed) eun rlb.roe(r)ra( ecp IErra ec xet Oro s x: #ппооаьвплиьздч чрз3 ск орбвт ыонт аау ее 0 е. #веон бле3пптк сг е ое оыо riesl.er(x=x,cuton3) as efrtyecec ondw=0
  9. 9. CELERY — ЗАМЕНА CRON-А Определяем задачи для запуска apcn.EEYETSHDL ={ p.ofCLRBA_CEUE 'd-vr-0scns:{ adeey3-eod' 'ak:'ak.d' ts' tssad, 'ceue:dttm.ieet(eod=0, shdl' aeietmdlascns3) 'rs:(6 1) ag' 1, 6 } , } Запускаем Celery beat $clr ba eey et
  10. 10. CELERY — ПРОДВИНУТЫЙ РОУТИНГ Запускаем несколько worker-ов $clr wre - peim eey okr Q rmu $nc clr wre #оееьп уочню ie eey okr чрд о млаи Распределяем задания по очередям adapyayc(,2,qee'rmu' d.pl_sn(2 ) uu=peim)
  11. 11. CELERY CANVAS — ПЛАН АСИНХРОННЫХ ОПЕРАЦИЙ Цепочка команд: асинхронное последовательное выполнение >>can=(d.(,2 |ads4 |ads8) > hi ads2 ) d.() d.() >>can)gt) > hi(.e( 1 6 Группа команд: асинхронное параллельное выполнение >>fo clr ipr gop > rm eey mot ru >>rs=gopadsi i frii xag(0)) > e ru(d.(, ) o n rne1)( >>rsgttmot1 > e.e(ieu=) [,2 4 6 8 1,1,1,1,1] 0 , , , , 0 2 4 6 8 ... a ещё chords, maps, starmaps и много чего ещё, что вам, возможно, никогда не пригодится.
  12. 12. RQ. ЛЕГКОВЕСНАЯ АЛЬТЕРНАТИВА
  13. 13. RQ. ЗАПУСКАЕТ ВСЁ Старт worker-а $rwre qokr Создаем очередь и отправляем в нее задачу >>q=r.uu(oncinrdsRds) > qQeecneto=ei.ei() >>jb=qeqeeo.ahji,'o' 'a' > o .nuu(spt.on fo, br) >>pitjbrsl > rn o.eut 'o/a' fobr
  14. 14. RQ. ЗАПУСКАЕТ ВСЁ 1.  Redis в качестве брокера и result storage 2.  Нулевая настройка 3.  Запуск любых импортируемых функций 4.  Поддержка множества очередей 5.  Простейшая система зависимостей задач http://python-rq.org
  15. 15. ЧЕМ ЖЕ ОСОБЕННО ХОРОШ RQ?
  16. 16. ВОТ ЭТИМ ГРАФИКОМ!
  17. 17. СОБСТВЕННЫЕ МЕНЕДЖЕРЫ ОЧЕРЕДЕЙ
  18. 18. ЗАЧЕМ? Потому что простые решения сложных задач — это круче, чем сложные — простых
  19. 19. THE BEST CODE IS NO CODE AT ALL Jeff Atwood, Stackoverflow
  20. 20. MULTIPROCESSING запускает функции python в отдельных процессах API как у threading имеет примитивы для обмена данными (queue, pipe) имеет примитивы для работы с shared-объектами умеет работать по сети
  21. 21. MULTIPROCESSING https://gist.github.com/imankulov/bbb49b57fc15ad171fa9
  22. 22. REDIS LPUSH, BRPOP И ТРИДЦАТЬ СТРОК КОДА https://gist.github.com/imankulov/702967fd559f718b4f1c
  23. 23. RQ ПРОТИВ НАШИХ РЕШЕНИЙ
  24. 24. СПАСИБО! ВОПРОСЫ? Роман Иманкулов / @rdotpy
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×