Your SlideShare is downloading. ×
Асинхронное распределенное выполнение задач. Stdlib, Celery, RQ и собственные велосипеды
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

998

Published on

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

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

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

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

No Downloads
Views
Total Views
998
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
14
Comments
0
Likes
7
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. КЛАСТЕР НА КОЛЕНКЕ CELERY, RQ, STDLIB И СОБСТВЕННЫЕ ВЕЛОСИПЕДЫ Minsk Python Meetup, ноябрь 2013 Роман Иманкулов / @rdotpy
  • 2. ПАТТЕРН QUEUE
  • 3. ПАТТЕРН QUEUE
  • 4. CELERY — ТЯЖЕЛОВЕС АСИНХРОННОСТИ
  • 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. CELERY — ИСПОЛЬЗОВАНИЕ ТРИВИАЛЬНО Запустили задачу и получили результат >>aycrsl =smdly2 2 > sn_eut u.ea(, ) >>pitaycrsl.e( > rn sn_eutgt) 4
  • 7. CELERY — ОТЛОЖЕННОЕ ВЫПОЛНЕНИЕ КОМАНД Задача будет выполнена не раньше, чем через 3 секунды >>smapyayc(,2,cuton3.e( > u.pl_sn(2 ) ondw=)gt)
  • 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. 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. 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. 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. RQ. ЛЕГКОВЕСНАЯ АЛЬТЕРНАТИВА
  • 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. RQ. ЗАПУСКАЕТ ВСЁ 1.  Redis в качестве брокера и result storage 2.  Нулевая настройка 3.  Запуск любых импортируемых функций 4.  Поддержка множества очередей 5.  Простейшая система зависимостей задач http://python-rq.org
  • 15. ЧЕМ ЖЕ ОСОБЕННО ХОРОШ RQ?
  • 16. ВОТ ЭТИМ ГРАФИКОМ!
  • 17. СОБСТВЕННЫЕ МЕНЕДЖЕРЫ ОЧЕРЕДЕЙ
  • 18. ЗАЧЕМ? Потому что простые решения сложных задач — это круче, чем сложные — простых
  • 19. THE BEST CODE IS NO CODE AT ALL Jeff Atwood, Stackoverflow
  • 20. MULTIPROCESSING запускает функции python в отдельных процессах API как у threading имеет примитивы для обмена данными (queue, pipe) имеет примитивы для работы с shared-объектами умеет работать по сети
  • 21. MULTIPROCESSING https://gist.github.com/imankulov/bbb49b57fc15ad171fa9
  • 22. REDIS LPUSH, BRPOP И ТРИДЦАТЬ СТРОК КОДА https://gist.github.com/imankulov/702967fd559f718b4f1c
  • 23. RQ ПРОТИВ НАШИХ РЕШЕНИЙ
  • 24. СПАСИБО! ВОПРОСЫ? Роман Иманкулов / @rdotpy

×