PKXDDRA"A"celery-1.0-archived/links.html Interesting Links — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

This Page

PKXDD0ENN"celery-1.0-archived/searchindex.jsSearch.setIndex({envversion:42,terms:{four:[45,23],prefix:26,sleep:[87,65,45,26,23],oldest:31,locat:[56,2,18,79],max_retri:[87,2,22,23],typeerror:23,taskset_id:22,tweet:2,get_languag:15,umask:23,asynchronousmaptask:[2,23],swap:23,under:[56,1,23],everi:[0,15,89,23,59,48,61,25,87,64],reload_task_result:23,appar:23,"0x101d1f550":2,execute_using_pool:65,rabbitmq:23,rabbitmqctl:[15,18],taskmanag:22,database_host:[15,45],dump_reserv:23,create_us:2,max_cached_result:26,direct:[83,34,89,15,25,45],second:[89,23,0,60,2,31,87,61,45,26],even:[0,18,23,15,2,25,59,45,26],supervis:[59,23],hide:[52,19],eventlet:23,worsen:23,neg:60,introspect:87,allowscriptaccess:49,tppm:49,mark_as_read:23,celery_cache_backend:[45,26,23],net:[0,18,49],ever:[2,23],metadata:[48,41,23],behavior:[33,15,26,45,23],celerymon_log_fil:[45,26],never:[15,18,23,59,85,92,45],here:[15,59,48,2,25,61,45],met:65,path:[52,34,23,15,18,19,87,45],interpret:2,get_result:23,task_id:[22,23,15,2,86,51,87,20,41],prognam:63,anymor:[0,23],everyon:15,datetim:[89,23,0,60,61,25,45],mime:[23,4],timedelta_second:60,celerybeat_schedule_filenam:[45,26],celerybeat:23,txt:23,unit:[1,23],highli:[56,15],fun_takes_kwarg:87,describ:[15,2,65,45,31],would:[15,2,48,25,23],call:[34,0,25,23,15,48,85,2,86,18,59,64,21,51,89],comcast:18,typo:23,recommend:[2,59,0,48,89],mxcl:18,care:[2,45],type:[59,89,23,47,15,49,4,45,26],until:[83,34,0,23,15,48,60,25,87,59,65,45],messages_for_url:25,relat:[15,45,25,23],warn:[0,26,45,23],aiwoh:23,recev:23,relai:71,wari:2,hold:[83,34,15,37,23],must:[87,34,15,89,45],ert:18,celeryd_daemon_log_format:23,join:[56,25,23],disable_error_email:[2,23],setup:[59,15,23],work:[52,23,45,19],wors:2,track_start:[26,23],root:[59,15],overrid:[15,2,89,23],give:[83,34,89,23,15,2,18,87,45,26],autodetect:39,caution:23,want:[52,34,0,18,23,15,83,61,25,19,59,45,26,31,89],"425px":49,keep:[83,34,23,2,25,45],plist:23,running_nod:18,end:[83,34,21,23,60,61,18,64],always_eag:26,feed_url:[85,15],turn:[2,15,0,23],interval_step:87,fals:[83,34,46,23,48,60,2,25,45,26],sever:[23,59,2,48,4],answer:[15,2],verifi:[18,79],config:23,connect_timeout:89,updat:[15,2,31,25,23],f100aa80273a:23,timedelta:[89,23,0,60,61,25,45],initial_valu:31,after:[34,0,37,23,15,48,60,85,59,20,45,26,41,89],befor:[83,0,89,23,15,48,2,86,31,79,87,20,64,45,26,51],parallel:[83,34,15,59,2,65],averag:23,kozera:23,attempt:2,event_queu:26,classmethod:46,celery_db_reuse_max:23,foord:2,recompil:15,maintain:15,environ:[45,86,23],incorpor:23,enter:65,mechan:[15,89,23],changlog:23,order:[59,2,89,46],indeped:15,origin:[59,0,60,31,23],broker_password:[83,34,15,45,23],over:[89,23,61,18,19,87,65],becaus:[83,34,23,15,2,18],fifo:46,affect:[15,23],flexibl:15,digest:85,uuid:[23,59,48,4,87,64],update_statu:2,better:[15,2,92,23],drawback:2,persist:[34,48,26,23],mydb:[15,45,79],easier:23,"42a0":23,them:[83,0,89,23,15,60,2,25,56],thei:[83,15,23,59,48,25],qualiti:23,safe:23,"break":23,verify_exist:[2,25],choic:[89,41],get_object_or_404:2,changelog:0,taskbucket:65,unpickl:23,imagecroptask:89,kwarg1:[89,23],timeout:[45,26,23],each:[0,89,23,59,2,25,87,45],debug:[85,45,3,23],crunchi:23,luci:23,mean:[0,7,92,23,15,48,2,31,45,26],discard_al:[15,23],urlfield:[2,25],forgot:23,test_runn:[33,15,92],celerymon:23,unbound:48,network:[56,59,0],goe:23,positiveintegerfield:25,crucial:0,content:[33,15,52,48,19],rewrit:15,reader:25,gen_unique_id:[87,23],amqp_connection_max_retri:23,rail:21,situat:23,free:[15,2],ineffici:2,md5:85,workaround:23,traceback:[64,59,31,22,23],filter:[15,2],iso:[23,0,4],prefetch:[45,26,23],loud:0,task_status_don:41,semaphor:15,rang:31,render:[21,49],loginerror:2,wast:2,restproxytask:2,datastructur:[3,23],alreadi:[0,89,23,47,15,48,85,35,79,59,45],wasn:15,installed_app:[83,23,15,2,86,79],primari:25,rewritten:23,top:[56,49],sometim:15,underlin:49,master:[15,45],too:[31,23],amqp_us:23,recent:23,listen:[15,3,45,23],consol:23,tool:[83,34,71,23,15,75,48,45],took:[64,0],task:23,os_mon:18,somewhat:15,technic:2,some_arg:83,keyword:[23,59,62,4,87,20],provid:[83,34,89,71,23,48,2,92,4,87,20],tree:45,zero:[48,23],on_failur:23,"final":[34,18,23,15,85,2,31,26,89],project:[15,45,23],matter:23,database_password:[15,45,79],minut:[0,23,15,60,85,2,25,61,64,45,26],queue_wakeup_aft:23,celery_amqp_consumer_queu:[54,23],runner:[1,23],mind:[83,0],get_or_cr:25,manner:2,increment:[41,15,31,25,23],seem:45,mytask:[83,15,2,21,23],seek:[15,23],strength:18,recreat:23,my_taskmeta_collect:45,latter:65,especi:[15,18],stripped_titl:49,snow:18,client:[23,15,48,2,31,79,20,51],eagerli:23,sig_ign:63,copi:[52,46,23,15,2,19],though:[83,15,26,23],usernam:[2,89],store_errors_even_if_ignor:26,object:[83,34,0,89,90,23,15,85,49,2,25,87,65,45],regular:[56,0,89,23,55,47,15,1,45],bsd:56,task_status_pend:41,tradit:25,don:[34,0,23,56,15,25,45,26],click_count:25,doc:[0,23,15,49,92,79,45],worker_shutdown:20,doe:[45,75,92,23],declar:23,wildcard:48,dot:[87,48,89],periodic_task:[15,0,23],random:18,restore_taskset:22,syntax:[15,2,23],protocol:[33,3],verbose_nam:[2,25],celeri:[85,45,1,75,23],absolut:[52,45,19],layout:19,"373550e8":15,explain:25,configur:23,redis_db:45,busi:2,rich:49,"__call__":23,folder:19,current_domain:2,exception_retry_count:22,watch:15,next:[87,15,48,41],regular_task:15,popitem:46,report:[56,15,45,23],pri0:23,celerybin:23,lock_id:85,bar:[59,23],httpdispatchtask:21,emb:[49,0,23],"public":[0,23],cleanli:23,"44b8":23,staticst:23,ban:89,ignore_sign:63,celery_task_seri:[2,45],respond:23,human:15,fair:23,increment_bi:25,datatyp:89,mandatori:[15,2,89,23],result:23,respons:[2,21,23],fail:[85,23],padlist:87,best:[62,23],awar:[45,89,23],hopefulli:[87,15],databas:23,sigint:23,discoveri:[45,23],simplest:34,feed_url_digest:85,irc:23,approach:2,dissapear:23,celerybeat_pid_fil:23,attribut:[89,23,47,15,2,25,87],extend:[21,23],extens:79,lazi:23,functool:[2,23],article_id:2,expos:21,howev:[83,34,23,15,2,45],com:[0,25,71,23,56,15,49,2,18,79,59,45,21,92],database_engin:[15,45,79],asctim:[45,23],kwd:46,taskregistri:[47,23],height:49,shortcut:[83,34,21,89,23,2],pidlock:23,guid:[33,34,59,92,23,15,49,18],assum:92,reciev:15,recur:59,mydatabas:45,modifi:[52,65,23,89,19],fri:23,three:[83,89,48,23],been:[83,34,7,59,23,47,15,35,31,4,20,45,26,41],trigger:[20,23],interest:[33,23],basic:[23,48,45,19],pageinfo:2,comment_check:2,lifo:46,xxx:23,worker:23,transaction_retri:22,argument:[83,0,89,23,15,62,48,85,21,4,87,20,45,41],ae68:23,"__doc__":23,child:23,"catch":[87,23],store_result:22,default_backend:23,"__repr__":23,servic:[61,15,3,23],properti:[61,15,48,23],commerci:2,calcul:[60,25],publicli:23,applic:[83,21,89,23,15,48,49,2,86,25,4],tabl:[52,23,15,19,83,45],kwarg:[85,61,35,89,22,23,47,15,48,30,2,25,4,87,20,64],conf:[23,33,15,52,19],coni:71,tediou:0,md5_constructor:85,"0x47b7d70":87,perform:[59,34,15,62,23],suggest:56,celeryd_opt:23,default_rate_limit:26,complex:[15,2,23],split:[87,15,23],sat:23,complet:[83,34,23],evid:23,hang:23,hand:25,delight:15,fairli:45,rais:[83,34,0,89,22,23,47,15,2,31,87,41],engin:[45,79,23],all_stat:7,parse_pag:2,scenario:[59,15,2],opalfe:23,thu:[45,23],inherit:[34,23],contact:[15,48,23],thi:[52,0,1,30,2,31,4,56,83,34,65,59,61,79,39,41,92,15,85,86,18,19,87,20,64,45,21,89,22,23,48,25,26,51],everyth:[83,34,15,59,48,86,19],identifi:[59,2,26,45,23],just:[45,92,23],laptop:59,bandwidth:2,list_queu:15,celery_default_exchang:[54,15,45,79],yet:[83,34,0,23,15,2,45],languag:[59,15,0,21,89],previous:23,"0x101d17910":2,easi:[21,92,23,79,2,49,25,19],had:[49,2,23],is_valid:2,save:[59,2,25,18,23],"3px":49,celeryd:23,ends_in:60,supervisord:23,mayb:[15,89,25],preserv:23,broker_vhost:[83,34,23,15,79,45],celeryq:[25,23],background:23,database_nam:[15,79,45,23],httprespons:[21,23],everymondaymorningtask:61,daemon:[45,23],interval_start:87,specif:23,arbitrari:[15,23],negat:23,unittest2:23,channel:[56,48,25,23],djangofe:85,result_backend:26,underli:23,www:[49,15,23],right:[83,34,23,15,85,2,25],old:[2,23],manual:[2,15,0,89,23],interv:23,somehow:35,intern:[33,15,23],thinkingcactu:49,bore:0,successfulli:[83,34,7,23,15,48,64,41],myperiodictask:[61,15],total:[26,41],djangoproject:[45,92,79],admnistr:48,subclass:[0,23,15,2,25,21],cnf:15,asksol:15,tracker:[77,15],cnn:15,condit:[2,0,22,23],foo:[87,83],localhost:[83,34,23,15,48,18,79,45],core:[23,15,85,2,45,26],plu:23,sensibl:23,celery_default_rate_limit:[2,45],promot:0,repositori:[59,18],post:[15,2,21],"0px":49,peev:15,unsaf:31,send_celery_task_error_email:23,postgresql:23,task_retri:2,slightli:65,commit:15,unbantask:89,tombston:[59,2,26,45,92],mycustom:23,on_task_init:[86,51],"float":[2,23],reset_broker_connect:23,bound:48,down:23,slurp:23,wrap:[34,31],git:[59,15,18],wai:[18,23,15,48,2,25,92,65,89],support:[45,23],happi:[0,49],avail:[83,34,0,89,23,15,48,2,31,59,45,26],width:49,gid:23,wordpress:2,overhead:2,fork:[15,23],map_async:[2,23],form:[2,21,41],altogeth:2,ace01fa4f91d:15,sqlalchemi:15,heap:65,"true":[83,34,46,25,23,15,85,60,49,2,31,87,92,45,26],freenod:[56,0,71,25],reset:[63,15,23],attr:87,maximum:[23,59,2,31,87,45,26],tell:0,celery_broker_connection_retri:[45,23],more:[85,83,34,0,89,61,23,15,48,49,2,18,59,45],emit:23,adopt:25,"abstract":[2,0,23],diagnost:2,celeryconf:[55,1],exist:[85,0,79,48,23],plan:15,trip:23,password:[83,15,2,34,45],catchabl:15,celery_amqp_routing_kei:23,tip:[0,62,23],refactor:23,tim:49,"14px":49,role:25,celeryd_eta_schedul:[26,23],test:[1,23],pymongo:45,roll:[92,23],node:[15,18],"60d9":23,exceptioninfo:[31,23],consid:[64,0,26,31,23],sql:[59,15,25,79],execpt:[2,41],bitbucket:15,receiv:[45,23],longer:[0,23],clickmanag:25,increment_file_count:15,ignor:[59,63,15,23],time:[45,1,23],push:59,feedimport:85,result_exchang:26,broker_connection_timeout:26,skip:[15,92],consum:[0,25,23,15,31,45,89],focus:[59,0],celery_ignore_result:[15,2,45,23],per:[2,15,0,25,23],primer:62,decid:[2,15,0,23],middl:[15,25,23],depend:23,bpython:83,pop_valu:31,flash:49,readabl:89,dump_schedul:23,countdown:[59,15,23],retri:[45,23],shpinx:[52,19],text:[56,49,25,23],myperiod:15,sourc:[23,15,18,19],string:[23,60,2,4,87,45,26,41],word:[15,48,89],run_test:[30,15,92],exact:[59,48,89],cool:23,administr:[59,71],level:[15,23,59,2,45,26],did:[15,23],die:23,iter:[87,31,23],execute_remot:2,item:[46,25,48,31,87,37],lock_expir:85,div:49,round:[15,60,23],dir:[52,19],prevent:15,pickleabl:23,sign:2,add_file_metadata_to_db:15,relocat:18,port:[15,79,21,45,23],establish_connect:[89,23],repli:23,get_logg:[61,15,2,85],remain:[60,23],current:[0,89,90,23,63,15,48,60,2,65,25,4,39,45,41],celeryinit:[33,15,45,23],eventdispatch:23,filenam:[89,15,26,23],gener:23,celery_broker_connection_max_retri:[45,23],explicitli:[15,0,23],modif:23,task_nam:[2,23],address:[2,18],freq_min:23,along:23,wait:[45,23],mysit:[25,23],queue:[45,23],related_nam:86,behav:23,pub_dat:2,camqpadm:23,petersson:[15,49],taskset:[54,20,22,23],extra:23,modul:[33,34,59,23,54,15,3,83,45],prefer:23,celery_http_gatewai:21,memori:[15,2,23],sake:89,long_descript:23,univers:[59,2],visit:23,database_us:[15,45,79],live:[2,86,23],handler:[64,63,23],carrot_backend:[15,79,23],checkout:15,plug:[79,48,71,23],djangoapp:[33,23],maypp:92,peopl:15,asserttru:92,finit:31,visual:64,tandem:25,templat:[52,19],easiest:[2,18],content_typ:4,install_signal_handl:63,freq_max:23,tokyo:23,prepar:23,uniqu:[15,59,48,2,25,4,87,41],descriptor:23,argspec:87,can:[85,23,92,45,19],celery_always_eag:[45,92,23],add_vhost:18,nearest:[60,23],f2cc8efc:21,puriti:15,stream:49,curri:[2,23],load_set:[90,23],levelnam:[45,23],topic:[89,23,15,92,45,26],abort:[33,23],libmemcach:23,alwai:[49,15,2,26,23],sundai:[60,23],chroot:23,multipl:[61,0,26,45,23],ping:[2,23],modulenam:87,write:[83,0,92,49,15,48,2,25],anyon:[59,0,23],pure:23,nyc:87,mark_as_failur:23,map:[23,15,2,31,79,87,45,26],product:[0,83,34,15,23,59,48],max:[35,23,15,2,31,87],clone:[59,15,18],myworker1:23,usabl:[59,0],ab8bc59:23,mac:[52,23,75,49,18,19],dmap_async:23,mai:[23,15,48,2,45,26],log_level:26,data:[45,3,23],grow:23,is_spam:2,regularli:23,practic:[62,25,23],explicit:45,predic:87,inform:[33,34,23,15,18,83,45],"switch":23,jail:23,celery_store_errors_even_if_ignor:[45,23],talk:49,taskprocessqueu:23,every_morn:23,celeryproject:[59,0],default_routing_kei:26,equip:71,cold:23,still:[45,23],entiti:[89,23,15,48,2,79],group:0,monitor:23,celeryd_empty_msg_emit_everi:23,norwai:48,prev_languag:15,celery_track_start:[45,23],window:23,imoport:23,mail:[59,45,23],main:[39,65,31],non:[87,48,15,26,23],within:[48,23],myvhost:[83,34,15,18],encod:[21,48,23],pogorzelski:49,initi:[33,45,23],aquire_lock:85,now:[83,34,0,18,23,15,48,60,49,2,25,87,59,31,89],discuss:56,introduct:77,term:[15,48,23],workload:59,name:[85,45,23],didn:[83,34,23],revert:[2,0,23],separ:[0,89,23,15,48,87],miracle2k:23,attributeerror:87,errback:87,kral:15,domain:2,replac:[15,23,54,59,2,25,65],arg2:[21,89,23],arg3:21,continu:[0,25,18],contrib:[33,75,92,23],backport:23,happen:[83,34,59,22,23,15,85,2,56,51],broker_port:[83,34,23,15,79,45],shown:[23,4],accomplish:[85,15],reload_taskset_result:23,profil:[18,23],stompbackend:15,fetch_pag:2,modelform:2,correct:92,earlier:[83,34,25],urlpattern:25,broker_connection_max_retri:26,million:[59,0,25],ajax:59,orm:[15,45,23],mysqld:15,theori:15,org:[0,23,15,49,25,59,45],card:89,render_templ:15,couldn:23,synchron:[59,0,31],thing:92,place:89,errno:23,charfield:2,think:25,first:[92,15,45,18,23],oper:[0,35,22,23,59,48,31,87],template_nam:2,onc:[45,23],celery_amqp_consumer_routing_kei:[54,23],mediatask:15,yourself:[2,89],celery_amqp_exchang:[54,23],djangounicodedecodeerror:23,fast:[45,23],deleteexpiredtaskmetatask:[2,23],open:[0,23],tomorrow:89,size:[87,49,23],given:[2,86],silent:[2,0],convent:34,mattrgett:87,teardown:23,citi:87,max_length:2,conveni:[61,2,89,23],routing_kei:[15,89,25,23],feed_task:15,pytyr:45,templates_path:[52,19],comment_id:2,specifi:[15,89,23,63,59,2,4,45],broadcast:[15,0,26,23],github:[0,18,23,15,45,59,56],hup:23,mostli:[65,15,45,23],necessarili:[15,48,89],pendingdeprecationwarn:0,than:[59,15,0,92,23],every_monday_morn:[15,23],instanc:[83,34,0,22,23,47,15,61,87,65],gotta:[52,19],constanza:87,viewfil:49,posix:15,balanc:45,posit:[87,20,60,31,23],pre:23,sai:[15,25],mindblow:48,san:49,test_app:15,ani:[83,61,0,59,23,56,15,48,26,2,86,25,87,20,45,21,89],dash:18,deliv:2,processnam:[45,23],celery_default_queu:[15,48,45],techniqu:1,alias:87,kwlist:87,forc:15,ideal:15,take:[25,15,85,2,92,87,26,89],noth:[87,63,0,25],even_time_distribut:23,rate_limit_queue_typ:23,sure:[0,89,23,15,2,61,65,45],reloc:71,trace:[3,23],normal:[34,45,25,23],multipli:[21,45,23],compress:[15,89],celery_seri:89,pair:46,celeryd_medi:[26,23],homepag:[2,0],misconfigur:15,feedimporttask:15,renam:23,later:[59,15,35,25,89],runtim:23,djangotwitt:23,send_task:[15,23],show:[21,23,15,48,2,92],celery_concurr:[83,34],atom:[85,23],concurr:23,help:[77,83,34,23],slot:31,taskmeta:[41,23],onli:[45,1,23],slow:85,transact:[15,22,23],activ:[15,0],written:[15,2,89,25,49],dict:[87,45],copy_file_to_destin:15,get:[52,23,92,45,19],hungryblank:49,repo:18,cannot:[2,89,45],requir:[21,23,15,48,31,4,39,45],yield:[87,26,31,23],redis_connect_retri:[45,23],mediat:[39,23],where:[52,0,89,23,15,60,2,19,87],wiki:77,kernel:[15,18],burst:[59,0,23],unfil:31,celeryd_listen:[26,23],fanout:[26,48],testcas:92,infinit:[87,23],detect:[0,90,23],rupi:49,enough:[2,92],pyredi:3,between:[15,89,23,59,2,87,45,26],periodicworkcontrol:23,across:48,broker_host:[83,34,23,15,79,45],mypars:2,come:[18,23,48,2,25,56],tue:23,similar:21,tutori:[33,15,59,23],improv:[25,23],task_status:41,evict:26,among:45,overview:77,unittest:23,period:23,dispatch:[15,0],featur:23,homebrew:18,cancel:23,supervisor:23,poll:[59,15,48,23],processclickstask:25,mark:[15,23],valueerror:23,thousand:23,resolut:60,celery_max_cached_result:23,"__eq__":23,mikedizon:23,those:[0,23],tasksetmanag:22,"case":[89,34,15,85,23],exchange_typ:[15,25],dynim:23,default_exchang:26,md5sum:85,trick:92,invoc:[59,4],celerymon_log_level:[45,26],margin:49,add_com:2,advantag:[85,92],stdout:23,worri:[15,0,23],destin:[15,2,25,18,23],cluster:[64,59],myapp:[83,15,48,92],subscrib:59,develop:23,author:2,media:48,same:[85,92,23],check:[83,34,23,15,48,2,92,45,26],html:[0,23,15,2,25,19],pad:[87,49],timestamp:64,pai:2,eventu:[15,23],status:[83,41],celery_broker_connection_timeout:[45,23],finish:[45,23],driver:45,someon:48,jirka:23,render_to_respons:2,capabl:[15,2],mani:[83,34,0,89,22,23,15,60,2,59,45],extern:33,sigterm:23,parse_docu:2,appropri:34,framework:[85,15,21,45,23],without:23,titl:[2,49],model:[85,15,3],celery_acks_l:[15,23],store_pag:2,execut:23,mypassword:[83,34,45,18,23],conform:23,excel:[15,25,23],mainprocess:21,rest:[54,15,23],kill:[15,18,23],abil:59,miscellan:3,except:[33,34,23,15,83,64,45],littl:61,blog:[15,49],every_hour:23,exercis:25,"300kb":37,event_exchang:26,real:[0,83,15,59,48,2,25],task_sent:[20,23],read:[34,0,23,55,15,2,18,79,51],arriv:[23,89,4],traffic:[59,0,25],pop:[48,23],default_delivery_mod:26,world:15,celery_task_meta:23,reap:23,mod:63,howsthedotcom:15,integ:[2,89],server:23,benefit:2,either:[15,92,23,59,2,31,87,65,45,89],"_static":19,output:[2,21,23],manag:[33,23,61,3,18,83,45],unrecover:15,"40cd":21,respect:23,celery_default_exchange_typ:[15,48,45],definit:[54,23],achiev:15,moon:21,exit:23,adcthem:[52,19],notabl:15,refer:[33,34,59,23,15,3,83],httpresponseredirect:[2,25],process:[45,23],kwarg2:[89,23],power:[2,89],asap:4,inspect:[87,23],broker:[45,23],broken:23,"__name__":2,unicod:23,send_twitter_statu:2,src:49,central:[59,0,23],ack:[15,48,25,23],"419e46eb":23,degre:[15,2,23],create_user_task:2,release_lock:85,tsigularov:15,unready_st:7,baseload:51,subsystem:2,get_cls_by_nam:87,ts_re:23,robertpogorzelski:49,surviv:[59,48,25,23],strip:23,log:23,celery_send_task_error_email:[2,26,45,23],aren:19,get_loader_cl:90,lol:18,strict:15,interfac:[39,15,25,23],low:89,lot:[52,0,89,23,15,48,2,19],lambda:[85,15],tupl:[87,41,31,23],regard:25,set_permiss:18,updatestatusestask:23,faster:[26,23],"4e73":23,possibl:[0,7,25,22,23,15,48,85,2,18,26,41],"default":23,picki:25,bucket:[59,3],day_of_week:[61,15,23],comment_author:2,acks_lat:23,autocomplet:48,embed:23,comment_author_email:2,expect:15,redis_password:[45,23],uid:23,creat:[45,1,23],multipleobjectsreturn:23,taskpool:[87,23],file:[52,23,19],on_retri:23,fill:31,again:[83,34,23,15,48,87],idangazit:49,googl:[0,25,18],prepend:15,field:[41,23],cleanup:[52,19],you:[52,0,1,31,56,83,34,59,61,79,41,92,15,85,18,19,45,21,89,23,48,25,26],architectur:59,poor:89,createusertask:2,registri:[33,61,45,3,23],sequenc:45,redis_port:45,docstr:23,track:[83,34,2,26],redis_databas:45,pool:[59,64,15,3,23],cpo:18,directori:[52,23,15,18,19,56],celery_backend:23,descript:15,schedulecontrol:23,potenti:[0,23],"__ss_2089054":49,cpu:[45,26,23],unset:[45,26],all:[85,45,23],osx:18,alreadyregist:35,improperli:35,concept:[0,79],deprecationwarn:[0,23],tahoma:49,follow:[52,21,25,23,4,15,75,54,83,2,18,19,59,45,89,51,92],disk:[25,18,23],articl:[15,2,49],init:[55,75,23],program:[15,23],"9e39363125a4":23,introduc:[2,0,23],global:[0,89,90,23,15,2,59,45,26],testkei:48,celeryconfig:[55,34,15,45],faq:[55,15,0,23],offlin:[64,23],util:[33,23,15,85,3,18],worst:2,failur:[83,34,7,21,23],nvkep:15,"0x101d1f410":2,clickmunch:25,list:[83,34,23,15,18,45],emul:[45,23],adjust:92,stderr:[45,26,23],small:[87,2],louie:15,"94fwdd":23,rate_limit:[2,23],periodictask:[61,15,0,25,23],sync:[79,23],rate:[15,23,59,60,3,45],design:2,pass:[0,89,23,59,2,87,65],further:25,myusernam:45,what:23,sub:59,clock:[3,23],sun:[60,23],section:[49,23],save_report_somewher:15,abl:[52,0,89,23,15,2,92,19,59,83],overload:59,delet:[59,25,23,15,85,31,45],abbrevi:2,version:23,method:[83,34,21,89,22,23,2,86,25,45,26,51],full:[34,23,0,2,31,87,56],caqmadm:33,behaviour:[45,23],shouldn:[15,2],mysecret:15,standard:[52,0,23,15,48,19],"17t12":4,valu:[83,34,46,92,22,23,59,48,60,49,2,31,79,87,20,45,26],celerybeat_max_loop_interv:[45,26,23],search:33,memcach:[85,2,45,23],autoregist:[0,23],amount:2,pick:[83,34],djangosnippet:23,celery_result_backend:[34,15,45,23],via:[59,0,21,45,23],requestcontext:2,celeryd_pid_fil:23,apply_async:[83,34,89,23,54,15,45],put:[92,31,25,83],href:49,famili:49,html_theme:[52,19],decrement:31,establish:[89,45,26,23],taskdaemon:23,select:[39,59,89],clockservic:39,ctrl:23,regist:[0,35,23,55,47,15,2,25,61,45,26,41,89],two:[83,34,59,25,23,15,85,2,31,87,92,65,89],coverag:23,celerybeat_log_fil:[45,26],morn:[15,23],taken:[55,15,89,23],basi:0,minor:[15,0],oebfar:71,desir:23,hundr:2,sharedcount:31,broke:23,particular:[61,63,15],known:[15,23],cach:23,none:[83,34,46,23,63,15,60,2,31,87,45,26],hour:[0,37,23,15,60,2,61,89],dev:[45,92],myhttplib:2,amqp_:23,delivery_tag:48,def:[83,34,21,92,61,23,15,85,2,25,87,59,89],prompt:48,challeng:2,registr:23,share:[2,0,23],accept:[20,64,2,23],pong:[15,23],pickledobject:23,cours:[15,89,92],rather:18,anoth:[85,45,19],snippet:23,"gr\u00e9goir":23,simpl:[15,92,18,23],akismet_kei:2,css:[52,19],isn:[15,2,79,49],resourc:[77,15],camqadm:[33,23],nose_verbos:23,pythonpath:[34,23],reflect:23,unlink:23,associ:15,stabil:23,"short":[87,2,48,23],confus:15,celery_amqp_connection_max_retri:23,hashcompat:85,django:[85,45,1,23],caus:[2,23],callback:[33,59,23,15,87,64],store_page_info:2,egg:[52,23,19],feed:[85,15,79,23],tt_port:[45,23],improperlyconfigur:[2,35,23],soon:[15,26,31,23],commonli:0,through:[48,23],reconnect:23,paramet:[87,47,60,31,22],style:49,arial:49,celeryresult:[26,23],psycopg2:23,late:23,pend:[7,0,45,41,23],auxww:15,might:[25,23,15,48,2,31],alter:[23,19],tri:[15,86,23],good:[25,23,15,2,31,45,89],"return":[83,34,7,31,22,23,47,15,89,60,85,2,59,25,90,87,20,45,21,46,92],get_interval_from_databas:15,"422f":23,timbul:49,subtask:23,"6cf8":23,detach:[18,23],anyjson:[21,23],authent:[15,45,23],mysteri:23,easili:[59,21,23],token:[59,3],innodb:15,intervent:15,compatibl:23,launchd:23,week:[61,23],exhaust:[87,2,45],get_async:21,limitedset:[37,31],timelin:33,idea:[0,89,23],crontab:[61,15,23],realli:[15,2,23],on_worker_init:[55,86,51],connect:23,test_label:30,todo:[48,23],event:[33,15,59,45,23],assertequ:92,robert:49,publish:[48,2,26,25,23],research:2,print:[15,89,23],shockwav:49,foreground:[83,34],advanc:[2,23],pub:2,reason:[56,15,21,23],base:[54,33,59,3,23],ask:23,earliest:89,mytaskmodule2:15,mytaskmodule1:15,worker_readi:20,thread:[3,31,23],launch:[15,23],delivery_info:[2,48,23],celeryev:26,perman:18,heartbeat:[64,3,23],assign:23,logfil:[83,21,23,15,2,87,45],celery_amqp_connection_retri:23,feel:15,exchang:[89,23,15,25,79,45,26],misc:89,number:[83,34,59,31,23,15,48,2,25,4,87,45,26,41,89],done:[83,34,21,92,23,15,2,18,89],least:[89,25],stdlib:18,blank:2,stabl:23,miss:[87,65,23],differ:[89,59,15,48,23],guest:[45,48],script:23,interact:23,reentrant:15,spam_filt:2,statement:89,natur:23,illeg:18,celerysecret:15,scheme:[23,59,15,21,4],celeryd_prefetch_multipli:[45,26,23],schema:79,luckili:15,option:[45,23],auto_delet:23,get_absolute_url:2,fromkei:46,part:[23,2,85,49,92,79,20],pars:[60,23],consult:[83,89],albeit:25,kind:23,lowpri:89,grep:15,whenev:[34,1],seamlessli:15,increment_click:25,stall:23,store:[83,34,59,22,23,15,48,2,18,45,26,41],str:60,stale:[15,23],exception_st:7,comput:15,packag:[52,23,59,18,19,45],expir:[37,85,26,31,23],dedic:[0,89],"null":23,imagin:[15,2],built:[33,3,23],equival:23,remote_addr:2,self:[25,15,2,85,61,92,87],also:[83,61,0,18,23,15,48,2,25,59,45,89],worker_init:20,build:[23,59,15,19],auto_declar:48,distribut:[56,59,15,23],"442b7124132c":23,previou:[15,0,31,23],reach:[87,0],most:[59,15,25,22,23],plai:25,thank:[49,15,23],jerzi:23,eceleryd:0,testproj:23,exc:[87,2,35],mongo:45,clear:[46,23],"4e52":34,celery_amqp_connection_timeout:23,image_task:15,clean:[48,25,23],amqp_host:23,eagerresult:[45,23],microsoft:2,awesom:[0,49],maxretriesexceed:2,name_change_request:23,nasdaq:89,session:[83,48],broker_us:[83,34,15,45,23],taskmeta_collect:45,fine:15,find:[83,34,59,23,15,2,86,51,31,41],pretti:45,process_upload:15,solut:[15,23],set_mp_process_titl:63,hit:[15,48],date_don:41,performan:15,emailfield:2,cahng:23,poolwork:23,restart:[48,15,35,23],target:23,positionqueu:31,emfil:23,statist:23,slidesharecdn:49,remov:[0,46,18,23,54,15,31],wrote:25,set:[52,23,19],dump:23,periodictaskmeta:41,task_status_retri:41,startup:23,see:[56,83,34,0,25,22,23,55,15,48,2,51,18,87,59,45,31],signifi:48,arg:[35,89,22,23,47,15,48,30,2,4,87,20,64,46],"0x101d1f4d0":2,close:[89,23,15,48,2,25,45],dateutil:23,inconveni:15,someth:[34,89,23,15,62,85],particip:56,reus:23,experi:15,altern:[15,2,23],task_statu:23,find_related_modul:86,add_us:18,javascript:[52,19],isol:15,incident:23,succeed:[64,23],solv:[2,25,23],classnam:87,both:[15,0,48,23],last:[87,46,48,41],celery_amqp_exchange_typ:[54,23],wed:23,alon:49,testnoerror:92,"_templat":19,context:[15,2],forgotten:23,pdf:[2,49],whole:23,load:[83,90,23,15,2,86],simpli:[65,2,23],point:23,instanti:[87,47],schedul:[45,23],arbitrarili:59,header:[15,48,4],total_run_count:41,carrotlisten:23,param:[21,49],shutdown:23,throughout:23,backend:23,due:23,empti:[23,15,31,4],swf:49,user_ip:2,whom:48,secret:79,"9hom6t":23,strategi:[62,23],taskpublish:23,imag:[15,48,18,89],convert:[65,60,23],func:23,task_result_expir:26,botland:71,convers:23,look:[34,21,89,23,2,87],arg1:[21,89,23],celeryd_log_fil:[45,26],import_fe:[85,15],pace:89,"while":[15,89,23,59,48,25,87,45],match:[15,48,89],abov:[89,15,48,79],error:[45,92,23],fun:87,broker_:23,imagerotatetask:89,leland:49,robin:15,loop:23,earli:23,celery_amqp_publisher_routing_kei:[54,23],ordereddict:46,max_client:31,readi:[83,34,7,23,0,20,59,65],readm:[15,23],itself:[15,79,75,23],honza:15,around:[15,2,92],decor:[23,83,34,59,33,15],celeryd_task_log_format:[26,23],hexdigest:85,event_exchange_typ:26,sqlite3:45,broker_connection_retri:26,higher:[89,23],optim:[0,25],leopard:18,alert:71,moment:[45,23],user:[33,34,0,92,23,56,15,83,18,59,45,89],broadcast_exchange_typ:26,robust:59,wherev:92,implement:[89,23,15,48,25,64],euro:89,log_result:15,lower:[26,23],a6e1c5ad:23,machineri:15,discourag:25,older:31,entri:[2,23],propog:23,amqp_port:23,pickl:[45,23],person:[2,19],expens:2,connnect:23,spend:45,mon:[15,60,23],explan:48,itemgett:87,"2a14":21,shape:0,mysql:[45,23],snappi:15,liu:49,sinist:15,theoret:22,eager:23,bin:[33,18],format:[21,23,0,48,4,45,26],big:31,bit:[15,23],outright:0,lost:[59,15,26,45,23],worker1:23,signal:[63,33,39,15,23],worker2:23,resolv:18,collect:[15,89,45],subtask_id:23,celerybeat_log_level:[45,26],popular:89,send_increment_click:25,encount:23,tmpfile:15,often:2,babii:23,acknowledg:[48,15,26,25,23],some:[85,92,23],back:[83,45,18,23],"30a":23,virtualenv:23,pet:15,celery_taskmeta:[45,23],auto_add_now:2,mathemat:49,larg:[2,23],"8eac":23,nose:23,machin:[59,2,89,45],run:[45,23],vitali:23,timeutil:3,sacrif:23,step:[15,23],meantim:2,from:[83,34,18,23,15,85,92,45],binding_kei:[15,48],zip:23,syncdb:[83,45,79,23],materi:48,c053480b:23,shini:[18,23],delivery_mod:23,maxlen:31,allowfullscreen:49,unfilledposit:31,exc_info:31,block:[49,15,2,45,23],to_i:21,"__future__":89,helvetica:49,compressvideotask:89,exceed:[87,2,35,45],ensur:[1,23],announc:[0,23],durabl:23,inclus:23,spam:2,fledg:0,task_statuses_choic:41,addtestcas:92,custom:[45,1,23],cf6a:23,includ:[23,54,59,48,86,19],suit:23,forward:[2,25],properli:[15,2,23],picklefield:23,serif:49,link:33,translat:[15,2,25],delta:60,line:[33,34,83,18,23],info:[34,23,15,61,3,45],utc:23,"0x101d1f510":2,consist:[85,65,59,48,23],munin:71,task_seri:26,caller:23,issue4607:23,planet:87,"export":18,booleanfield:2,addtask:2,constant:26,refreshfeedtask:15,flush:23,doesn:[92,23],repres:48,incomplet:15,chat:56,guarante:[2,89,25],running_appl:18,baseasyncresult:[15,23],amqp:23,task_is_eag:2,invalid:[2,21],default_retry_delai:2,deseri:89,update_page_info:2,mongodb:23,delete_expired_task_meta:2,amqp_serv:23,is_du:[15,23],algorithm:[59,0,23],mimetyp:[21,23],evenli:23,taskcontrol:23,"8b24":23,far:[15,2,23],hello:23,code:[0,18,23,15,2,25,59],partial:23,queri:[59,25,18,23],send_ev:26,documen:48,send:[45,23],granular:[45,23],generate_report:15,noop:87,getargspec:[87,23],sent:[83,34,89,23,15,48,2,25,20,64,45,26],rollback:[22,23],whichev:18,celery_mongodb_backend_set:45,"88d0":23,comment_cont:2,webhook:[33,0,59,62,23],djangobrokerconnect:25,event_seri:26,recip:1,magic:[2,23],for_url:25,button:2,michael:[2,48],"try":[92,22,23,15,85,2,18,87,45,26,89],race:[2,0,22,23],django_project_dir:23,pleas:[83,34,0,25,23,56,15,75,2,31,45],impli:[48,23],smaller:2,myuser:[83,34,23,15,18,79],crop:89,cron:[61,59,23],video:[48,89],earth:87,download:18,click:[33,23],append:[45,2,26,25,89],compat:[3,23],index:[33,59,3],celerystat:23,font:49,f1af57789758:23,anton:15,executewrapp:23,"8d30a464edf":23,access:[83,34,23,15,48,85,2,18],experiment:[15,23],whatev:[34,15],involv:[15,2],timeouterror:[35,23],run_everi:[61,15,25,23],got:[15,23],bodi:[2,48,25],celeryd_pool:[26,23],let:[83,34,89,23,15,48,2,25],ubuntu:23,myhost:18,becom:[15,31],sinc:[83,15,2,21,89],great:49,mailinglist:[48,23],weekdai:60,accept_callback:23,typic:48,chanc:[87,15],shovel:71,revok:[59,15,3,23],appli:23,app:[15,86,92,23],feed_url_hexdigest:85,api:[33,59,23],redi:23,testqueu:48,encapsul:2,usd:89,feb:49,usa:48,commun:[59,34,15,89,18],upgrad:[15,0,23],"throw":23,websit:18,few:[15,2],sort:[65,23],impress:[15,0],about:[34,0,37,23,56,15,49,2,18,20,45,89],ugettext_lazi:[2,25],rabbit:[15,18,23],actual:[92,15,25,18],annoy:56,taproot:79,account:[59,0,60],retriev:[59,48,23],alia:[90,23],when:[45,92,23],annoi:0,carrot:[33,45,23,15,65,26],obvious:15,fetch:[2,23],get_task:22,sqlite:[83,23],malform:23,tar:59,hostag:15,lock:[85,15,23],sudo:[15,18],high:[59,15,89],tag:48,celery_default_delivery_mod:23,tab:48,onlin:[64,23],serial:[59,15,3,45,23],delai:[45,92,23],uuid4:87,georg:87,task_status_failur:41,default_queu:26,instead:[0,79,23,54,15,48,2,25,19,87,45],stock:89,wold:2,overridden:[45,23],stop:23,retrytaskerror:[2,35],reset_connect:23,scutil:18,drop:2,"95b45760":23,loglevel:[34,23,15,2,87,45],bind:[89,15,45,25,23],counter:[33,31,23],setproctitl:[63,0,23],element:87,issu:[56,15,25,23],tasksetresult:23,allow:[83,23,30,2,18,26],ignore_result:[15,2,26,45,23],retval:[20,34,21,83],valid:47,movi:49,move:[65,48,23],turnkeylinux:49,tyrant:23,consume_queu:31,"58fb":23,perfect:25,celery_config_modul:34,nonfunct:0,purg:[15,48],resend:[2,23],bridgen:48,dad:59,crash:23,greater:[83,34,23],"__getitem__":23,python:[52,34,59,23,4,15,1,61,3,19,83,45],auto:45,dai:[0,23,59,60,61,25],auth:2,mention:1,billiard:23,front:23,tasktyp:2,unregist:47,multiprocess:[59,63,15,3,23],anyth:92,edit:[52,2,19],februari:[73,62,38,11,77,3],mode:[83,34,26,48],playingwithwir:[15,49],redeliv:48,bump:[25,23],chunk:87,render_to_str:15,meta:[45,2,25,22],"static":[49,19],celery_task_result_expir:[45,23],our:[34,89,23,15,48,92,56],patch:[56,3,23],special:2,out:[0,15,23,59,35,41],variabl:[34,23],reload:18,bad:2,signal_nam:63,"39a2":34,rel:[52,23,0,60,19,45],dhcp:18,ref:[45,79],ready_st:7,common:[59,15,1,35,23],shut:23,insid:[15,0],"889143a6":34,standalon:34,dmap:23,dictionari:[46,23,48,31,4,45],usual:[15,2,48,23],releas:[23,73,15,11,77,3,65],could:[34,21,22,23,15,48,2,25],membership:31,run_tim:26,datetimefield:2,length:31,outsid:[15,89,23],celeryd_log_level:[45,26,23],softwar:56,suffix:45,celery_default_amqp_exchange_typ:54,date:[23,77,59,3,4,41],expand_abbrevi:2,"837b":34,facil:45,retry_over_tim:87,prioriti:23,"long":[0,23,15,2,86,87,45],start:[45,23],unknown:[7,23],licens:77,system:[15,23],messag:23,feedaggreg:15,celery_default_routing_kei:[54,15,48,45],akismet:2,"0x101d17890":2,termin:[34,15,23],d80d33efb22d:34,shell:[33,83,15,23],viktor:[15,49],gotcha:2,shallow:46,rst:23,textfield:2,exactli:89,haven:[79,23],rss:[85,15],amqp_connection_retri:23,structur:[3,37],charact:48,verify_kei:2,quickban:89,celery_import:[34,15,23,55,2,45],"function":[83,34,0,89,23,15,48,2,25,87,21,41],mycorp:2,py2:[52,19],have:[52,23,85,92,19,45],reserv:23,need:[83,34,0,25,23,54,89,15,48,2,18,79,61,45,21,31,92],idan:49,autodiscov:[86,23],maxretriesexceedederror:35,unexpect:85,rout:23,mid:15,builtin:[33,15,3,23],which:[83,34,0,18,23,89,15,48,60,46,2,25,87,59,45,26,41,92],combin:[59,15,0],on_success:23,singl:[34,0,23,15,48,85,25,87,59,45],d5owmr:23,unless:[15,48,45],who:[15,23],last_run_at:41,discov:86,frmo:2,awk:15,xarg:15,database_:79,why:23,slideshar:49,url:[59,85,15,23],amqp_vhost:23,gather:[89,25],request:[21,89,23,15,2,25],inde:2,pidfil:23,brew:18,f1c77c94beeb:21,indi:49,fact:59,gazit:49,taskwrapp:[65,23],verbos:23,celery_queu:[54,15,48,45,79],redirect:23,pyweb:49,much:[89,23,15,25,31,87],forev:[87,45,26,23],should:[45,1,23],won:[92,23],local:[30,45,26,18,23],celeryctl:26,insight:71,contribut:[77,23],disable_rate_limit:26,beat:23,pypi:[59,0,45],get_full_cls_nam:87,filter_typ:47,format_except:31,celery_send_ev:45,increas:[87,45,25,23],awai:[2,23],enabl:[0,15,23,59,21,92,79,65,26],twice:[22,23],redis_host:45,stuff:25,integr:15,contain:[83,34,0,37,23,15,1,48,2,25,87,45,41],cachet:23,celeryd_daemon_log_level:23,view:[33,23],b9a0:15,broadcast_queu:26,trixx:71,app2:15,temporarili:59,email_address:2,statu:[21,92,22,23,59,2,18,45,41],correctli:23,pattern:[15,25],task_postrun:[20,23],phpapp01:49,favor:23,state:[33,34,15,64,83],progress:[59,23],warren:15,email:23,celery_load:[54,23],kei:[85,45,23],"2px":49,job:[59,15,3,23],entir:0,disconnect:[64,23],task_prerun:[20,23],addit:[34,89,23,15,48,2],pythonpap:49,current_load:[90,23],plugin:48,admin:[23,15,48,18,45,26],celeryd_log_format:[45,26,23],equal:46,etc:[15,18,23],eta:[23,15,4,20,64,65,26],iterqueu:25,repeatlast:87,comment:2,abrubtli:23,notregist:[47,35,23],ssplayer2:49,read_configur:[55,86],ipython:83,cxc:18,commentform:2,workcontrol:[39,23],rpm:23,quit:[2,0,23],tt_host:[45,23],yaml:[15,89,59,2,4,45,26],set_process_titl:63,compon:[39,15,3,23],updatereccomendationstask:89,json:[21,89,23,15,2,4,59,45,26],immedi:[89,23,15,2,31,65],ghettoq:79,testexchang:48,assert:48,togeth:89,bull:49,asyncresult:[83,34,22,23,15,2,45],plain:25,align:[21,49],harder:23,defin:[34,45,92,23],default_exchange_typ:26,wild:89,amqp_password:23,"85ad":21,almost:2,site:[52,47,2,25,19],celeryd_concurr:[15,26,45],welcom:[56,21,23],refetch:23,cross:59,member:31,handl:[15,89,51,23],failwhaleerror:2,wakeup:23,backtrac:23,competit:23,workdir:23,http:[33,56,92,23,54,15,18,59,45],hostnam:[15,45,23],localcach:31,effect:[2,26,23],handi:[83,34],message_count:48,sooner:15,php:49,expand:2,event_routing_kei:26,off:[2,48,25,23],well:[59,15,0,25],thought:49,weblog:2,exampl:[52,23,19],choos:[2,89,18,23],latest:59,less:15,mnesia:18,simultan:[15,45],platform:23,web:[59,15,0],"30am":61,priorit:15,add:[83,34,0,18,23,15,48,85,2,31,79,59,45,92,89],reconsid:2,logger:[71,23,15,2,85,61],smart:23,rememb:[65,46,23],get_statu:22,agnost:0,"26px":49,"86a8":23,five:23,know:[83,34,89,15,85,2],delta_resolut:[60,23],loader:[33,23,54,15,3,45],insert:[46,25],like:[83,34,0,89,61,23,56,15,48,2,25,87,59,45,26],success:[83,34,7,23,21,92,45,41],incred:23,corpor:2,broadcast_exchang:26,necessari:[86,48],page:[33,21,23,15,1,2],"11px":49,context_inst:2,bdist_rpm:23,cache_backend:[45,26],revers:2,"12px":49,acquire_lock:85,captur:[59,26],twitter:2,reset_sign:63,contin:2,with_stat:89,superclass:2,pingtask:[23,15,2,4],proper:23,home:[2,18],is_don:23,librari:[52,21,79,15,2,19,45],trust:2,buildout:23,leak:23,avoid:92,slide:49,executeremotetask:[2,23],estim:[23,89,4],swartz:49,process_click:25,preload:[15,2],redis_timeout:23,encourag:[56,15,23],investig:[59,2],importerror:23,imaginari:85,usag:[56,55,41,23],host:[83,34,15,59,18,79,45],although:23,slug:2,panel:23,sbin:18,rare:15,verbose_name_plur:[2,25],constructor:23,discard:23,vejrazka:23,refresh_feed_slic:23,disabl:[15,0,26,45,23],own:[89,23,15,25,2,92],easy_instal:[59,15,45,23],automat:[83,34,59,23,47,0,48,2,86,45,26],interval_max:87,weather:48,pointless:15,merg:23,transfer:[2,89],rotat:89,intellig:89,get_curr:2,clicks_for_url:25,"var":[15,23],individu:25,favorit:15,deliveri:[89,2,26,25,48],simplejson:23,model_object:2,keyerror:[87,23],curernt:23,celerymon_pid_fil:23,gain:[2,23],oauth:2,eas:15,highest:[2,89],bc61:15,count:[23,15,48,25,26,41],made:[59,89,23],whether:[2,21,45,48],app4:15,app3:15,displai:[0,49],app1:15,celery_disable_rate_limit:[2,45],asynchron:[2,59,15,0,49],below:15,limit:[15,23,59,3,31,45],otherwis:65,problem:[92,15,79,25,23],evalu:45,"int":[23,2,21,31,4],pid:23,twist:23,replica:0,pip:[0,15,23,59,79,45],probabl:[52,34,59,92,23,15,25,19,83],detail:[2,0,89,23],virtual:[83,34,15,18],other:[0,15,89,23,59,48,2,92,21],"4ce8":23,futur:[89,23,15,39,56,64],branch:15,celery_result:45,xvfz:59,repeat:15,"class":[33,34,23,54,15,85,61,92,83],mondai:[61,15,23],debian:[75,23],mitemgett:87,colliss:87,reliabl:[15,31,23],delay_task:23,rule:48,yadayada:23,sasl:18,cookbook:23},objtypes:{"0":"py:module","1":"py:method","2":"py:data","3":"py:class","4":"py:function","5":"py:attribute","6":"py:exception","7":"py:classmethod"},objnames:{"0":["py","module","Python module"],"1":["py","method","Python method"],"2":["py","data","Python data"],"3":["py","class","Python class"],"4":["py","function","Python function"],"5":["py","attribute","Python attribute"],"6":["py","exception","Python exception"],"7":["py","classmethod","Python class method"]},filenames:["releases/1.0/announcement","cookbook/index","userguide/tasks","internals/index","internals/protocol","reference/celery.task.http","internals/reference/celery.worker.scheduler","reference/celery.states","internals/reference/celery.worker.control.builtins","internals/reference/celery.log","internals/reference/celery.worker","reference/index","internals/reference/celery.worker.listener","reference/celery.views","internals/reference/celery.execute.trace","faq","reference/celery.execute","internals/reference/celery.backends.amqp","getting-started/broker-installation","_theme/ADCTheme/README","reference/celery.signals","userguide/remote-tasks","internals/reference/celery.managers","changelog","reference/celery.result","tutorials/clickcounter","reference/celery.conf","reference/celery.task.control","internals/reference/celery.backends","reference/celery.task.base","reference/celery.contrib.test_runner","internals/reference/celery.datastructures","reference/celery.bin.celeryinit","index","getting-started/first-steps-with-celery","reference/celery.exceptions","reference/celery.messaging","internals/reference/celery.worker.revoke","tutorials/index","internals/moduleindex","internals/reference/celery.backends.pyredis","internals/reference/celery.models","reference/celery.contrib.abortable","reference/celery.bin.celerybeat","internals/reference/celery.worker.buckets","configuration","internals/reference/celery.utils.compat","reference/celery.registry","userguide/routing","tutorials/external","internals/reference/celery.utils.info","reference/celery.loaders.base","_theme/ADCThemePrint/README","reference/celery.task.builtins","internals/deprecation","reference/celery.loaders.default","getting-started/resources","internals/reference/celery.worker.controllers","reference/celery.bin.celeryd","getting-started/introduction","internals/reference/celery.utils.timeutils","getting-started/periodic-tasks","userguide/index","internals/reference/celery.platform","internals/events","internals/worker","reference/celery.task","internals/reference/celery.worker.pool","internals/reference/celery.backends.cache","reference/celery.events","internals/reference/celery.worker.control","links","internals/reference/celery.backends.database","internals/reference/index","internals/reference/celery.utils.patch","cookbook/daemonizing","internals/reference/celery.backends.tyrant","getting-started/index","internals/reference/celery.worker.control.registry","tutorials/otherqueues","internals/reference/celery.backends.base","internals/reference/celery.beat","reference/celery.task.schedules","getting-started/first-steps-with-django","internals/reference/celery.backends.mongodb","cookbook/tasks","reference/celery.loaders.djangoapp","internals/reference/celery.utils","internals/reference/celery.worker.heartbeat","userguide/executing","reference/celery.loaders","reference/celery.bin.camqadm","cookbook/unit-testing","reference/celery.decorators","internals/reference/celery.worker.job"],titles:["Celery 1.0 has been released!","Cookbook","Tasks","Internals","Task Message Protocol","HTTP Callback Tasks - celery.task.http","Worker Scheduler - celery.worker.scheduler","Task States - celery.states","Built-in Remote Control Commands - celery.worker.control.builtins","Logging - celery.log","Multiprocessing Worker - celery.worker","API Reference","Worker Message Listener - celery.worker.listener","Django Views - celery.views","Tracing Execution - celery.execute.trace","Frequently Asked Questions","Executing Tasks - celery.execute","Backend: AMQP - celery.backends.amqp","Broker Installation","How To Install","Signals - celery.signals","HTTP Callback Tasks (Webhooks)","Django Model Managers - celery.managers","Change history","Task Result - celery.result","Tutorial: Creating a click counter using carrot and celery","Configuration - celery.conf","Remote Management of Workers - celery.task.control","Backends - celery.backends","Defining Tasks - celery.task.base","Contrib: Test runner - celery.contrib.test_runner","Datastructures - celery.datastructures","Celery Initialize - celery.bin.celeryinit","Celery - Distributed Task Queue","First steps with Celery","Exceptions - celery.exceptions","Messaging - celery.messaging","Worker Revoked Tasks - celery.worker.revoke","Tutorials","Module Index","Backend: Redis - celery.backends.pyredis","Django Models - celery.models","Contrib: Abortable tasks - celery.contrib.abortable","Celery Periodic Task Server - celery.bin.celerybeat","Token Bucket (rate limiting) - celery.worker.buckets","Configuration and defaults","Python Compatibility - celery.utils.compat","Task Registry - celery.registry","Routing Tasks","External tutorials and resources","Debugging Info - celery.utils.info","Loader Base Classes - celery.loaders.base","How To Install","Built-in Task Classes - celery.task.builtins","Celery Deprecation Timeline","Default Loader - celery.loaders.default","Resources","Worker Controller Threads - celery.worker.controllers","Celery Worker Daemon - celery.bin.celeryd","Introduction","Time and Date Utilities - celery.utils.timeutils","Periodic Tasks","User Guide","Platform Specific - celery.platform","List of Worker Events","Internals: The worker","Task Information and Utilities - celery.task","Task Pool - celery.worker.pool","Backend: Cache - celery.backends.cache","Events - celery.events","Worker Control - celery.worker.control","Interesting Links","Backend: Database - celery.backends.database","Internal Module Reference","Compatibility Patches - celery.utils.patch","Running celeryd as a daemon","Backend: Tokyo Tyrant - celery.backends.tyrant","Getting Started","Remote Control Command Registry - celery.worker.control.registry","Using Celery with Redis/Database as the messaging queue.","Backend: Base - celery.backends.base","Clock Service - celery.beat","Periodic Task Schedule Behaviors - celery.task.schedules","First steps with Django","Backend: MongoDB - celery.backends.mongodb","Creating Tasks","Django Loader - celery.loaders.djangoapp","Multiprocessing Worker - celery.worker","Worker Heartbeats - celery.worker.heartbeat","Executing Tasks","Loaders - celery.loaders","caqmadm: AMQP API Command-line Shell - celery.bin.camqadm","Unit Testing","Task Decorators - celery.decorators","Executable Jobs - celery.worker.job"],objects:{"":{TASK_SERIALIZER:[26,2,1,""],ALWAYS_EAGER:[26,2,1,""],DEFAULT_QUEUE:[26,2,1,""],RESULT_EXCHANGE:[26,2,1,""],BROADCAST_EXCHANGE_TYPE:[26,2,1,""],EVENT_ROUTING_KEY:[26,2,1,""],CELERYBEAT_LOG_FILE:[26,2,1,""],TASK_STATUSES_CHOICES:[41,2,1,""],TASK_RESULT_EXPIRES:[26,2,1,""],CELERYBEAT_MAX_LOOP_INTERVAL:[26,2,1,""],CELERYD_LOG_LEVEL:[26,2,1,""],RESULT_BACKEND:[26,2,1,""],CELERYD_LOG_FILE:[26,2,1,""],LOG_LEVELS:[26,2,1,""],DEFAULT_EXCHANGE_TYPE:[26,2,1,""],DEFAULT_RATE_LIMIT:[26,2,1,""],task_prerun:[20,2,1,""],CELERYD_PREFETCH_MULTIPLIER:[26,2,1,""],CELERYMON_LOG_FILE:[26,2,1,""],PeriodicTaskMeta:[41,3,1,""],CELERYD_ETA_SCHEDULER:[26,2,1,""],QUEUES:[26,2,1,""],CELERYD_LOG_FORMAT:[26,2,1,""],CELERYD_LISTENER:[26,2,1,""],TASK_STATUS_FAILURE:[41,2,1,""],CELERYD_POOL:[26,2,1,""],worker_init:[20,2,1,""],EVENT_EXCHANGE:[26,2,1,""],DISABLE_RATE_LIMITS:[26,2,1,""],CELERYD_MEDIATOR:[26,2,1,""],ACKS_LATE:[26,2,1,""],task_sent:[20,2,1,""],CELERYBEAT_SCHEDULE_FILENAME:[26,2,1,""],STORE_ERRORS_EVEN_IF_IGNORED:[26,2,1,""],task_postrun:[20,2,1,""],BROADCAST_QUEUE:[26,2,1,""],TASK_STATUS_PENDING:[41,2,1,""],BROADCAST_EXCHANGE:[26,2,1,""],TASK_STATUS_DONE:[41,2,1,""],BROKER_CONNECTION_RETRY:[26,2,1,""],BROKER_CONNECTION_MAX_RETRIES:[26,2,1,""],DEFAULT_DELIVERY_MODE:[26,2,1,""],TRACK_STARTED:[26,2,1,""],CELERYMON_LOG_LEVEL:[26,2,1,""],EVENT_QUEUE:[26,2,1,""],TASK_STATUSES:[41,2,1,""],BROKER_CONNECTION_TIMEOUT:[26,2,1,""],EVENT_EXCHANGE_TYPE:[26,2,1,""],revoked:[37,2,1,""],DEFAULT_ROUTING_KEY:[26,2,1,""],CELERYD_TASK_LOG_FORMAT:[26,2,1,""],worker_shutdown:[20,2,1,""],DEFAULT_EXCHANGE:[26,2,1,""],TaskMeta:[41,3,1,""],CELERYD_CONCURRENCY:[26,2,1,""],worker_ready:[20,2,1,""],EVENT_SERIALIZER:[26,2,1,""],CELERYBEAT_LOG_LEVEL:[26,2,1,""],IGNORE_RESULT:[26,2,1,""],CELERY_CACHE_BACKEND:[26,2,1,""],SEND_EVENTS:[26,2,1,""],TASK_STATUS_RETRY:[41,2,1,""],CELERY_SEND_TASK_ERROR_EMAILS:[26,2,1,""],MAX_CACHED_RESULTS:[26,2,1,""]},"celery.contrib":{test_runner:[30,0,0,"-"]},"celery.exceptions":{NotRegistered:[35,6,1,""],MaxRetriesExceededError:[35,6,1,""],TimeoutError:[35,6,1,""],RetryTaskError:[35,6,1,""],ImproperlyConfigured:[35,6,1,""],AlreadyRegistered:[35,6,1,""]},"celery.loaders.base":{BaseLoader:[51,3,1,""]},"celery.bin":{celeryinit:[32,0,0,"-"]},"celery.loaders.djangoapp":{autodiscover:[86,4,1,""],find_related_module:[86,4,1,""],Loader:[86,3,1,""]},"celery.managers.TaskSetManager":{store_result:[22,1,1,""],restore_taskset:[22,1,1,""]},"celery.utils.timeutils":{timedelta_seconds:[60,4,1,""],rate:[60,4,1,""],delta_resolution:[60,4,1,""],remaining:[60,4,1,""],weekday:[60,4,1,""]},PeriodicTaskMeta:{delay:[41,1,1,""],total_run_count:[41,5,1,""],last_run_at:[41,5,1,""],name:[41,5,1,""],task:[41,5,1,""]},celery:{datastructures:[31,0,0,"-"],managers:[22,0,0,"-"],utils:[87,0,0,"-"],loaders:[90,0,0,"-"],states:[7,0,0,"-"],platform:[63,0,0,"-"],registry:[47,0,0,"-"],exceptions:[35,0,0,"-"]},"celery.utils":{compat:[46,0,0,"-"],repeatlast:[87,4,1,""],fun_takes_kwargs:[87,4,1,""],instantiate:[87,4,1,""],mitemgetter:[87,4,1,""],patch:[74,0,0,"-"],get_cls_by_name:[87,4,1,""],noop:[87,4,1,""],get_full_cls_name:[87,4,1,""],chunks:[87,4,1,""],gen_unique_id:[87,4,1,""],retry_over_time:[87,4,1,""],timeutils:[60,0,0,"-"],padlist:[87,4,1,""],mattrgetter:[87,4,1,""],first:[87,4,1,""]},"celery.datastructures.PositionQueue":{UnfilledPosition:[31,3,1,""],length:[31,5,1,""],full:[31,1,1,""],filled:[31,5,1,""]},"celery.datastructures.SharedCounter":{decrement:[31,1,1,""],increment:[31,1,1,""]},"celery.datastructures":{SharedCounter:[31,3,1,""],PositionQueue:[31,3,1,""],LimitedSet:[31,3,1,""],ExceptionInfo:[31,3,1,""],consume_queue:[31,4,1,""],LocalCache:[31,3,1,""]},"celery.managers.TaskManager":{get_task:[22,1,1,""],store_result:[22,1,1,""]},"celery.loaders.default.Loader":{on_worker_init:[55,1,1,""],read_configuration:[55,1,1,""]},"celery.loaders":{load_settings:[90,4,1,""],djangoapp:[86,0,0,"-"],"default":[55,0,0,"-"],current_loader:[90,4,1,""],get_loader_cls:[90,4,1,""],base:[51,0,0,"-"]},"celery.registry.TaskRegistry":{NotRegistered:[47,6,1,""],unregister:[47,1,1,""],register:[47,1,1,""],filter_types:[47,1,1,""],periodic:[47,1,1,""],regular:[47,1,1,""]},"celery.loaders.default":{Loader:[55,3,1,""]},"celery.datastructures.ExceptionInfo":{exception:[31,5,1,""],traceback:[31,5,1,""]},"celery.loaders.base.BaseLoader":{on_task_init:[51,1,1,""],on_worker_init:[51,1,1,""],conf:[51,5,1,""]},"celery.task":{base:[2,0,0,"-"],http:[21,0,0,"-"]},"celery.utils.compat.OrderedDict":{clear:[46,1,1,""],copy:[46,1,1,""],fromkeys:[46,7,1,""],popitem:[46,1,1,""]},"celery.loaders.djangoapp.Loader":{on_task_init:[86,1,1,""],on_worker_init:[86,1,1,""],read_configuration:[86,1,1,""]},"celery.contrib.test_runner":{run_tests:[30,4,1,""]},"celery.managers":{TaskSetManager:[22,3,1,""],transaction_retry:[22,4,1,""],TaskManager:[22,3,1,""]},"celery.platform":{ignore_signal:[63,4,1,""],set_mp_process_title:[63,4,1,""],reset_signal:[63,4,1,""],set_process_title:[63,4,1,""],install_signal_handler:[63,4,1,""]},"celery.registry":{TaskRegistry:[47,3,1,""]},TaskMeta:{status:[41,5,1,""],date_done:[41,5,1,""],task_id:[41,5,1,""],result:[41,5,1,""]},"celery.utils.compat":{OrderedDict:[46,3,1,""]},"celery.states":{ALL_STATES:[7,2,1,""],RETRY:[7,2,1,""],SUCCESS:[7,2,1,""],STARTED:[7,2,1,""],UNREADY_STATES:[7,2,1,""],FAILURE:[7,2,1,""],READY_STATES:[7,2,1,""],EXCEPTION_STATES:[7,2,1,""],PENDING:[7,2,1,""]},"celery.datastructures.LimitedSet":{pop_value:[31,1,1,""],add:[31,1,1,""],first:[31,5,1,""]}},titleterms:{all:15,shot:[52,19],help:56,execut:[83,34,16,89,49,15,85,21,94,39,45,14],less:49,when:15,hostnam:18,consum:48,rest:39,veri:23,runner:[30,92],concurr:45,tyrant:[45,76],mysql:15,protocol:4,still:15,celeri:[27,55,53,54,63,0,28,74,57,29,30,67,60,31,44,68,83,32,5,86,17,6,34,7,36,37,76,82,58,8,9,71,10,93,78,12,79,39,80,40,13,14,42,72,92,33,15,84,35,43,94,87,20,88,66,16,90,22,46,47,91,24,49,41,25,81,69,50,26,51,70],web:[21,49],onli:[85,15],depend:15,monitor:45,delai:[15,2],celeryinit:32,fix:23,configur:[83,34,18,79,39,45,26],except:[39,35],send:[15,25],bug:[56,23],countdown:89,platform:[63,39,15],theme:[52,19],version:59,overview:59,els:[52,19],unit:92,local:2,cest:23,bin:[58,32,43,91],celeryd:[58,15,75,45,49],file:45,sourc:59,crash:15,supervisord:75,thei:2,get:[56,77,15,49],beat:[39,15,81],misconcept:15,stomp:15,safe:15,stop:[75,18],daemon:[58,75],initi:32,util:[66,46,74,60,39,50],stabl:0,subtask:2,cet:23,background:[15,49],"import":[79,23],eta_schedul:65,resourc:[56,0,49],you:2,introduct:[59,49,25],multiprocess:[87,10],somewher:[52,19],name:[15,48],specif:[63,39,15],anyth:15,should:15,troubleshoot:15,list:[64,56],rabbitmq:[15,71,18,49],server:[83,34,21,15,43,18,45],remot:[27,8,15,78,23],token:44,exampl:[59,2,45,4],mediat:65,debug:50,celerybeat:[39,45,43],exchange_nam:48,manag:[27,39,22],view:[39,2,25,13],launchd:75,shell:91,set:[15,45,18],interv:15,timelin:54,some:15,direct:48,ensur:85,contrib:[30,42],intern:[73,65,3,48],cookbook:1,connect:[15,89,45],someth:2,fail:[15,2],test_runn:30,patch:[39,74],event:[69,39,64],if_unus:48,distribut:33,compat:[39,46,74],celerymon:45,what:[15,0],primer:48,won:15,backend:[80,45,76,72,28,84,17,39,68,40],clock:81,databas:[39,45,79,72],camqadm:91,kind:15,delet:48,state:[7,39,2],retri:[15,2],pool:[39,67],pyredi:40,mongodb:[84,45],without:15,"new":[0,23],how:[49,15,2,52,19],irc:56,gener:15,refer:[73,11],shut:15,run:[83,34,15,75],timeout:89,kei:[15,48],screen:[52,19],caqmadm:91,broker:[15,48,18],signal:20,job:[39,94],base:[29,39,49,80,51],releas:0,timeutil:60,appli:15,"throw":15,wait:15,queue_nam:48,thread:57,launch:2,pre1:23,just:15,synchron:2,step:[83,34],queue:[33,15,79,48,49],thing:15,eta:89,rout:[2,48,45,89],discard:15,chang:[15,23],produc:48,frequent:15,first:[83,34],softwar:49,directli:19,point:15,revok:[39,37],onc:15,modul:[73,39],period:[25,15,61,43,82,45],loader:[39,55,86,90,51],down:15,ask:15,datastructur:[39,31],api:[11,0,48,91],carrotlisten:65,messag:[36,79,49,15,48,2,12,25,4,39,45],blog:2,cancel:15,respect:15,redi:[45,40,79],guid:62,your:[83,19],durabl:48,duplic:15,prioriti:15,granular:2,from:59,log:[9,39,2,45],aren:15,data:[65,2],licens:56,support:15,question:15,system:18,been:0,custom:[2,92],compon:65,start:[77,49,75,18],window:15,tracker:56,interest:71,suit:15,sphinx:[52,19],django:[83,22,15,49,86,41,92,39,13],instal:[52,59,79,18,19],routing_kei:48,listen:[39,12],reus:15,schedul:[6,39,15,82],djangoapp:[39,86],option:[15,2,89],auto_delet:48,relat:48,rubi:49,dai:49,task:[27,53,67,29,2,4,5,33,34,7,37,61,39,15,82,83,42,85,21,43,64,45,66,16,89,47,48,24,49,25,93],link:71,doesn:15,date:60,mail:56,i18n:15,quick:49,line:91,activemq:15,than:49,info:[39,50],multi:15,have:15,keyword:2,tokyo:[45,76],"default":[55,39,2,45],type:48,wiki:56,work:[15,2,49],bucket:[44,39],rate:[44,2],structur:65,histori:23,project:83,defin:[29,83],abort:42,limit:[44,2],can:15,cach:[68,45],error:15,deadlock:15,servic:81,pre3:23,pre2:23,control:[27,57,23,8,15,78,39,70],passiv:48,featur:[59,15,0],behavior:82,creat:[34,85,25],process:[15,49],taskpool:65,if_empti:48,deprec:[54,23],argument:2,templat:15,lingual:15,topic:48,download:59,ready_queu:65,carrot:25,conf:[39,26],tabl:33,seem:15,incompat:23,serial:[89,4],contribut:56,result:[45,15,2,39,24],decor:[39,93],disabl:2,develop:59,amqp:[89,71,15,48,91,17,39,45],want:2,inform:66,perform:2,anoth:15,make:[52,19],tip:2,same:15,click:25,note:[79,23],python:[46,49],builtin:[8,39,53],tutori:[49,25,38],best:2,indic:33,test:[30,15,92],command:[23,8,15,91,48,78],worker:[27,45,64,6,34,57,37,58,8,10,78,12,39,83,15,94,87,44,88,65,67,70],document:[59,23,19],simpl:34,critic:23,finish:[15,25],http:[39,5,21],registri:[39,78,47],trace:[39,14],index:39,webhook:21,why:15,dow:15,hang:15,miscellan:39,hand:48,schedulecontrol:65,user:62,heartbeat:[39,88],extern:49,build:49,integrityerror:15,"class":[39,51,53],acks_lat:15,built:[8,53],defer:49,receiv:15,don:2,practic:2,url:[39,25],bind:48,counter:25,strategi:2,doe:15,pickl:15,callback:[5,21],anim:49,declar:48,ignor:2,runtim:15,freebsd:[15,49],time:[85,15,60],exclus:48,model:[39,2,25,22,41],backward:23,avoid:2,exchang:48,left:15}})PKXDD(Щ))$celery-1.0-archived/py-modindex.html Python Module Index — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

PKXDD&%hhcelery-1.0-archived/search.html Search — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Search

Please activate JavaScript to enable the search functionality.

From here you can search these documents. Enter your search words into the box below and click "search". Note that the search function will automatically search for all of the words. Pages containing fewer words won't appear in the result list.

PKXDDoycelery-1.0-archived/.buildinfo# Sphinx build info version 1 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. config: f6e27d019daf77f7336e0fb1a359fc79 tags: efa25262f700e02b1777eb79ee109f5c PKXDD&celery-1.0-archived/configuration.html Configuration and defaults — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

This Page

Configuration and defaults

This document describes the configuration options available.

If you’re using celery in a Django project these settings should be defined in the project’s settings.py file.

In a regular Python environment, that is using the default loader, you must create the celeryconfig.py module and make sure it is available on the Python path.

Example configuration file

This is an example configuration file to get you started. It should contain all you need to run a basic celery set-up.

CELERY_RESULT_BACKEND = "database"
DATABASE_ENGINE = "sqlite3"
DATABASE_NAME = "mydatabase.db"

BROKER_HOST = "localhost"
BROKER_PORT = 5672
BROKER_VHOST = "/"
BROKER_USER = "guest"
BROKER_PASSWORD = "guest"

## If you're doing mostly I/O you can have more processes,
## but if mostly spending CPU, try to keep it close to the
## number of CPUs on your machine. If not set, the number of CPUs/cores
## available will be used.
# CELERYD_CONCURRENCY = 8

# CELERYD_LOG_FILE = "celeryd.log"
# CELERYD_LOG_LEVEL = "INFO"

Concurrency settings

  • CELERYD_CONCURRENCY

    The number of concurrent worker processes, executing tasks simultaneously.

    Defaults to the number of CPUs/cores available.

  • CELERYD_PREFETCH_MULTIPLIER

    How many messages to prefetch at a time multiplied by the number of concurrent processes. The default is 4 (four messages for each process). The default setting seems pretty good here. However, if you have very long running tasks waiting in the queue and you have to start the workers, note that the first worker to start will receive four times the number of messages initially. Thus the tasks may not be fairly balanced among the workers.

Task result backend settings

  • CELERY_RESULT_BACKEND

    The backend used to store task results (tombstones). Can be one of the following:

    • database (default)

      Use a relational database supported by the Django ORM.

    • cache

      Use memcached to store the results.

    • mongodb

      Use MongoDB to store the results.

    • redis

      Use Redis to store the results.

    • tyrant

      Use Tokyo Tyrant to store the results.

    • amqp

      Send results back as AMQP messages (WARNING While very fast, you must make sure you only receive the result once. See Executing Tasks).

Database backend settings

Please see the Django ORM database settings documentation: http://docs.djangoproject.com/en/dev/ref/settings/#database-engine

If you use this backend, make sure to initialize the database tables after configuration. When using celery with a Django project this means executing:

$ python manage.py syncdb

When using celery in a regular Python environment you have to execute:

$ celeryinit

Example configuration

CELERY_RESULT_BACKEND = "database"
DATABASE_ENGINE = "mysql"
DATABASE_USER = "myusername"
DATABASE_PASSWORD = "mypassword"
DATABASE_NAME = "mydatabase"
DATABASE_HOST = "localhost"

AMQP backend settings

The AMQP backend does not have any settings yet.

Example configuration

CELERY_RESULT_BACKEND = “amqp”

Cache backend settings

Please see the documentation for the Django cache framework settings: http://docs.djangoproject.com/en/dev/topics/cache/#memcached

To use a custom cache backend for Celery, while using another for Django, you should use the CELERY_CACHE_BACKEND setting instead of the regular django CACHE_BACKEND setting.

Example configuration

Using a single memcached server:

CACHE_BACKEND = 'memcached://127.0.0.1:11211/'

Using multiple memcached servers:

CELERY_RESULT_BACKEND = "cache"
CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11211/'

Tokyo Tyrant backend settings

NOTE The Tokyo Tyrant backend requires the pytyrant library:
http://pypi.python.org/pypi/pytyrant/

This backend requires the following configuration directives to be set:

  • TT_HOST

    Hostname of the Tokyo Tyrant server.

  • TT_PORT

    The port the Tokyo Tyrant server is listening to.

Example configuration

CELERY_RESULT_BACKEND = "tyrant"
TT_HOST = "localhost"
TT_PORT = 1978

Redis backend settings

NOTE The Redis backend requires the redis library:
http://pypi.python.org/pypi/redis/0.5.5

To install the redis package use pip or easy_install:

$ pip install redis

This backend requires the following configuration directives to be set:

  • REDIS_HOST

    Hostname of the Redis database server. e.g. "localhost".

  • REDIS_PORT

    Port to the Redis database server. e.g. 6379.

Also, the following optional configuration directives are available:

  • REDIS_DB

    Name of the database to use. Default is celery_results.

  • REDIS_PASSWORD

    Password used to connect to the database.

Example configuration

CELERY_RESULT_BACKEND = "redis"
REDIS_HOST = "localhost"
REDIS_PORT = 6379
REDIS_DATABASE = "celery_results"
REDIS_CONNECT_RETRY=True

MongoDB backend settings

NOTE The MongoDB backend requires the pymongo library:
http://github.com/mongodb/mongo-python-driver/tree/master
  • CELERY_MONGODB_BACKEND_SETTINGS

    This is a dict supporting the following keys:

    • host

      Hostname of the MongoDB server. Defaults to “localhost”.

    • port

      The port the MongoDB server is listening to. Defaults to 27017.

    • user

      User name to authenticate to the MongoDB server as (optional).

    • password

      Password to authenticate to the MongoDB server (optional).

    • database

      The database name to connect to. Defaults to “celery”.

    • taskmeta_collection

      The collection name to store task meta data. Defaults to “celery_taskmeta”.

Example configuration

CELERY_RESULT_BACKEND = "mongodb"
CELERY_MONGODB_BACKEND_SETTINGS = {
    "host": "192.168.1.100",
    "port": 30000,
    "database": "mydb",
    "taskmeta_collection": "my_taskmeta_collection",
}

Messaging settings

Routing

  • CELERY_QUEUES The mapping of queues the worker consumes from. This is a dictionary of queue name/options. See Routing Tasks for more information.

    The default is a queue/exchange/binding key of "celery", with exchange type direct.

    You don’t have to care about this unless you want custom routing facilities.

  • CELERY_DEFAULT_QUEUE

    The queue used by default, if no custom queue is specified. This queue must be listed in CELERY_QUEUES. The default is: celery.

  • CELERY_DEFAULT_EXCHANGE

    Name of the default exchange to use when no custom exchange is specified. The default is: celery.

  • CELERY_DEFAULT_EXCHANGE_TYPE

    Default exchange type used when no custom exchange is specified. The default is: direct.

  • CELERY_DEFAULT_ROUTING_KEY

    The default routing key used when sending tasks. The default is: celery.

Connection

  • CELERY_BROKER_CONNECTION_TIMEOUT

    The timeout in seconds before we give up establishing a connection to the AMQP server. Default is 4 seconds.

  • CELERY_BROKER_CONNECTION_RETRY

    Automatically try to re-establish the connection to the AMQP broker if it’s lost.

    The time between retries is increased for each retry, and is not exhausted before CELERY_BROKER_CONNECTION_MAX_RETRIES is exceeded.

    This behavior is on by default.

  • CELERY_BROKER_CONNECTION_MAX_RETRIES

    Maximum number of retries before we give up re-establishing a connection to the AMQP broker.

    If this is set to 0 or None, we will retry forever.

    Default is 100 retries.

Task execution settings

  • CELERY_ALWAYS_EAGER

    If this is True, all tasks will be executed locally by blocking until it is finished. apply_async and Task.delay will return a celery.result.EagerResult which emulates the behavior of celery.result.AsyncResult, except the result has already been evaluated.

    Tasks will never be sent to the queue, but executed locally instead.

  • CELERY_IGNORE_RESULT

    Whether to store the task return values or not (tombstones). If you still want to store errors, just not successful return values, you can set CELERY_STORE_ERRORS_EVEN_IF_IGNORED.

  • CELERY_TASK_RESULT_EXPIRES

    Time (in seconds, or a datetime.timedelta object) for when after stored task tombstones are deleted.

    NOTE: For the moment this only works with the database, cache and MongoDB

  • CELERY_TRACK_STARTED

    If True the task will report its status as “started” when the task is executed by a worker. The default value is False as the normal behaviour is to not report that level of granularity. Tasks are either pending, finished, or waiting to be retried. Having a “started” status can be useful for when there are long running tasks and there is a need to report which task is currently running. backends.

  • CELERY_TASK_SERIALIZER

    A string identifying the default serialization method to use. Can be pickle (default), json, yaml, or any custom serialization methods that have been registered with carrot.serialization.registry.

    Default is pickle.

  • CELERY_DEFAULT_RATE_LIMIT

    The global default rate limit for tasks.

    This value is used for tasks that does not have a custom rate limit The default is no rate limit.

  • CELERY_DISABLE_RATE_LIMITS

    Disable all rate limits, even if tasks has explicit rate limits set.

Worker: celeryd

  • CELERY_IMPORTS

    A sequence of modules to import when the celery daemon starts. This is useful to add tasks if you are not using django or cannot use task auto-discovery.

  • CELERY_SEND_EVENTS

    Send events so the worker can be monitored by tools like celerymon.

  • CELERY_SEND_TASK_ERROR_EMAILS

    If set to True, errors in tasks will be sent to admins by e-mail. If unset, it will send the e-mails if settings.DEBUG is False.

  • CELERY_STORE_ERRORS_EVEN_IF_IGNORED

    If set, the worker stores all task errors in the result store even if Task.ignore_result is on.

Logging

  • CELERYD_LOG_FILE

    The default file name the worker daemon logs messages to, can be overridden using the –logfile` option to celeryd.

    The default is None (stderr) Can also be set via the --logfile argument.

  • CELERYD_LOG_LEVEL

    Worker log level, can be any of DEBUG, INFO, WARNING, ERROR, CRITICAL.

    Can also be set via the --loglevel argument.

    See the logging module for more information.

  • CELERYD_LOG_FORMAT

    The format to use for log messages. Can be overridden using the --loglevel option to celeryd.

    Default is [%(asctime)s: %(levelname)s/%(processName)s] %(message)s

    See the Python logging module for more information about log formats.

Periodic Task Server: celerybeat

  • CELERYBEAT_SCHEDULE_FILENAME

    Name of the file celerybeat stores the current schedule in. Can be a relative or absolute path, but be aware that the suffix .db will be appended to the file name.

    Can also be set via the --schedule argument.

  • CELERYBEAT_MAX_LOOP_INTERVAL

    The maximum number of seconds celerybeat can sleep between checking the schedule. Default is 300 seconds (5 minutes).

  • CELERYBEAT_LOG_FILE

    The default file name to log messages to, can be overridden using the –logfile` option.

    The default is None (stderr). Can also be set via the --logfile argument.

  • CELERYBEAT_LOG_LEVEL

    Logging level. Can be any of DEBUG, INFO, WARNING, ERROR, or CRITICAL.

    Can also be set via the --loglevel argument.

    See the logging module for more information.

Monitor Server: celerymon

  • CELERYMON_LOG_FILE

    The default file name to log messages to, can be overridden using the –logfile` option.

    The default is None (stderr) Can also be set via the --logfile argument.

  • CELERYMON_LOG_LEVEL

    Logging level. Can be any of DEBUG, INFO, WARNING, ERROR, or CRITICAL.

    See the logging module for more information.

PKXDDs"celery-1.0-archived/changelog.html Change history — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

This Page

Change history

1.0.6 [2010-06-30 09:57 A.M CEST]

  • RabbitMQ 1.8.0 has extended their exchange equivalence tests to include auto_delete and durable. This broke the AMQP backend.

    If you’ve already used the AMQP backend this means you have to delete the previous definitions:

    $ PYTHONPATH=. camqadm exchange.delete celeryresults

    or:

    $ python manage.py camqadm exchange.delete celeryresults

1.0.5 [2010-06-01 02:36 P.M CEST]

Critical

  • SIGINT/Ctrl+C killed the pool, abrubtly terminating the currently executing tasks.

    Fixed by making the pool worker processes ignore SIGINT.

  • Should not close the consumers before the pool is terminated, just cancel the consumers.

  • Now depends on billiard >= 0.3.1

  • celeryd: Previously exceptions raised by worker components could stall startup, now it correctly logs the exceptions and shuts down.

  • celeryd: Prefetch counts was set too late. QoS is now set as early as possible, so celeryd can’t slurp in all the messages at start-up.

Changes

  • celery.contrib.abortable: Abortable tasks.

    Tasks that defines steps of execution, the task can then be aborted after each step has completed.

  • EventDispatcher: No longer creates AMQP channel if events are disabled

  • Added required RPM package names under [bdist_rpm] section, to support building RPMs from the sources using setup.py

  • Running unittests: NOSE_VERBOSE environment var now enables verbose output from Nose.

  • celery.execute.apply(): Pass logfile/loglevel arguments as task kwargs.

  • celery.execute.apply: Should return exception, not ExceptionInfo on error.

  • Added new entries to the FAQs:

    • Should I use retry or acks_late?
    • Can I execute a task by name?

1.0.4 [2010-05-31 09:54 A.M CEST]

  • Changlog merged with 1.0.5 as the release was never announced.

1.0.3 [2010-05-15 03:00 P.M CEST]

Important notes

  • Messages are now acked just before the task function is executed.

    This is the behavior we’ve wanted all along, but couldn’t have because of limitations in the multiprocessing module. The previous behavior was not good, and the situation worsened with the release of 1.0.1, so this change will definitely improve reliability, performance and operations in general.

    For more information please see http://bit.ly/9hom6T

  • Database result backend: result now explicitly sets null=True as django-picklefield version 0.1.5 changed the default behavior right under our noses :(

    See: http://bit.ly/d5OwMr

    This means those who created their celery tables (via syncdb or celeryinit) with picklefield versions >= 0.1.5 has to alter their tables to allow the result field to be NULL manually.

    MySQL:

    ALTER TABLE celery_taskmeta MODIFY result TEXT NULL
  • Removed Task.rate_limit_queue_type, as it was not really useful and made it harder to refactor some parts.

  • Now depends on carrot >= 0.10.4

  • Now depends on billiard >= 0.3.0

News

  • AMQP backend: Added timeout support for result.get() / result.wait().

  • New task option: Task.acks_late (default: CELERY_ACKS_LATE)

    Late ack means the task messages will be acknowledged after the task has been executed, not just before, which is the default behavior.

    Note that this means the tasks may be executed twice if the worker crashes in the middle of their execution. Not acceptable for most applications, but desirable for others.

  • Added crontab-like scheduling to periodic tasks.

    Like a cron job, you can specify units of time of when you would like the task to execute. While not a full implementation of cron’s features, it should provide a fair degree of common scheduling needs.

    You can specify a minute (0-59), an hour (0-23), and/or a day of the week (0-6 where 0 is Sunday, or by names: sun, mon, tue, wed, thu, fri, sat).

    Examples:

    from celery.task.schedules import crontab
    from celery.decorators import periodic_task
    
    @periodic_task(run_every=crontab(hour=7, minute=30))
    def every_morning():
        print("Runs every morning at 7:30a.m")
    
    @periodic_task(run_every=crontab(hour=7, minute=30, day_of_week="mon"))
    def every_monday_morning():
        print("Run every monday morning at 7:30a.m")
    
    @periodic_task(run_every=crontab(minutes=30))
    def every_hour():
        print("Runs every hour on the clock. e.g. 1:30, 2:30, 3:30 etc.")
    

    Note that this a late addition. While we have unittests, due to the nature of this feature we haven’t been able to completely test this in practice, so consider this experimental.

  • TaskPool.apply_async: Now supports the accept_callback argument.

  • apply_async: Now raises ValueError if task args is not a list, or kwargs is not a tuple (http://github.com/ask/celery/issues/issue/95).

  • Task.max_retries can now be None, which means it will retry forever.

  • Celerybeat: Now reuses the same connection when publishing large sets of tasks.

  • Modified the task locking example in the documentation to use cache.add for atomic locking.

  • Added experimental support for a started status on tasks.

    If Task.track_started is enabled the task will report its status as “started” when the task is executed by a worker.

    The default value is False as the normal behaviour is to not report that level of granularity. Tasks are either pending, finished, or waiting to be retried. Having a “started” status can be useful for when there are long running tasks and there is a need to report which task is currently running.

    The global default can be overridden by the CELERY_TRACK_STARTED setting.

  • User Guide: New section Tips and Best Practices.

    Contributions welcome!

Remote control commands

  • Remote control commands can now send replies back to the caller.

    Existing commands has been improved to send replies, and the client interface in celery.task.control has new keyword arguments: reply, timeout and limit. Where reply means it will wait for replies, timeout is the time in seconds to stop waiting for replies, and limit is the maximum number of replies to get.

    By default, it will wait for as many replies as possible for one second.

    • rate_limit(task_name, destination=all, reply=False, timeout=1, limit=0)

      Worker returns {"ok": message} on success, or {"failure": message} on failure.

      >>> from celery.task.control import rate_limit
      >>> rate_limit("tasks.add", "10/s", reply=True)
      [{'worker1': {'ok': 'new rate limit set successfully'}},
       {'worker2': {'ok': 'new rate limit set successfully'}}]
      
    • ping(destination=all, reply=False, timeout=1, limit=0)

      Worker returns the simple message "pong".

      >>> from celery.task.control import ping
      >>> ping(reply=True)
      [{'worker1': 'pong'},
       {'worker2': 'pong'},
      
    • revoke(destination=all, reply=False, timeout=1, limit=0)

      Worker simply returns True.

      >>> from celery.task.control import revoke
      >>> revoke("419e46eb-cf6a-4271-86a8-442b7124132c", reply=True)
      [{'worker1': True},
       {'worker2'; True}]
      
  • You can now add your own remote control commands!

    Remote control commands are functions registered in the command registry. Registering a command is done using celery.worker.control.Panel.register():

    from celery.task.control import Panel
    
    @Panel.register
    def reset_broker_connection(panel, **kwargs):
        panel.listener.reset_connection()
        return {"ok": "connection re-established"}
    

    With this module imported in the worker, you can launch the command using celery.task.control.broadcast:

    >>> from celery.task.control import broadcast
    >>> broadcast("reset_broker_connection", reply=True)
    [{'worker1': {'ok': 'connection re-established'},
     {'worker2': {'ok': 'connection re-established'}}]
    

    TIP You can choose the worker(s) to receive the command by using the destination argument:

    >>> broadcast("reset_broker_connection", destination=["worker1"])
    [{'worker1': {'ok': 'connection re-established'}]
    
  • New remote control command: dump_reserved

    Dumps tasks reserved by the worker, waiting to be executed:

    >>> from celery.task.control import broadcast
    >>> broadcast("dump_reserved", reply=True)
    [{'myworker1': [<TaskWrapper ....>]}]
    
  • New remote control command: dump_schedule

    Dumps the workers currently registered ETA schedule. These are tasks with an eta (or countdown) argument waiting to be executed by the worker.

    >>> from celery.task.control import broadcast
    >>> broadcast("dump_schedule", reply=True)
    [{'w1': []},
     {'w3': []},
     {'w2': ['0. 2010-05-12 11:06:00 pri0 <TaskWrapper:
                {name:"opalfeeds.tasks.refresh_feed_slice",
                 id:"95b45760-4e73-4ce8-8eac-f100aa80273a",
                 args:"(<Feeds freq_max:3600 freq_min:60
                               start:2184.0 stop:3276.0>,)",
                 kwargs:"{'page': 2}"}>']},
     {'w4': ['0. 2010-05-12 11:00:00 pri0 <TaskWrapper:
                {name:"opalfeeds.tasks.refresh_feed_slice",
                 id:"c053480b-58fb-422f-ae68-8d30a464edfe",
                 args:"(<Feeds freq_max:3600 freq_min:60
                               start:1092.0 stop:2184.0>,)",
                 kwargs:"{\'page\': 1}"}>',
            '1. 2010-05-12 11:12:00 pri0 <TaskWrapper:
                {name:"opalfeeds.tasks.refresh_feed_slice",
                 id:"ab8bc59e-6cf8-44b8-88d0-f1af57789758",
                 args:"(<Feeds freq_max:3600 freq_min:60
                               start:3276.0 stop:4365>,)",
                 kwargs:"{\'page\': 3}"}>']}]
    

Fixes

  • Mediator thread no longer blocks for more than 1 second.

    With rate limits enabled and when there was a lot of remaining time, the mediator thread could block shutdown (and potentially block other jobs from coming in).

  • Remote rate limits was not properly applied (http://github.com/ask/celery/issues/issue/98)

  • Now handles exceptions with unicode messages correctly in TaskWrapper.on_failure.

  • Database backend: TaskMeta.result: default value should be None not empty string.

1.0.2 [2010-03-31 12:50 P.M CET]

  • Deprecated: CELERY_BACKEND, please use CELERY_RESULT_BACKEND instead.

  • We now use a custom logger in tasks. This logger supports task magic keyword arguments in formats.

    The default format for tasks (CELERYD_TASK_LOG_FORMAT) now includes the id and the name of tasks so the origin of task log messages can easily be traced.

    Example output::
    [2010-03-25 13:11:20,317: INFO/PoolWorker-1]

    [tasks.add(a6e1c5ad-60d9-42a0-8b24-9e39363125a4)] Hello from add

    To revert to the previous behavior you can set:

    CELERYD_TASK_LOG_FORMAT = """
        [%(asctime)s: %(levelname)s/%(processName)s] %(message)s
    """.strip()
    
  • Unittests: Don’t disable the django test database teardown, instead fixed the underlying issue which was caused by modifications to the DATABASE_NAME setting (http://github.com/ask/celery/issues/82).

  • Django Loader: New config CELERY_DB_REUSE_MAX (max number of tasks to reuse the same database connection)

    The default is to use a new connection for every task. We would very much like to reuse the connection, but a safe number of reuses is not known, and we don’t have any way to handle the errors that might happen, which may even be database dependent.

    See: http://bit.ly/94fwdd

  • celeryd: The worker components are now configurable: CELERYD_POOL, CELERYD_LISTENER, CELERYD_MEDIATOR, and CELERYD_ETA_SCHEDULER.

    The default configuration is as follows:

    CELERYD_POOL = "celery.worker.pool.TaskPool"
    CELERYD_MEDIATOR = "celery.worker.controllers.Mediator"
    CELERYD_ETA_SCHEDULER = "celery.worker.controllers.ScheduleController"
    CELERYD_LISTENER = "celery.worker.listener.CarrotListener"
    

    The CELERYD_POOL setting makes it easy to swap out the multiprocessing pool with a threaded pool, or how about a twisted/eventlet pool?

    Consider the competition for the first pool plug-in started!

  • Debian init scripts: Use -a not && (http://github.com/ask/celery/issues/82).

  • Debian init scripts: Now always preserves $CELERYD_OPTS from the /etc/default/celeryd and /etc/default/celerybeat.

  • celery.beat.Scheduler: Fixed a bug where the schedule was not properly flushed to disk if the schedule had not been properly initialized.

  • celerybeat: Now syncs the schedule to disk when receiving the SIGTERM and SIGINT signals.

  • Control commands: Make sure keywords arguments are not in unicode.

  • ETA scheduler: Was missing a logger object, so the scheduler crashed when trying to log that a task had been revoked.

  • management.commands.camqadm: Fixed typo camqpadm -> camqadm (http://github.com/ask/celery/issues/83).

  • PeriodicTask.delta_resolution: Was not working for days and hours, now fixed by rounding to the nearest day/hour.

  • Fixed a potential infinite loop in BaseAsyncResult.__eq__, although there is no evidence that it has ever been triggered.

  • celeryd: Now handles messages with encoding problems by acking them and emitting an error message.

1.0.1 [2010-02-24 07:05 P.M CET]

  • Tasks are now acknowledged early instead of late.

    This is done because messages can only be acked within the same connection channel, so if the connection is lost we would have to refetch the message again to acknowledge it.

    This might or might not affect you, but mostly those running tasks with a really long execution time are affected, as all tasks that has made it all the way into the pool needs to be executed before the worker can safely terminate (this is at most the number of pool workers, multiplied by the CELERYD_PREFETCH_MULTIPLIER setting.)

    We multiply the prefetch count by default to increase the performance at times with bursts of tasks with a short execution time. If this doesn’t apply to your use case, you should be able to set the prefetch multiplier to zero, without sacrificing performance.

    Please note that a patch to multiprocessing is currently being worked on, this patch would enable us to use a better solution, and is scheduled for inclusion in the 1.2.0 release.

  • celeryd now shutdowns cleanly when receving the TERM signal.

  • celeryd now does a cold shutdown if the INT signal is received (Ctrl+C), this means it tries to terminate as soon as possible.

  • Caching of results now moved to the base backend classes, so no need to implement this functionality in the base classes.

  • Caches are now also limited in size, so their memory usage doesn’t grow out of control.

    You can set the maximum number of results the cache can hold using the CELERY_MAX_CACHED_RESULTS setting (the default is five thousand results). In addition, you can refetch already retrieved results using backend.reload_task_result + backend.reload_taskset_result (that’s for those who want to send results incrementally).

  • celeryd now works on Windows again.

    Note that if running with Django, you can’t use project.settings as the settings module name, but the following should work:

    $ python manage.py celeryd --settings=settings
  • Execution: .messaging.TaskPublisher.send_task now incorporates all the functionality apply_async previously did.

    Like converting countdowns to eta, so celery.execute.apply_async() is now simply a convenient front-end to celery.messaging.TaskPublisher.send_task(), using the task classes default options.

    Also celery.execute.send_task() has been introduced, which can apply tasks using just the task name (useful if the client does not have the destination task in its task registry).

    Example:

    >>> from celery.execute import send_task
    >>> result = send_task("celery.ping", args=[], kwargs={})
    >>> result.get()
    'pong'
    
  • camqadm: This is a new utility for command line access to the AMQP API.

    Excellent for deleting queues/bindings/exchanges, experimentation and testing:

    $ camqadm
    1> help

    Gives an interactive shell, type help for a list of commands.

    When using Django, use the management command instead:

    $ python manage.py camqadm
    1> help
  • Redis result backend: To conform to recent Redis API changes, the following settings has been deprecated:

    • REDIS_TIMEOUT
    • REDIS_CONNECT_RETRY

    These will emit a DeprecationWarning if used.

    A REDIS_PASSWORD setting has been added, so you can use the new simple authentication mechanism in Redis.

  • The redis result backend no longer calls SAVE when disconnecting, as this is apparently better handled by Redis itself.

  • If settings.DEBUG is on, celeryd now warns about the possible memory leak it can result in.

  • The ETA scheduler now sleeps at most two seconds between iterations.

  • The ETA scheduler now deletes any revoked tasks it might encounter.

    As revokes are not yet persistent, this is done to make sure the task is revoked even though it’s currently being hold because its eta is e.g. a week into the future.

  • The task_id argument is now respected even if the task is executed eagerly (either using apply, or CELERY_ALWAYS_EAGER).

  • The internal queues are now cleared if the connection is reset.

  • New magic keyword argument: delivery_info.

    Used by retry() to resend the task to its original destination using the same exchange/routing_key.

  • Events: Fields was not passed by .send() (fixes the uuid keyerrors in celerymon)

  • Added --schedule/-s option to celeryd, so it is possible to specify a custom schedule filename when using an embedded celerybeat server (the -B/--beat) option.

  • Better Python 2.4 compatibility. The test suite now passes.

  • task decorators: Now preserve docstring as cls.__doc__, (was previously copied to cls.run.__doc__)

  • The testproj directory has been renamed to tests and we’re now using nose + django-nose for test discovery, and unittest2 for test cases.

  • New pip requirements files available in contrib/requirements.

  • TaskPublisher: Declarations are now done once (per process).

  • Added Task.delivery_mode and the CELERY_DEFAULT_DELIVERY_MODE setting.

    These can be used to mark messages non-persistent (i.e. so they are lost if the broker is restarted).

  • Now have our own ImproperlyConfigured exception, instead of using the Django one.

  • Improvements to the debian init scripts: Shows an error if the program is not executeable. Does not modify CELERYD when using django with virtualenv.

1.0.0 [2010-02-10 04:00 P.M CET]

BACKWARD INCOMPATIBLE CHANGES

  • Celery does not support detaching anymore, so you have to use the tools available on your platform, or something like supervisord to make celeryd/celerybeat/celerymon into background processes.

    We’ve had too many problems with celeryd daemonizing itself, so it was decided it has to be removed. Example startup scripts has been added to contrib/:

    • Debian, Ubuntu, (start-stop-daemon)

      contrib/debian/init.d/celeryd contrib/debian/init.d/celerybeat

    • Mac OS X launchd

      contrib/mac/org.celeryq.celeryd.plist contrib/mac/org.celeryq.celerybeat.plist contrib/mac/org.celeryq.celerymon.plist

    • Supervisord (http://supervisord.org)

      contrib/supervisord/supervisord.conf

    In addition to --detach, the following program arguments has been removed: --uid, --gid, --workdir, --chroot, --pidfile, --umask. All good daemonization tools should support equivalent functionality, so don’t worry.

    Also the following configuration keys has been removed: CELERYD_PID_FILE, CELERYBEAT_PID_FILE, CELERYMON_PID_FILE.

  • Default celeryd loglevel is now WARN, to enable the previous log level start celeryd with --loglevel=INFO.

  • Tasks are automatically registered.

    This means you no longer have to register your tasks manually. You don’t have to change your old code right away, as it doesn’t matter if a task is registered twice.

    If you don’t want your task to be automatically registered you can set the abstract attribute

    class MyTask(Task):
        abstract = True
    

    By using abstract only tasks subclassing this task will be automatically registered (this works like the Django ORM).

    If you don’t want subclasses to be registered either, you can set the autoregister attribute to False.

    Incidentally, this change also fixes the problems with automatic name assignment and relative imports. So you also don’t have to specify a task name anymore if you use relative imports.

  • You can no longer use regular functions as tasks.

    This change was added because it makes the internals a lot more clean and simple. However, you can now turn functions into tasks by using the @task decorator:

    from celery.decorators import task
    
    @task
    def add(x, y):
        return x + y
    

    See the User Guide: Tasks for more information.

  • The periodic task system has been rewritten to a centralized solution.

    This means celeryd no longer schedules periodic tasks by default, but a new daemon has been introduced: celerybeat.

    To launch the periodic task scheduler you have to run celerybeat:

    $ celerybeat

    Make sure this is running on one server only, if you run it twice, all periodic tasks will also be executed twice.

    If you only have one worker server you can embed it into celeryd like this:

    $ celeryd --beat # Embed celerybeat in celeryd.
  • The supervisor has been removed.

    This means the -S and --supervised options to celeryd is no longer supported. Please use something like http://supervisord.org instead.

  • TaskSet.join has been removed, use TaskSetResult.join instead.

  • The task status "DONE" has been renamed to “SUCCESS”.

  • AsyncResult.is_done has been removed, use AsyncResult.successful instead.

  • The worker no longer stores errors if Task.ignore_result is set, to revert to the previous behaviour set CELERY_STORE_ERRORS_EVEN_IF_IGNORED to True.

  • The staticstics functionality has been removed in favor of events, so the -S and --statistics switches has been removed.

  • The module celery.task.strategy has been removed.

  • celery.discovery has been removed, and it’s autodiscover function is now in celery.loaders.djangoapp. Reason: Internal API.

  • CELERY_LOADER now needs loader class name in addition to module name,

    E.g. where you previously had: "celery.loaders.default", you now need "celery.loaders.default.Loader", using the previous syntax will result in a DeprecationWarning.

  • Detecting the loader is now lazy, and so is not done when importing celery.loaders.

    To make this happen celery.loaders.settings has been renamed to load_settings and is now a function returning the settings object. celery.loaders.current_loader is now also a function, returning the current loader.

    So:

    loader = current_loader
    

    needs to be changed to:

    loader = current_loader()
    

DEPRECATIONS

  • The following configuration variables has been renamed and will be deprecated in v1.2:

    • CELERYD_DAEMON_LOG_FORMAT -> CELERYD_LOG_FORMAT
    • CELERYD_DAEMON_LOG_LEVEL -> CELERYD_LOG_LEVEL
    • CELERY_AMQP_CONNECTION_TIMEOUT -> CELERY_BROKER_CONNECTION_TIMEOUT
    • CELERY_AMQP_CONNECTION_RETRY -> CELERY_BROKER_CONNECTION_RETRY
    • CELERY_AMQP_CONNECTION_MAX_RETRIES -> CELERY_BROKER_CONNECTION_MAX_RETRIES
    • SEND_CELERY_TASK_ERROR_EMAILS -> CELERY_SEND_TASK_ERROR_EMAILS
  • The public api names in celery.conf has also changed to a consistent naming scheme.

  • We now support consuming from an arbitrary number of queues.

    To do this we had to rename the configuration syntax. If you use any of the custom AMQP routing options (queue/exchange/routing_key, etc), you should read the new FAQ entry: http://bit.ly/aiWoH.

    The previous syntax is deprecated and scheduled for removal in v1.2.

  • TaskSet.run has been renamed to TaskSet.apply_async.

    TaskSet.run has now been deprecated, and is scheduled for removal in v1.2.

NEWS

  • Rate limiting support (per task type, or globally).

  • New periodic task system.

  • Automatic registration.

  • New cool task decorator syntax.

  • celeryd now sends events if enabled with the -E argument.

    Excellent for monitoring tools, one is already in the making (http://github.com/ask/celerymon).

    Current events include: worker-heartbeat, task-[received/succeeded/failed/retried], worker-online, worker-offline.

  • You can now delete (revoke) tasks that has already been applied.

  • You can now set the hostname celeryd identifies as using the --hostname argument.

  • Cache backend now respects CELERY_TASK_RESULT_EXPIRES.

  • Message format has been standardized and now uses ISO-8601 format for dates instead of datetime.

  • celeryd now responds to the HUP signal by restarting itself.

  • Periodic tasks are now scheduled on the clock.

    I.e. timedelta(hours=1) means every hour at :00 minutes, not every hour from the server starts. To revert to the previous behaviour you can set PeriodicTask.relative = True.

  • Now supports passing execute options to a TaskSets list of args, e.g.:

    >>> ts = TaskSet(add, [([2, 2], {}, {"countdown": 1}),
    ...                   ([4, 4], {}, {"countdown": 2}),
    ...                   ([8, 8], {}, {"countdown": 3})])
    >>> ts.run()
    
  • Got a 3x performance gain by setting the prefetch count to four times the concurrency, (from an average task round-trip of 0.1s to 0.03s!).

    A new setting has been added: CELERYD_PREFETCH_MULTIPLIER, which is set to 4 by default.

  • Improved support for webhook tasks.

    celery.task.rest is now deprecated, replaced with the new and shiny celery.task.http. With more reflective names, sensible interface, and it’s possible to override the methods used to perform HTTP requests.

  • The results of tasksets are now cached by storing it in the result backend.

CHANGES

  • Now depends on carrot >= 0.8.1

  • New dependencies: billiard, python-dateutil, django-picklefield

  • No longer depends on python-daemon

  • The uuid distribution is added as a dependency when running Python 2.4.

  • Now remembers the previously detected loader by keeping it in the CELERY_LOADER environment variable.

    This may help on windows where fork emulation is used.

  • ETA no longer sends datetime objects, but uses ISO 8601 date format in a string for better compatibility with other platforms.

  • No longer sends error mails for retried tasks.

  • Task can now override the backend used to store results.

  • Refactored the ExecuteWrapper, apply and CELERY_ALWAYS_EAGER now also executes the task callbacks and signals.

  • Now using a proper scheduler for the tasks with an ETA.

    This means waiting eta tasks are sorted by time, so we don’t have to poll the whole list all the time.

  • Now also imports modules listed in CELERY_IMPORTS when running with django (as documented).

  • Loglevel for stdout/stderr changed from INFO to ERROR

  • ImportErrors are now properly propogated when autodiscovering tasks.

  • You can now use celery.messaging.establish_connection to establish a connection to the broker.

  • When running as a separate service the periodic task scheduler does some smart moves to not poll too regularly.

    If you need faster poll times you can lower the value of CELERYBEAT_MAX_LOOP_INTERVAL.

  • You can now change periodic task intervals at runtime, by making run_every a property, or subclassing PeriodicTask.is_due.

  • The worker now supports control commands enabled through the use of a broadcast queue, you can remotely revoke tasks or set the rate limit for a task type. See celery.task.control.

  • The services now sets informative process names (as shown in ps listings) if the setproctitle module is installed.

  • celery.exceptions.NotRegistered now inherits from KeyError, and TaskRegistry.__getitem__``+``pop raises NotRegistered instead

  • You can set the loader via the CELERY_LOADER environment variable.

  • You can now set CELERY_IGNORE_RESULT to ignore task results by default (if enabled, tasks doesn’t save results or errors to the backend used).

  • celeryd now correctly handles malformed messages by throwing away and acknowledging the message, instead of crashing.

BUGS

  • Fixed a race condition that could happen while storing task results in the database.

DOCUMENTATION

  • Reference now split into two sections; API reference and internal module reference.

0.8.4 [2010-02-05 01:52 P.M CEST]

  • Now emits a warning if the –detach argument is used. –detach should not be used anymore, as it has several not easily fixed bugs related to it. Instead, use something like start-stop-daemon, supervisord or launchd (os x).
  • Make sure logger class is process aware, even if running Python >= 2.6.
  • Error e-mails are not sent anymore when the task is retried.

0.8.3 [2009-12-22 09:43 A.M CEST]

  • Fixed a possible race condition that could happen when storing/querying task results using the the database backend.
  • Now has console script entry points in the setup.py file, so tools like buildout will correctly install the programs celerybin and celeryinit.

0.8.2 [2009-11-20 03:40 P.M CEST]

  • QOS Prefetch count was not applied properly, as it was set for every message received (which apparently behaves like, “receive one more”), instead of only set when our wanted value cahnged.

0.8.1 [2009-11-16 05:21 P.M CEST]

VERY IMPORTANT NOTE

This release (with carrot 0.8.0) enables AMQP QoS (quality of service), which means the workers will only receive as many messages as it can handle at a time. As with any release, you should test this version upgrade on your development servers before rolling it out to production!

IMPORTANT CHANGES

  • If you’re using Python < 2.6 and you use the multiprocessing backport, then multiprocessing version 2.6.2.1 is required.

  • All AMQP_* settings has been renamed to BROKER_*, and in addition AMQP_SERVER has been renamed to BROKER_HOST, so before where you had:

    AMQP_SERVER = "localhost"
    AMQP_PORT = 5678
    AMQP_USER = "myuser"
    AMQP_PASSWORD = "mypassword"
    AMQP_VHOST = "celery"
    

    You need to change that to:

    BROKER_HOST = "localhost"
    BROKER_PORT = 5678
    BROKER_USER = "myuser"
    BROKER_PASSWORD = "mypassword"
    BROKER_VHOST = "celery"
    
  • Custom carrot backends now need to include the backend class name, so before where you had:

    CARROT_BACKEND = "mycustom.backend.module"
    

    you need to change it to:

    CARROT_BACKEND = "mycustom.backend.module.Backend"
    

    where Backend is the class name. This is probably "Backend", as that was the previously implied name.

  • New version requirement for carrot: 0.8.0

CHANGES

  • Incorporated the multiprocessing backport patch that fixes the processName error.
  • Ignore the result of PeriodicTask’s by default.
  • Added a Redis result store backend
  • Allow /etc/default/celeryd to define additional options for the celeryd init script.
  • MongoDB periodic tasks issue when using different time than UTC fixed.
  • Windows specific: Negate test for available os.fork (thanks miracle2k)
  • Now tried to handle broken PID files.
  • Added a Django test runner to contrib that sets CELERY_ALWAYS_EAGER = True for testing with the database backend
  • Added a CELERY_CACHE_BACKEND setting for using something other than the django-global cache backend.
  • Use custom implementation of functools.partial (curry) for Python 2.4 support (Probably still problems with running on 2.4, but it will eventually be supported)
  • Prepare exception to pickle when saving RETRY status for all backends.
  • SQLite no concurrency limit should only be effective if the db backend is used.

0.8.0 [2009-09-22 03:06 P.M CEST]

BACKWARD INCOMPATIBLE CHANGES

  • Add traceback to result value on failure.

    NOTE If you use the database backend you have to re-create the database table celery_taskmeta.

    Contact the mailinglist or IRC channel listed in README for help doing this.

  • Database tables are now only created if the database backend is used,

    so if you change back to the database backend at some point, be sure to initialize tables (django: syncdb, python: celeryinit). (Note: This is only the case when using Django 1.1 or higher)

  • Now depends on carrot version 0.6.0.

  • Now depends on python-daemon 1.4.8

IMPORTANT CHANGES

  • Celery can now be used in pure Python (outside of a Django project).

    This means celery is no longer Django specific.

    For more information see the FAQ entry Can I use celery without Django?.

  • We now have an AMQP result store backend.

    It uses messages to publish task return value and status. And it’s incredibly fast!

    See http://github.com/ask/celery/issues/closed#issue/6 for more info!

  • AMQP QoS (prefetch count) implemented:

    This to not receive more messages than we can handle.

  • Now redirects stdout/stderr to the celeryd logfile when detached

  • Now uses inspect.getargspec to only pass default arguments

    the task supports.

  • Add Task.on_success, .on_retry, .on_failure handlers
    See celery.task.base.Task.on_success(),
    celery.task.base.Task.on_retry(),

    celery.task.base.Task.on_failure(),

  • celery.utils.gen_unique_id: Workaround for

    http://bugs.python.org/issue4607

  • You can now customize what happens at worker start, at process init, etc

    by creating your own loaders. (see celery.loaders.default, celery.loaders.djangoapp, celery.loaders.)

  • Support for multiple AMQP exchanges and queues.

    This feature misses documentation and tests, so anyone interested is encouraged to improve this situation.

  • celeryd now survives a restart of the AMQP server!

    Automatically re-establish AMQP broker connection if it’s lost.

    New settings:

    • AMQP_CONNECTION_RETRY

      Set to True to enable connection retries.

    • AMQP_CONNECTION_MAX_RETRIES.

      Maximum number of restarts before we give up. Default: 100.

NEWS

  • Fix an incompatibility between python-daemon and multiprocessing,

    which resulted in the [Errno 10] No child processes problem when detaching.

  • Fixed a possible DjangoUnicodeDecodeError being raised when saving pickled

    data to Django’s memcached cache backend.

  • Better Windows compatibility.

  • New version of the pickled field (taken from

    http://www.djangosnippets.org/snippets/513/)

  • New signals introduced: task_sent, task_prerun and

    task_postrun, see celery.signals for more information.

  • TaskSetResult.join caused TypeError when timeout=None.

    Thanks Jerzy Kozera. Closes #31

  • views.apply should return HttpResponse instance.

    Thanks to Jerzy Kozera. Closes #32

  • PeriodicTask: Save conversion of run_every from int

    to timedelta to the class attribute instead of on the instance.

  • Exceptions has been moved to celery.exceptions, but are still

    available in the previous module.

  • Try to rollback transaction and retry saving result if an error happens

    while setting task status with the database backend.

  • jail() refactored into celery.execute.ExecuteWrapper.

  • views.apply now correctly sets mimetype to “application/json”

  • views.task_status now returns exception if status is RETRY

  • views.task_status now returns traceback if status is “FAILURE”

    or “RETRY”

  • Documented default task arguments.

  • Add a sensible __repr__ to ExceptionInfo for easier debugging

  • Fix documentation typo .. import map -> .. import dmap.

    Thanks mikedizon

0.6.0 [2009-08-07 06:54 A.M CET]

IMPORTANT CHANGES

  • Fixed a bug where tasks raising unpickleable exceptions crashed pool

    workers. So if you’ve had pool workers mysteriously dissapearing, or problems with celeryd stopping working, this has been fixed in this version.

  • Fixed a race condition with periodic tasks.

  • The task pool is now supervised, so if a pool worker crashes,

    goes away or stops responding, it is automatically replaced with a new one.

  • Task.name is now automatically generated out of class module+name, e.g.

    "djangotwitter.tasks.UpdateStatusesTask". Very convenient. No idea why we didn’t do this before. Some documentation is updated to not manually specify a task name.

NEWS

  • Tested with Django 1.1

  • New Tutorial: Creating a click counter using carrot and celery

  • Database entries for periodic tasks are now created at celeryd

    startup instead of for each check (which has been a forgotten TODO/XXX in the code for a long time)

  • New settings variable: CELERY_TASK_RESULT_EXPIRES

    Time (in seconds, or a datetime.timedelta object) for when after stored task results are deleted. For the moment this only works for the database backend.

  • celeryd now emits a debug log message for which periodic tasks

    has been launched.

  • The periodic task table is now locked for reading while getting

    periodic task status. (MySQL only so far, seeking patches for other engines)

  • A lot more debugging information is now available by turning on the

    DEBUG loglevel (--loglevel=DEBUG).

  • Functions/methods with a timeout argument now works correctly.

  • New: celery.strategy.even_time_distribution:

    With an iterator yielding task args, kwargs tuples, evenly distribute the processing of its tasks throughout the time window available.

  • Log message Unknown task ignored... now has loglevel ERROR

  • Log message "Got task from broker" is now emitted for all tasks, even if

    the task has an ETA (estimated time of arrival). Also the message now includes the ETA for the task (if any).

  • Acknowledgement now happens in the pool callback. Can’t do ack in the job

    target, as it’s not pickleable (can’t share AMQP connection, etc)).

  • Added note about .delay hanging in README

  • Tests now passing in Django 1.1

  • Fixed discovery to make sure app is in INSTALLED_APPS

  • Previously overrided pool behaviour (process reap, wait until pool worker

    available, etc.) is now handled by multiprocessing.Pool itself.

  • Convert statistics data to unicode for use as kwargs. Thanks Lucy!

0.4.1 [2009-07-02 01:42 P.M CET]

  • Fixed a bug with parsing the message options (mandatory, routing_key, priority, immediate)

0.4.0 [2009-07-01 07:29 P.M CET]

  • Adds eager execution. celery.execute.apply``|``Task.apply executes the function blocking until the task is done, for API compatiblity it returns an celery.result.EagerResult instance. You can configure celery to always run tasks locally by setting the CELERY_ALWAYS_EAGER setting to True.
  • Now depends on anyjson.
  • 99% coverage using python coverage 3.0.

0.3.20 [2009-06-25 08:42 P.M CET]

  • New arguments to apply_async (the advanced version of delay_task), countdown and eta;

    >>> # Run 10 seconds into the future.
    >>> res = apply_async(MyTask, countdown=10);
    
    >>> # Run 1 day from now
    >>> res = apply_async(MyTask, eta=datetime.now() +
    ...                                                                     timedelta(days=1)
    
  • Now unlinks the pidfile if it’s stale.

  • Lots of more tests.

  • Now compatible with carrot >= 0.5.0.

  • IMPORTANT The subtask_ids attribute on the TaskSetResult instance has been removed. To get this information instead use:

    >>> subtask_ids = [subtask.task_id for subtask in ts_res.subtasks]
    
  • Taskset.run() now respects extra message options from the task class.

  • Task: Add attribute ignore_result: Don’t store the status and return value. This means you can’t use the celery.result.AsyncResult to check if the task is done, or get its return value. Only use if you need the performance and is able live without these features. Any exceptions raised will store the return value/status as usual.

  • Task: Add attribute disable_error_emails to disable sending error emails for that task.

  • Should now work on Windows (although running in the background won’t work, so using the --detach argument results in an exception being raised.)

  • Added support for statistics for profiling and monitoring. To start sending statistics start celeryd with the --statistics option. Then after a while you can dump the results by running python manage.py celerystats. See celery.monitoring for more information.

  • The celery daemon can now be supervised (i.e it is automatically restarted if it crashes). To use this start celeryd with the --supervised option (or alternatively -S).

  • views.apply: View applying a task. Example:

    http://e.com/celery/apply/task_name/arg1/arg2//?kwarg1=a&kwarg2=b

    NOTE Use with caution, preferably not make this publicly accessible without ensuring your code is safe!

  • Refactored celery.task. It’s now split into three modules:

    • celery.task

      Contains apply_async, delay_task, discard_all, and task shortcuts, plus imports objects from celery.task.base and celery.task.builtins

    • celery.task.base

      Contains task base classes: Task, PeriodicTask, TaskSet, AsynchronousMapTask, ExecuteRemoteTask.

    • celery.task.builtins

      Built-in tasks: PingTask, DeleteExpiredTaskMetaTask.

0.3.7 [2008-06-16 11:41 P.M CET]

  • IMPORTANT Now uses AMQP’s basic.consume instead of basic.get. This means we’re no longer polling the broker for new messages.

  • IMPORTANT Default concurrency limit is now set to the number of CPUs available on the system.

  • IMPORTANT tasks.register: Renamed task_name argument to name, so

    >>> tasks.register(func, task_name="mytask")
    

    has to be replaced with:

    >>> tasks.register(func, name="mytask")
    
  • The daemon now correctly runs if the pidlock is stale.

  • Now compatible with carrot 0.4.5

  • Default AMQP connnection timeout is now 4 seconds.

  • AsyncResult.read() was always returning True.

  • Only use README as long_description if the file exists so easy_install doesn’t break.

  • celery.view: JSON responses now properly set its mime-type.

  • apply_async now has a connection keyword argument so you can re-use the same AMQP connection if you want to execute more than one task.

  • Handle failures in task_status view such that it won’t throw 500s.

  • Fixed typo AMQP_SERVER in documentation to AMQP_HOST.

  • Worker exception e-mails sent to admins now works properly.

  • No longer depends on django, so installing celery won’t affect the preferred Django version installed.

  • Now works with PostgreSQL (psycopg2) again by registering the PickledObject field.

  • celeryd: Added --detach option as an alias to --daemon, and it’s the term used in the documentation from now on.

  • Make sure the pool and periodic task worker thread is terminated properly at exit. (So Ctrl-C works again).

  • Now depends on python-daemon.

  • Removed dependency to simplejson

  • Cache Backend: Re-establishes connection for every task process if the Django cache backend is memcached/libmemcached.

  • Tyrant Backend: Now re-establishes the connection for every task executed.

0.3.3 [2009-06-08 01:07 P.M CET]

  • The PeriodicWorkController now sleeps for 1 second between checking for periodic tasks to execute.

0.3.2 [2009-06-08 01:07 P.M CET]

  • celeryd: Added option --discard: Discard (delete!) all waiting messages in the queue.
  • celeryd: The --wakeup-after option was not handled as a float.

0.3.1 [2009-06-08 01:07 P.M CET]

  • The PeriodicTask` worker is now running in its own thread instead of blocking the TaskController loop.
  • Default QUEUE_WAKEUP_AFTER has been lowered to 0.1 (was 0.3)

0.3.0 [2009-06-08 12:41 P.M CET]

NOTE This is a development version, for the stable release, please see versions 0.2.x.

VERY IMPORTANT: Pickle is now the encoder used for serializing task arguments, so be sure to flush your task queue before you upgrade.

  • IMPORTANT TaskSet.run() now returns a celery.result.TaskSetResult instance, which lets you inspect the status and return values of a taskset as it was a single entity.

  • IMPORTANT Celery now depends on carrot >= 0.4.1.

  • The celery daemon now sends task errors to the registered admin e-mails. To turn off this feature, set SEND_CELERY_TASK_ERROR_EMAILS to False in your settings.py. Thanks to Grégoire Cachet.

  • You can now run the celery daemon by using manage.py:

    $ python manage.py celeryd

    Thanks to Grégoire Cachet.

  • Added support for message priorities, topic exchanges, custom routing keys for tasks. This means we have introduced celery.task.apply_async, a new way of executing tasks.

    You can use celery.task.delay and celery.Task.delay like usual, but if you want greater control over the message sent, you want celery.task.apply_async and celery.Task.apply_async.

    This also means the AMQP configuration has changed. Some settings has been renamed, while others are new:

    CELERY_AMQP_EXCHANGE
    CELERY_AMQP_PUBLISHER_ROUTING_KEY
    CELERY_AMQP_CONSUMER_ROUTING_KEY
    CELERY_AMQP_CONSUMER_QUEUE
    CELERY_AMQP_EXCHANGE_TYPE
    

    See the entry Can I send some tasks to only some servers? in the FAQ for more information.

  • Task errors are now logged using loglevel ERROR instead of INFO, and backtraces are dumped. Thanks to Grégoire Cachet.
  • Make every new worker process re-establish it’s Django DB connection, this solving the “MySQL connection died?” exceptions. Thanks to Vitaly Babiy and Jirka Vejrazka.
  • IMOPORTANT Now using pickle to encode task arguments. This means you now can pass complex python objects to tasks as arguments.
  • Removed dependency to yadayada.
  • Added a FAQ, see docs/faq.rst.
  • Now converts any unicode keys in task kwargs to regular strings. Thanks Vitaly Babiy.
  • Renamed the TaskDaemon to WorkController.
  • celery.datastructures.TaskProcessQueue is now renamed to celery.pool.TaskPool.
  • The pool algorithm has been refactored for greater performance and stability.

0.2.0 [2009-05-20 05:14 P.M CET]

  • Final release of 0.2.0
  • Compatible with carrot version 0.4.0.
  • Fixes some syntax errors related to fetching results from the database backend.

0.2.0-pre3 [2009-05-20 05:14 P.M CET]

  • Internal release. Improved handling of unpickled exceptions, get_result now tries to recreate something looking like the original exception.

0.2.0-pre2 [2009-05-20 01:56 P.M CET]

  • Now handles unpickleable exceptions (like the dynimically generated subclasses of django.core.exception.MultipleObjectsReturned).

0.2.0-pre1 [2009-05-20 12:33 P.M CET]

  • It’s getting quite stable, with a lot of new features, so bump version to 0.2. This is a pre-release.
  • celery.task.mark_as_read() and celery.task.mark_as_failure() has been removed. Use celery.backends.default_backend.mark_as_read(), and celery.backends.default_backend.mark_as_failure() instead.

0.1.15 [2009-05-19 04:13 P.M CET]

  • The celery daemon was leaking AMQP connections, this should be fixed, if you have any problems with too many files open (like emfile errors in rabbit.log, please contact us!

0.1.14 [2009-05-19 01:08 P.M CET]

  • Fixed a syntax error in the TaskSet class. (No such variable TimeOutError).

0.1.13 [2009-05-19 12:36 P.M CET]

  • Forgot to add yadayada to install requirements.

  • Now deletes all expired task results, not just those marked as done.

  • Able to load the Tokyo Tyrant backend class without django configuration, can specify tyrant settings directly in the class constructor.

  • Improved API documentation

  • Now using the Sphinx documentation system, you can build the html documentation by doing

    $ cd docs
    $ make html

    and the result will be in docs/.build/html.

0.1.12 [2009-05-18 04:38 P.M CET]

  • delay_task() etc. now returns celery.task.AsyncResult object, which lets you check the result and any failure that might have happened. It kind of works like the multiprocessing.AsyncResult class returned by multiprocessing.Pool.map_async.

  • Added dmap() and dmap_async(). This works like the multiprocessing.Pool versions except they are tasks distributed to the celery server. Example:

    >>> from celery.task import dmap
    >>> import operator
    >>> dmap(operator.add, [[2, 2], [4, 4], [8, 8]])
    >>> [4, 8, 16]
    
    >>> from celery.task import dmap_async
    >>> import operator
    >>> result = dmap_async(operator.add, [[2, 2], [4, 4], [8, 8]])
    >>> result.ready()
    False
    >>> time.sleep(1)
    >>> result.ready()
    True
    >>> result.result
    [4, 8, 16]
    
  • Refactored the task metadata cache and database backends, and added a new backend for Tokyo Tyrant. You can set the backend in your django settings file. e.g:

    CELERY_RESULT_BACKEND = "database"; # Uses the database
    CELERY_RESULT_BACKEND = "cache"; # Uses the django cache framework
    CELERY_RESULT_BACKEND = "tyrant"; # Uses Tokyo Tyrant
    TT_HOST = "localhost"; # Hostname for the Tokyo Tyrant server.
    TT_PORT = 6657; # Port of the Tokyo Tyrant server.
    

0.1.11 [2009-05-12 02:08 P.M CET]

  • The logging system was leaking file descriptors, resulting in servers stopping with the EMFILES (too many open files) error. (fixed)

0.1.10 [2009-05-11 12:46 P.M CET]

  • Tasks now supports both positional arguments and keyword arguments.
  • Requires carrot 0.3.8.
  • The daemon now tries to reconnect if the connection is lost.

0.1.8 [2009-05-07 12:27 P.M CET]

  • Better test coverage
  • More documentation
  • celeryd doesn’t emit Queue is empty message if settings.CELERYD_EMPTY_MSG_EMIT_EVERY is 0.

0.1.7 [2009-04-30 1:50 P.M CET]

  • Added some unittests
  • Can now use the database for task metadata (like if the task has been executed or not). Set settings.CELERY_TASK_META
  • Can now run python setup.py test to run the unittests from within the tests project.
  • Can set the AMQP exchange/routing key/queue using settings.CELERY_AMQP_EXCHANGE, settings.CELERY_AMQP_ROUTING_KEY, and settings.CELERY_AMQP_CONSUMER_QUEUE.

0.1.6 [2009-04-28 2:13 P.M CET]

  • Introducing TaskSet. A set of subtasks is executed and you can find out how many, or if all them, are done (excellent for progress bars and such)

  • Now catches all exceptions when running Task.__call__, so the daemon doesn’t die. This does’t happen for pure functions yet, only Task classes.

  • autodiscover() now works with zipped eggs.

  • celeryd: Now adds curernt working directory to sys.path for convenience.

  • The run_every attribute of PeriodicTask classes can now be a datetime.timedelta() object.

  • celeryd: You can now set the DJANGO_PROJECT_DIR variable for celeryd and it will add that to sys.path for easy launching.

  • Can now check if a task has been executed or not via HTTP.

  • You can do this by including the celery urls.py into your project,

    >>> url(r'^celery/$', include("celery.urls"))
    

    then visiting the following url,:

    http://mysite/celery/$task_id/done/

    this will return a JSON dictionary like e.g:

    >>> {"task": {"id": $task_id, "executed": true}}
  • delay_task now returns string id, not uuid.UUID instance.

  • Now has PeriodicTasks, to have cron like functionality.

  • Project changed name from crunchy to celery. The details of the name change request is in docs/name_change_request.txt.

0.1.0 [2009-04-24 11:28 A.M CET]

  • Initial release
PKXDD9BEE!celery-1.0-archived/genindex.html Index — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Index

A | B | C | D | E | F | G | I | L | M | N | O | P | Q | R | S | T | U | W

A

ACKS_LATE (built-in variable)
add() (celery.datastructures.LimitedSet method)
ALL_STATES (in module celery.states)
AlreadyRegistered
ALWAYS_EAGER (built-in variable)
autodiscover() (in module celery.loaders.djangoapp)

B

BaseLoader (class in celery.loaders.base)
BROADCAST_EXCHANGE (built-in variable)
BROADCAST_EXCHANGE_TYPE (built-in variable)
BROADCAST_QUEUE (built-in variable)
BROKER_CONNECTION_MAX_RETRIES (built-in variable)
BROKER_CONNECTION_RETRY (built-in variable)
BROKER_CONNECTION_TIMEOUT (built-in variable)

C

celery.bin.celeryinit (module)
celery.contrib.test_runner (module)
celery.datastructures (module)
celery.exceptions (module)
celery.loaders (module)
celery.loaders.base (module)
celery.loaders.default (module)
celery.loaders.djangoapp (module)
celery.managers (module)
celery.platform (module)
celery.registry (module)
celery.states (module)
celery.task.base (module), [1]
celery.task.http (module)
celery.utils (module)
celery.utils.compat (module)
celery.utils.patch (module)
celery.utils.timeutils (module)
CELERY_CACHE_BACKEND (built-in variable)
CELERY_SEND_TASK_ERROR_EMAILS (built-in variable)
CELERYBEAT_LOG_FILE (built-in variable)
CELERYBEAT_LOG_LEVEL (built-in variable)
CELERYBEAT_MAX_LOOP_INTERVAL (built-in variable)
CELERYBEAT_SCHEDULE_FILENAME (built-in variable)
CELERYD_CONCURRENCY (built-in variable)
CELERYD_ETA_SCHEDULER (built-in variable)
CELERYD_LISTENER (built-in variable)
CELERYD_LOG_FILE (built-in variable)
CELERYD_LOG_FORMAT (built-in variable)
CELERYD_LOG_LEVEL (built-in variable)
CELERYD_MEDIATOR (built-in variable)
CELERYD_POOL (built-in variable)
CELERYD_PREFETCH_MULTIPLIER (built-in variable)
CELERYD_TASK_LOG_FORMAT (built-in variable)
CELERYMON_LOG_FILE (built-in variable)
CELERYMON_LOG_LEVEL (built-in variable)
chunks() (in module celery.utils)
clear() (celery.utils.compat.OrderedDict method)
conf (celery.loaders.base.BaseLoader attribute)
consume_queue() (in module celery.datastructures)
copy() (celery.utils.compat.OrderedDict method)
current_loader() (in module celery.loaders)

D

date_done (TaskMeta attribute)
decrement() (celery.datastructures.SharedCounter method)
DEFAULT_DELIVERY_MODE (built-in variable)
DEFAULT_EXCHANGE (built-in variable)
DEFAULT_EXCHANGE_TYPE (built-in variable)
DEFAULT_QUEUE (built-in variable)
DEFAULT_RATE_LIMIT (built-in variable)
DEFAULT_ROUTING_KEY (built-in variable)
delay() (PeriodicTaskMeta method)
delta_resolution() (in module celery.utils.timeutils)
DISABLE_RATE_LIMITS (built-in variable)

E

environment variable
NOSE_VERBOSE
EVENT_EXCHANGE (built-in variable)
EVENT_EXCHANGE_TYPE (built-in variable)
EVENT_QUEUE (built-in variable)
EVENT_ROUTING_KEY (built-in variable)
EVENT_SERIALIZER (built-in variable)
exception (celery.datastructures.ExceptionInfo attribute)
EXCEPTION_STATES (in module celery.states)
ExceptionInfo (class in celery.datastructures)

F

FAILURE (in module celery.states)
filled (celery.datastructures.PositionQueue attribute)
filter_types() (celery.registry.TaskRegistry method)
find_related_module() (in module celery.loaders.djangoapp)
first (celery.datastructures.LimitedSet attribute)
first() (in module celery.utils)
fromkeys() (celery.utils.compat.OrderedDict class method)
full() (celery.datastructures.PositionQueue method)
fun_takes_kwargs() (in module celery.utils)

G

gen_unique_id() (in module celery.utils)
get_cls_by_name() (in module celery.utils)
get_full_cls_name() (in module celery.utils)
get_loader_cls() (in module celery.loaders)
get_task() (celery.managers.TaskManager method)

I

IGNORE_RESULT (built-in variable)
ignore_signal() (in module celery.platform)
ImproperlyConfigured
increment() (celery.datastructures.SharedCounter method)
install_signal_handler() (in module celery.platform)
instantiate() (in module celery.utils)

L

last_run_at (PeriodicTaskMeta attribute)
length (celery.datastructures.PositionQueue attribute)
LimitedSet (class in celery.datastructures)
load_settings() (in module celery.loaders)
Loader (class in celery.loaders.default)
(class in celery.loaders.djangoapp)
LocalCache (class in celery.datastructures)
LOG_LEVELS (built-in variable)

M

mattrgetter() (in module celery.utils)
MAX_CACHED_RESULTS (built-in variable)
MaxRetriesExceededError
mitemgetter() (in module celery.utils)

N

name (PeriodicTaskMeta attribute)
noop() (in module celery.utils)
NOSE_VERBOSE
NotRegistered

O

on_task_init() (celery.loaders.base.BaseLoader method)
(celery.loaders.djangoapp.Loader method)
on_worker_init() (celery.loaders.base.BaseLoader method)
(celery.loaders.default.Loader method)
(celery.loaders.djangoapp.Loader method)
OrderedDict (class in celery.utils.compat)

P

padlist() (in module celery.utils)
PENDING (in module celery.states)
periodic() (celery.registry.TaskRegistry method)
PeriodicTaskMeta (built-in class)
pop_value() (celery.datastructures.LimitedSet method)
popitem() (celery.utils.compat.OrderedDict method)
PositionQueue (class in celery.datastructures)
PositionQueue.UnfilledPosition (class in celery.datastructures)

Q

QUEUES (built-in variable)

R

rate() (in module celery.utils.timeutils)
read_configuration() (celery.loaders.default.Loader method)
(celery.loaders.djangoapp.Loader method)
READY_STATES (in module celery.states)
register() (celery.registry.TaskRegistry method)
regular() (celery.registry.TaskRegistry method)
remaining() (in module celery.utils.timeutils)
repeatlast() (in module celery.utils)
reset_signal() (in module celery.platform)
restore_taskset() (celery.managers.TaskSetManager method)
result (TaskMeta attribute)
RESULT_BACKEND (built-in variable)
RESULT_EXCHANGE (built-in variable)
RETRY (in module celery.states), [1]
retry_over_time() (in module celery.utils)
RetryTaskError
revoked (built-in variable)
run_tests() (in module celery.contrib.test_runner)

S

SEND_EVENTS (built-in variable)
set_mp_process_title() (in module celery.platform)
set_process_title() (in module celery.platform)
SharedCounter (class in celery.datastructures)
STARTED (in module celery.states)
status (TaskMeta attribute)
STORE_ERRORS_EVEN_IF_IGNORED (built-in variable)
store_result() (celery.managers.TaskManager method)
(celery.managers.TaskSetManager method)
SUCCESS (in module celery.states)

T

task (PeriodicTaskMeta attribute)
task_id (TaskMeta attribute)
task_postrun (built-in variable)
task_prerun (built-in variable)
TASK_RESULT_EXPIRES (built-in variable)
task_sent (built-in variable)
TASK_SERIALIZER (built-in variable)
TASK_STATUS_DONE (built-in variable)
TASK_STATUS_FAILURE (built-in variable)
TASK_STATUS_PENDING (built-in variable)
TASK_STATUS_RETRY (built-in variable)
TASK_STATUSES (built-in variable)
TASK_STATUSES_CHOICES (built-in variable)
TaskManager (class in celery.managers)
TaskMeta (built-in class)
TaskRegistry (class in celery.registry)
TaskRegistry.NotRegistered
TaskSetManager (class in celery.managers)
timedelta_seconds() (in module celery.utils.timeutils)
TimeoutError
total_run_count (PeriodicTaskMeta attribute)
traceback (celery.datastructures.ExceptionInfo attribute)
TRACK_STARTED (built-in variable)
transaction_retry() (in module celery.managers)

U

UNREADY_STATES (in module celery.states)
unregister() (celery.registry.TaskRegistry method)

W

weekday() (in module celery.utils.timeutils)
worker_init (built-in variable)
worker_ready (built-in variable)
worker_shutdown (built-in variable)
PKXDDޘa[  celery-1.0-archived/faq.html Frequently Asked Questions — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

This Page

Frequently Asked Questions

General

What kinds of things should I use celery for?

Answer: Queue everything and delight everyone is a good article describing why you would use a queue in a web context.

These are some common use cases:

  • Running something in the background. For example, to finish the web request as soon as possible, then update the users page incrementally. This gives the user the impression of good performane and “snappiness”, even though the real work might actually take some time.
  • Running something after the web request has finished.
  • Making sure something is done, by executing it asynchronously and using retries.
  • Scheduling periodic work.

And to some degree:

  • Distributed computing.
  • Parallel execution.

Misconceptions

Is celery dependent on pickle?

Answer: No.

Celery can support any serialization scheme and has support for JSON/YAML and Pickle by default. You can even send one task using pickle, and another one with JSON seamlessly, this is because every task is associated with a content-type. The default serialization scheme is pickle because it’s the most used, and it has support for sending complex objects as task arguments.

You can set a global default serializer, the default serializer for a particular Task, or even what serializer to use when sending a single task instance.

Is celery for Django only?

Answer: No.

You can use all of the features without using Django.

Why is Django a dependency?

Celery uses the Django ORM for database access when using the database result backend, the Django cache framework when using the cache result backend, and the Django signal dispatch mechanisms for signaling.

This doesn’t mean you need to have a Django project to use celery, it just means that sometimes we use internal Django components.

The long term plan is to replace these with other solutions, (e.g. SQLAlchemy as the ORM, and louie, for signaling). The celery distribution will be split into two:

  • celery

    The core. Using SQLAlchemy for the database backend.

  • django-celery

    Celery integration for Django, using the Django ORM for the database backend.

We’re currently seeking people with SQLAlchemy experience, so please contact the project if you want this done sooner.

The reason for the split is for purity only. It shouldn’t affect you much as a user, so please don’t worry about the Django dependency, just have a good time using celery.

Do I have to use AMQP/RabbitMQ?

Answer: No.

You can also use Redis or an SQL database, see Using other queues.

Redis or a database won’t perform as well as an AMQP broker. If you have strict reliability requirements you are encouraged to use RabbitMQ or another AMQP broker. Redis/database also use polling, so they are likely to consume more resources. However, if you for some reason are not able to use AMQP, feel free to use these alternatives. They will probably work fine for most use cases, and note that the above points are not specific to celery; If using Redis/database as a queue worked fine for you before, it probably will now. You can always upgrade later if you need to.

Is celery multi-lingual?

Answer: Yes.

celeryd is an implementation of celery in python. If the language has an AMQP client, there shouldn’t be much work to create a worker in your language. A celery worker is just a program connecting to the broker to consume messages. There’s no other communication involved.

Also, there’s another way to be language indepedent, and that is to use REST tasks, instead of your tasks being functions, they’re URLs. With this information you can even create simple web servers that enable preloading of code. See: User Guide: Remote Tasks.

Troubleshooting

MySQL is throwing deadlock errors, what can I do?

Answer: MySQL has default isolation level set to REPEATABLE-READ, if you don’t really need that, set it to READ-COMMITTED. You can do that by adding the following to your my.cnf:

[mysqld]
transaction-isolation = READ-COMMITTED

For more information about InnoDBs transaction model see MySQL - The InnoDB Transaction Model and Locking in the MySQL user manual.

(Thanks to Honza Kral and Anton Tsigularov for this solution)

celeryd is not doing anything, just hanging

Answer: See MySQL is throwing deadlock errors, what can I do?.
or Why is Task.delay/apply* just hanging?.

Why is Task.delay/apply*/celeryd just hanging?

Answer: There is a bug in some AMQP clients that will make it hang if it’s not able to authenticate the current user, the password doesn’t match or the user does not have access to the virtual host specified. Be sure to check your broker logs (for RabbitMQ that is /var/log/rabbitmq/rabbit.log on most systems), it usually contains a message describing the reason.

Why won’t celeryd run on FreeBSD?

Answer: multiprocessing.Pool requires a working POSIX semaphore implementation which isn’t enabled in FreeBSD by default. You have to enable POSIX semaphores in the kernel and manually recompile multiprocessing.

Luckily, Viktor Petersson has written a tutorial to get you started with Celery on FreeBSD here: http://www.playingwithwire.com/2009/10/how-to-get-celeryd-to-work-on-freebsd/

I’m having IntegrityError: Duplicate Key errors. Why?

Answer: See MySQL is throwing deadlock errors, what can I do?. Thanks to howsthedotcom.

Why aren’t my tasks processed?

Answer: With RabbitMQ you can see how many consumers are currently receiving tasks by running the following command:

$ rabbitmqctl list_queues -p <myvhost> name messages consumers
Listing queues ...
celery     2891    2

This shows that there’s 2891 messages waiting to be processed in the task queue, and there are two consumers processing them.

One reason that the queue is never emptied could be that you have a stale celery process taking the messages hostage. This could happen if celeryd wasn’t properly shut down.

When a message is recieved by a worker the broker waits for it to be acknowledged before marking the message as processed. The broker will not re-send that message to another consumer until the consumer is shut down properly.

If you hit this problem you have to kill all workers manually and restart them:

ps auxww | grep celeryd | awk '{print $2}' | xargs kill

You might have to wait a while until all workers have finished the work they’re doing. If it’s still hanging after a long time you can kill them by force with:

ps auxww | grep celeryd | awk '{print $2}' | xargs kill -9

Why won’t my Task run?

Answer: Did you register the task in the applications tasks.py module? (or in some other module Django loads by default, like models.py?). Also there might be syntax errors preventing the tasks module being imported.

You can find out if celery is able to run the task by executing the task manually:

>>> from myapp.tasks import MyPeriodicTask
>>> MyPeriodicTask.delay()

Watch celeryds logfile to see if it’s able to find the task, or if some other error is happening.

Why won’t my Periodic Task run?

Answer: See Why won’t my Task run?.

How do I discard all waiting tasks?

Answer: Use celery.task.discard_all(), like this:

>>> from celery.task import discard_all
>>> discard_all()
1753

The number 1753 is the number of messages deleted.

You can also start celeryd with the --discard argument which will accomplish the same thing.

I’ve discarded messages, but there are still messages left in the queue?

Answer: Tasks are acknowledged (removed from the queue) as soon as they are actually executed. After the worker has received a task, it will take some time until it is actually executed, especially if there are a lot of tasks already waiting for execution. Messages that are not acknowledged are hold on to by the worker until it closes the connection to the broker (AMQP server). When that connection is closed (e.g because the worker was stopped) the tasks will be re-sent by the broker to the next available worker (or the same worker when it has been restarted), so to properly purge the queue of waiting tasks you have to stop all the workers, and then discard the tasks using discard_all.

Windows: The -B / --beat option to celeryd doesn’t work?

Answer: That’s right. Run celerybeat and celeryd as separate services instead.

Tasks

How can I reuse the same connection when applying tasks?

Answer: See Executing Tasks.

Can I execute a task by name?

Answer: Yes. Use celery.execute.send_task(). You can also execute a task by name from any language that has an AMQP client.

>>> from celery.execute import send_task
>>> send_task("tasks.add", args=[2, 2], kwargs={})
<AsyncResult: 373550e8-b9a0-4666-bc61-ace01fa4f91d>

Results

How dow I get the result of a task if I have the ID that points there?

Answer: Use Task.AsyncResult:

>>> result = MyTask.AsyncResult(task_id)
>>> result.get()

This will give you a celery.result.BaseAsyncResult instance using the tasks current result backend.

If you need to specify a custom result backend you should use celery.result.BaseAsyncResult directly:

>>> from celery.result import BaseAsyncResult
>>> result = BaseAsyncResult(task_id, backend=...)
>>> result.get()

Brokers

Why is RabbitMQ crashing?

RabbitMQ will crash if it runs out of memory. This will be fixed in a future release of RabbitMQ. please refer to the RabbitMQ FAQ: http://www.rabbitmq.com/faq.html#node-runs-out-of-memory

Some common Celery misconfigurations can crash RabbitMQ:

  • Events.

Running celeryd with the -E/--events option will send messages for events happening inside of the worker. If these event messages are not consumed, you will eventually run out of memory.

Events should only be enabled if you have an active monitor consuming them.

  • AMQP backend results.

When running with the AMQP result backend, every task result will be sent as a message. If you don’t collect these results, they will build up and RabbitMQ will eventually run out of memory.

If you don’t use the results for a task, make sure you set the ignore_result option:

Results can also be disabled globally using the CELERY_IGNORE_RESULT setting.

Can I use celery with ActiveMQ/STOMP?

Answer: Yes, but this is somewhat experimental for now. It is working ok in a test configuration, but it has not been tested in production like RabbitMQ has. If you have any problems with using STOMP and celery, please report the bugs to the issue tracker:

First you have to use the master branch of celery:

$ git clone git://github.com/ask/celery.git
$ cd celery
$ sudo python setup.py install
$ cd ..

Then you need to install the stompbackend branch of carrot:

$ git clone git://github.com/ask/carrot.git
$ cd carrot
$ git checkout stompbackend
$ sudo python setup.py install
$ cd ..

And my fork of python-stomp which adds non-blocking support:

$ hg clone http://bitbucket.org/asksol/python-stomp/
$ cd python-stomp
$ sudo python setup.py install
$ cd ..

In this example we will use a queue called celery which we created in the ActiveMQ web admin interface.

Note: For ActiveMQ the queue name has to have "/queue/" prepended to it. i.e. the queue celery becomes /queue/celery.

Since a STOMP queue is a single named entity and it doesn’t have the routing capabilities of AMQP you need to set both the queue, and exchange settings to your queue name. This is a minor inconvenience since carrot needs to maintain the same interface for both AMQP and STOMP (obviously the one with the most capabilities won).

Use the following specific settings in your settings.py:

# Makes python-stomp the default backend for carrot.
CARROT_BACKEND = "stomp"

# STOMP hostname and port settings.
BROKER_HOST = "localhost"
BROKER_PORT = 61613

# The queue name to use (both queue and exchange must be set to the
# same queue name when using STOMP)
CELERY_DEFAULT_QUEUE = "/queue/celery"
CELERY_DEFAULT_EXCHANGE = "/queue/celery"

CELERY_QUEUES = {
    "/queue/celery": {"exchange": "/queue/celery"}
}

Now you can go on reading the tutorial in the README, ignoring any AMQP specific options.

What features are not supported when using STOMP?

This is a (possible incomplete) list of features not available when using the STOMP backend:

  • routing keys
  • exchange types (direct, topic, headers, etc)
  • immediate
  • mandatory

Features

How can I run a task once another task has finished?

Answer: You can safely launch a task inside a task. Also, a common pattern is to use callback tasks:

@task()
def add(x, y, callback=None):
    result = x + y
    if callback:
        callback.delay(result)
    return result


@task(ignore_result=True)
def log_result(result, **kwargs):
    logger = log_result.get_logger(**kwargs)
    logger.info("log_result got: %s" % (result, ))


>>> add.delay(2, 2, callback=log_result)

Can I cancel the execution of a task?

Answer: Yes. Use result.revoke:

>>> result = add.apply_async(args=[2, 2], countdown=120)
>>> result.revoke()

or if you only have the task id:

>>> from celery.task.control import revoke
>>> revoke(task_id)

Why aren’t my remote control commands received by all workers?

Answer: To receive broadcast remote control commands, every celeryd uses its hostname to create a unique queue name to listen to, so if you have more than one worker with the same hostname, the control commands will be recieved in round-robin between them.

To work around this you can explicitly set the hostname for every worker using the --hostname argument to celeryd:

$ celeryd --hostname=$(hostname).1
$ celeryd --hostname=$(hostname).2

etc, etc.

Can I send some tasks to only some servers?

Answer: Yes. You can route tasks to an arbitrary server using AMQP, and a worker can bind to as many queues as it wants.

Say you have two servers, x, and y that handles regular tasks, and one server z, that only handles feed related tasks, you can use this configuration:

  • Servers x and y: settings.py:
CELERY_DEFAULT_QUEUE = "regular_tasks"
CELERY_QUEUES = {
    "regular_tasks": {
        "binding_key": "task.#",
    },
}
CELERY_DEFAULT_EXCHANGE = "tasks"
CELERY_DEFAULT_EXCHANGE_TYPE = "topic"
CELERY_DEFAULT_ROUTING_KEY = "task.regular"
  • Server z: settings.py:
CELERY_DEFAULT_QUEUE = "feed_tasks"
CELERY_QUEUES = {
    "feed_tasks": {
        "binding_key": "feed.#",
    },
}
CELERY_DEFAULT_EXCHANGE = "tasks"
CELERY_DEFAULT_ROUTING_KEY = "task.regular"
CELERY_DEFAULT_EXCHANGE_TYPE = "topic"

CELERY_QUEUES is a map of queue names and their exchange/type/binding_key, if you don’t set exchange or exchange type, they will be taken from the CELERY_DEFAULT_EXCHANGE/CELERY_DEFAULT_EXCHANGE_TYPE settings.

Now to make a Task run on the z server you need to set its routing_key attribute so it starts with the words "task.feed.":

from feedaggregator.models import Feed
from celery.decorators import task

@task(routing_key="feed.importer")
def import_feed(feed_url):
    Feed.objects.import_feed(feed_url)

or if subclassing the Task class directly:

class FeedImportTask(Task):
    routing_key = "feed.importer"

    def run(self, feed_url):
        Feed.objects.import_feed(feed_url)

You can also override this using the routing_key argument to celery.task.apply_async():

>>> from myapp.tasks import RefreshFeedTask
>>> RefreshFeedTask.apply_async(args=["http://cnn.com/rss"],
...                             routing_key="feed.importer")

If you want, you can even have your feed processing worker handle regular tasks as well, maybe in times when there’s a lot of work to do. Just add a new queue to server z‘s CELERY_QUEUES:

CELERY_QUEUES = {
    "feed_tasks": {
        "binding_key": "feed.#",
    },
    "regular_tasks": {
        "binding_key": "task.#",
    },
}

Since the default exchange is tasks, they will both use the same exchange.

If you have another queue but on another exchange you want to add, just specify a custom exchange and exchange type:

CELERY_QUEUES = {
        "feed_tasks": {
            "binding_key": "feed.#",
        },
        "regular_tasks": {
            "binding_key": "task.#",
        }
        "image_tasks": {
            "binding_key": "image.compress",
            "exchange": "mediatasks",
            "exchange_type": "direct",
        },
    }

If you’re confused about these terms, you should read up on AMQP and RabbitMQ. Rabbits and Warrens is an excellent blog post describing queues and exchanges. There’s also AMQP in 10 minutes*: Flexible Routing Model, and Standard Exchange Types. For users of RabbitMQ the RabbitMQ FAQ could also be useful as a source of information.

Can I use celery without Django?

Answer: Yes.

Celery uses something called loaders to read/setup configuration, import modules that register tasks and to decide what happens when a task is executed. Currently there are two loaders, the default loader and the Django loader. If you want to use celery without a Django project, you either have to use the default loader, or write a loader of your own.

The rest of this answer describes how to use the default loader.

While it is possible to use Celery from outside of Django, we still need Django itself to run, this is to use the ORM and cache-framework. Duplicating these features would be time consuming and mostly pointless, so while me might rewrite these in the future, this is a good solution in the mean time. Install Django using your favorite install tool, easy_install, pip, or whatever:

# easy_install django # as root

You need a configuration file named celeryconfig.py, either in the directory you run celeryd in, or in a Python library path where it is able to find it. The configuration file can contain any of the settings described in celery.conf. In addition; if you’re using the database backend you have to configure the database. Here is an example configuration using the database backend with MySQL:

# Broker configuration
BROKER_HOST = "localhost"
BROKER_PORT = "5672"
BROKER_VHOST = "celery"
BROKER_USER = "celery"
BROKER_PASSWORD = "celerysecret"
CARROT_BACKEND="amqp"

# Using the database backend.
CELERY_RESULT_BACKEND = "database"
DATABASE_ENGINE = "mysql" # see Django docs for a description of these.
DATABASE_NAME = "mydb"
DATABASE_HOST = "mydb.example.org"
DATABASE_USER = "myuser"
DATABASE_PASSWORD = "mysecret"

# Number of processes that processes tasks simultaneously.
CELERYD_CONCURRENCY = 8

# Modules to import when celeryd starts.
# This must import every module where you register tasks so celeryd
# is able to find and run them.
CELERY_IMPORTS = ("mytaskmodule1", "mytaskmodule2")

With this configuration file in the current directory you have to run celeryinit to create the database tables:

$ celeryinit

At this point you should be able to successfully run celeryd:

$ celeryd --loglevel=INFO

and send a task from a python shell (note that it must be able to import celeryconfig.py):

>>> from celery.task.builtins import PingTask
>>> result = PingTask.apply_async()
>>> result.get()
'pong'

The celery test-suite is failing

Answer: If you’re running tests from your Django project, and the celery test suite is failing in that context, then follow the steps below. If the celery tests are failing in another context, please report an issue to our issue tracker at GitHub:

That Django is running tests for all applications in INSTALLED_APPS by default is a pet peeve for many. You should use a test runner that either

  1. Explicitly lists the apps you want to run tests for, or
  2. Make a test runner that skips tests for apps you don’t want to run.

For example the test runner that celery is using:

To use this test runner, add the following to your settings.py:

TEST_RUNNER = "celery.tests.runners.run_tests"
TEST_APPS = (
    "app1",
    "app2",
    "app3",
    "app4",
)

Or, if you just want to skip the celery tests:

INSTALLED_APPS = (.....)
TEST_RUNNER = "celery.tests.runners.run_tests"
TEST_APPS = filter(lambda k: k != "celery", INSTALLED_APPS)

Can I change the interval of a periodic task at runtime?

Answer: Yes. You can override PeriodicTask.is_due or turn PeriodicTask.run_every into a property:

class MyPeriodic(PeriodicTask):

    def run(self):
        # ...

    @property
    def run_every(self):
        return get_interval_from_database(...)

Does celery support task priorities?

Answer: No. In theory, yes, as AMQP supports priorities. However RabbitMQ doesn’t implement them yet.

The usual way to prioritize work in celery, is to route high priority tasks to different servers. In the real world this may actually work better than per message priorities. You can use this in combination with rate limiting to achieve a highly performant system.

Should I use retry or acks_late?

Answer: Depends. It’s not necessarily one or the other, you may want to use both.

Task.retry is used to retry tasks, notably for expected errors that is catchable with the try: block. The AMQP transaction is not used for these errors: if the task raises an exception it is still acked!.

The acks_late setting would be used when you need the task to be executed again if the worker (for some reason) crashes mid-execution. It’s important to note that the worker is not known to crash, and if it does it is usually an unrecoverable error that requires human intervention (bug in the worker, or task code).

In an ideal world you could safely retry any task that has failed, but this is rarely the case. Imagine the following task:

@task()
def process_upload(filename, tmpfile):
    # Increment a file count stored in a database
    increment_file_counter()
    add_file_metadata_to_db(filename, tmpfile)
    copy_file_to_destination(filename, tmpfile)

If this crashed in the middle of copying the file to its destination the world would contain incomplete state. This is not a critical scenario of course, but you can probably imagine something far more sinister. So for ease of programming we have less reliability; It’s a good default, users who require it and know what they are doing can still enable acks_late (and in the future hopefully use manual acknowledgement)

In addition Task.retry has features not available in AMQP transactions: delay between retries, max retries, etc.

So use retry for Python errors, and if your task is reentrant combine that with acks_late if that level of reliability is required.

Can I schedule tasks to execute at a specific time?

Answer: Yes. You can use the eta argument of Task.apply_async().

Or to schedule a periodic task at a specific time, use the celery.task.schedules.crontab schedule behavior:

from celery.task.schedules import crontab
from celery.decorators import periodic_task

@periodic_task(run_every=crontab(hours=7, minute=30, day_of_week="mon"))
def every_monday_morning():
    print("This is run every monday morning at 7:30")

How do I shut down celeryd safely?

Answer: Use the TERM signal, and celery will finish all currently executing jobs and shut down as soon as possible. No tasks should be lost.

You should never stop celeryd with the KILL signal (-9), unless you’ve tried TERM a few times and waited a few minutes to let it get a chance to shut down. As if you do tasks may be terminated mid-execution, and they will not be re-run unless you have the acks_late option set. (Task.acks_late / CELERY_ACKS_LATE).

How do I run celeryd in the background on [platform]?

Answer: Please see Running celeryd as a daemon.

Django

Generating a template in a task doesn’t seem to respect my i18n settings?

Answer: To enable the Django translation machinery you need to activate it with a language. Note: Be sure to reset to the previous language when done.

>>> from django.utils import translation
>>> prev_language = translation.get_language()
>>> translation.activate(language)
>>> try:
...     render_template()
... finally:
        translation.activate(prev_language)

The common pattern here would be for the task to take a language argument:

from celery.decorators import task

from django.utils import translation
from django.template.loader import render_to_string

@task()
def generate_report(template="report.html", language=None):
    prev_language = translation.get_language()
    language and translation.activate(language)
    try:
        report = render_to_string(template)
    finally:
        translation.activate(prev_language)
    save_report_somewhere(report)
PKXDD}=celery-1.0-archived/objects.inv# Sphinx inventory version 2 # Project: Celery # Version: 1.0 # The remainder of this file is compressed using zlib. xڭZMw6WvvGp6.צ65*{1#&4cΝ+%i~<<#&?=Ł'O4,bx䣟@tj=9 gu3j!{)i$/Bؑ"b4${b4_7V͟yzIrgPV(c.&ep(b! ~W{|[nIS2{豻tށi!Gh "(;{!_:4<wcQm+?v@ b uQZ0ڮt1ruyrK^ Z/Ovް"^&W+#Xv^#C ʂ`^ _Sz{+KC2-nY/R|U}2K7Tkċڌ3]rb{4g,vEO ,-mXՐs,8K& t!;:Md#>wZ6Ze]IH])mhYN;NJPaL"ڹ6"Q)'g*WhnE2r)4wc7\)ztK,1qW?@9gK#'>#h[Z.? =S졠\ߖgu m,_7c$29D̈v$m"M\|" t#O|nt@qA Ak-Jxk^IaF]鬕P̘̀PW:UʓCZ>vo5Lgd@T1'G;a|MyG֔); q.9}~RPV*;|%`rƣϭ_΂ˆmOEdXRB9$y媲ʫn0,tND}Q ^N{;ǐ[A|teb759d!Wѵib/r*"x٘;.u+Zc[oktaL Kލe֘G鞑G]NئO]+҈o4o9 R iMQJh- ^'9}zt`cirS~^C"{Wi0vB!uTš{[DH,@P0Ѽʹ]vY,ki49"~wCdBGy&hI|w,SWJr m`k#aCYWJ8p>M̋(cLthJvWz g #\&񩾿ҹgpky>ZkW h ^uU[acZO)r0~J ƛ,!O3h7\Y//G4 *Sj嶨k^7/dž0{Jl2ڹw+wYؖJp7,rl DRcrNfRxK-ntx --w)u/*-~Pw~(x~:pCf Celery - Distributed Task Queue — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Celery - Distributed Task Queue

Contents:

Indices and tables

PKXDDHN2((.celery-1.0-archived/internals/deprecation.html Celery Deprecation Timeline — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Celery Deprecation Timeline

  • 1.2

    • The following settings will be removed:

      Setting name Replace with
      CELERY_AMQP_CONSUMER_QUEUES CELERY_QUEUES
      CELERY_AMQP_CONSUMER_QUEUES CELERY_QUEUES
      CELERY_AMQP_EXCHANGE CELERY_DEFAULT_EXCHANGE
      CELERY_AMQP_EXCHANGE_TYPE CELERY_DEFAULT_AMQP_EXCHANGE_TYPE
      CELERY_AMQP_CONSUMER_ROUTING_KEY CELERY_QUEUES
      CELERY_AMQP_PUBLISHER_ROUTING_KEY CELERY_DEFAULT_ROUTING_KEY
    • CELERY_LOADER definitions without class name.

      E.g. celery.loaders.default, needs to include the class name: celery.loaders.default.Loader.

    • TaskSet.run(). Use celery.task.base.TaskSet.apply_async() instead.

    • The module celery.task.rest; use celery.task.http instead.

PKXDDitk7E&E&)celery-1.0-archived/internals/events.html List of Worker Events — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

List of Worker Events

This is the list of events sent by the worker. The monitor uses these to visualize the state of the cluster.

Task Events

  • task-received(uuid, name, args, kwargs, retries, eta, hostname, timestamp)

    Sent when the worker receives a task.

  • task-accepted(uuid, hostname, timestamp)

    Sent just before the worker executes the task.

  • task-succeeded(uuid, result, runtime, hostname, timestamp)

    Sent if the task executed successfully. Runtime is the time it took to execute the task using the pool. (Time starting from the task is sent to the pool, and ending when the pool result handlers callback is called).

  • task-failed(uuid, exception, traceback, hostname, timestamp)

    Sent if the execution of the task failed.

  • task-retried(uuid, exception, traceback, hostname, delay, timestamp)

    Sent if the task failed, but will be retried in the future. (NOT IMPLEMENTED)

Worker Events

  • worker-online(hostname, timestamp)

    The worker has connected to the broker and is online.

  • worker-heartbeat(hostname, timestamp)

    Sent every minute, if the worker has not sent a heartbeat in 2 minutes, it’s considered to be offline.

  • worker-offline(hostname, timestamp)

    The worker has disconnected from the broker.

PKXDDcA+++celery-1.0-archived/internals/protocol.html Task Message Protocol — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Task Message Protocol

  • task

    string

    Name of the task. required

  • id

    string

    Unique id of the task (UUID). required

  • args

    list

    List of arguments. Will be an empty list if not provided.

  • kwargs

    dictionary

    Dictionary of keyword arguments. Will be an empty dictionary if not provided.

  • retries

    int

    Current number of times this task has been retried. Defaults to 0 if not specified.

  • eta

    string (ISO 8601)

    Estimated time of arrival. This is the date and time in ISO 8601 format. If not provided the message is not scheduled, but will be executed asap.

Example

This is an example invocation of the celery.task.PingTask task in JSON format:

{"task": "celery.task.PingTask",
 "args": [],
 "kwargs": {},
 "retries": 0,
 "eta": "2009-11-17T12:30:56.527191"}

Serialization

The protocol supports several serialization formats using the content_type message header.

The MIME-types supported by default are shown in the following table.

Scheme MIME Type
json application/json
yaml application/x-yaml
pickle application/x-python-serialize
PKXDDXFF.celery-1.0-archived/internals/moduleindex.html Module Index — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Module Index

Worker

celery.worker

  • celery.worker.WorkController

This is the worker’s main process. It starts and stops all the components required by the worker: Pool, Mediator, Scheduler, ClockService, and Listener.

celery.worker.job

celery.worker.pool

celery.worker.listener

celery.worker.controllers

celery.worker.scheduler

celery.worker.buckets

celery.worker.heartbeat

celery.worker.revoke

celery.worker.control

  • celery.worker.registry
  • celery.worker.builtins

Tasks

celery.decorators

celery.registry

celery.task

celery.task.base

celery.task.http

celery.task.rest

Backward compatible interface to celery.task.http. Will be deprecated in future versions.

celery.task.control

celery.task.builtins

Execution

celery.execute

celery.execute.trace

celery.result

celery.states

celery.signals

Messaging

celery.messaging

Django-specific

celery.models

celery.managers

celery.views

celery.urls

celery.management

Result backends

celery.backends

celery.backends.base

celery.backends.amqp

celery.backends.database

Loaders

celery.loaders

Loader autodetection, and working with the currently selected loader.

celery.loaders.base - Loader base classes

celery.loaders.default - The default loader

celery.loaders.djangoapp - The Django loader

CeleryBeat

celery.beat

Events

celery.events

Logging

celery.log

celery.utils.patch

Configuration

celery.conf

Miscellaneous

celery.datastructures

celery.exceptions

celery.platform

celery.utils

celery.utils.info

celery.utils.compat

PKXDDcH;;(celery-1.0-archived/internals/index.html Internals — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Internals

Release:1.0
Date:February 04, 2014
PKXDDj:++)celery-1.0-archived/internals/worker.html Internals: The worker — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Internals: The worker

NOTE This describes the internals of the development version, not the current release.

The worker consists of 4 main components: the broker listener, the scheduler, the mediator and the task pool. All these components runs in parallel working with two data structures: the ready queue and the ETA schedule.

http://cloud.github.com/downloads/ask/celery/Celery1.0-inside-worker.jpg

Data structures

ready_queue

The ready queue is either an instance of Queue.Queue, or celery.buckets.TaskBucket. The latter if rate limiting is enabled.

eta_schedule

The ETA schedule is a heap queue sorted by time.

Components

CarrotListener

Receives messages from the broker using carrot.

When a message is received it’s converted into a celery.worker.job.TaskWrapper object.

Tasks with an ETA are entered into the eta_schedule, messages that can be immediately processed are moved directly to the ready_queue.

ScheduleController

The schedule controller is running the eta_schedule. If the scheduled tasks eta has passed it is moved to the ready_queue, otherwise the thread sleeps until the eta is met (remember that the schedule is sorted by time).

Mediator

The mediator simply moves tasks in the ready_queue over to the task pool for execution using celery.worker.job.TaskWrapper.execute_using_pool().

TaskPool

This is a slightly modified multiprocessing.Pool. It mostly works the same way, except it makes sure all of the workers are running at all times. If a worker is missing, it replaces it with a new one.

PKXDD<celery-1.0-archived/internals/reference/celery.backends.html Backends - celery.backends — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Backends - celery.backends

PKXDD ܩ8celery-1.0-archived/internals/reference/celery.beat.html Clock Service - celery.beat — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Clock Service - celery.beat

PKXDDI I >celery-1.0-archived/internals/reference/celery.worker.job.html Executable Jobs - celery.worker.job — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Executable Jobs - celery.worker.job

PKXDD>K K Bcelery-1.0-archived/internals/reference/celery.backends.cache.html Backend: Cache - celery.backends.cache — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Backend: Cache - celery.backends.cache

PKXDDHKʧ Fcelery-1.0-archived/internals/reference/celery.worker.controllers.html Worker Controller Threads - celery.worker.controllers — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Worker Controller Threads - celery.worker.controllers

PKXDD|4Q Q Ccelery-1.0-archived/internals/reference/celery.worker.listener.html Worker Message Listener - celery.worker.listener — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Worker Message Listener - celery.worker.listener

PKXDD:celery-1.0-archived/internals/reference/celery.worker.html Multiprocessing Worker - celery.worker — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Multiprocessing Worker - celery.worker

PKXDD_7J J ?celery-1.0-archived/internals/reference/celery.utils.patch.html Compatibility Patches - celery.utils.patch — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Compatibility Patches - celery.utils.patch

PKXDDf w Bcelery-1.0-archived/internals/reference/celery.worker.buckets.html Token Bucket (rate limiting) - celery.worker.buckets — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Token Bucket (rate limiting) - celery.worker.buckets

PKXDD֖h;!;!Kcelery-1.0-archived/internals/reference/celery.worker.control.builtins.html Built-in Remote Control Commands - celery.worker.control.builtins — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Built-in Remote Control Commands - celery.worker.control.builtins

PKXDD0k k Ccelery-1.0-archived/internals/reference/celery.backends.tyrant.html Backend: Tokyo Tyrant - celery.backends.tyrant — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Backend: Tokyo Tyrant - celery.backends.tyrant

PKXDD! ! >celery-1.0-archived/internals/reference/celery.utils.info.html Debugging Info - celery.utils.info — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Debugging Info - celery.utils.info

PKXDD)Acelery-1.0-archived/internals/reference/celery.backends.base.html Backend: Base - celery.backends.base — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Backend: Base - celery.backends.base

PKXDDfCR?!?!Kcelery-1.0-archived/internals/reference/celery.worker.control.registry.html Remote Control Command Registry - celery.worker.control.registry — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Remote Control Command Registry - celery.worker.control.registry

PKXDDQxI I Acelery-1.0-archived/internals/reference/celery.execute.trace.html Tracing Execution - celery.execute.trace — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Tracing Execution - celery.execute.trace

PKXDD2sU U Dcelery-1.0-archived/internals/reference/celery.backends.mongodb.html Backend: MongoDB - celery.backends.mongodb — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Backend: MongoDB - celery.backends.mongodb

PKXDDT- YY9celery-1.0-archived/internals/reference/celery.utils.html Multiprocessing Worker - celery.worker — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Multiprocessing Worker - celery.worker

celery.utils.chunks(it, n)

Split an iterator into chunks with n elements each.

Examples

# n == 2 >>> x = chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 2) >>> list(x) [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10]]

# n == 3 >>> x = chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 3) >>> list(x) [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10]]

celery.utils.first(predicate, iterable)

Returns the first element in iterable that predicate returns a True value for.

celery.utils.fun_takes_kwargs(fun, kwlist=[])

With a function, and a list of keyword arguments, returns arguments in the list which the function takes.

If the object has an argspec attribute that is used instead of using the inspect.getargspec`() introspection.

Parameters:
  • fun – The function to inspect arguments of.
  • kwlist – The list of keyword arguments.

Examples

>>> def foo(self, x, y, logfile=None, loglevel=None):
...     return x * y
>>> fun_takes_kwargs(foo, ["logfile", "loglevel", "task_id"])
["logfile", "loglevel"]
>>> def foo(self, x, y, **kwargs):
>>> fun_takes_kwargs(foo, ["logfile", "loglevel", "task_id"])
["logfile", "loglevel", "task_id"]
celery.utils.gen_unique_id()

Generate a unique id, having - hopefully - a very small chance of collission.

For now this is provided by uuid.uuid4().

celery.utils.get_cls_by_name(name, aliases={})

Get class by name.

The name should be the full dot-separated path to the class:

modulename.ClassName

Example:

celery.worker.pool.TaskPool
                   ^- class name

If aliases is provided, a dict containing short name/long name mappings, the name is looked up in the aliases first.

Examples:

>>> get_cls_by_name("celery.worker.pool.TaskPool")
<class 'celery.worker.pool.TaskPool'>
>>> get_cls_by_name("default", {
...     "default": "celery.worker.pool.TaskPool"})
<class 'celery.worker.pool.TaskPool'>

# Does not try to look up non-string names. >>> from celery.worker.pool import TaskPool >>> get_cls_by_name(TaskPool) is TaskPool True

celery.utils.get_full_cls_name(cls)

With a class, get its full module and class name.

celery.utils.instantiate(name, *args, **kwargs)

Instantiate class by name.

See get_cls_by_name().

celery.utils.mattrgetter(*attrs)

Like operator.itemgetter() but returns None on missing attributes instead of raising AttributeError.

celery.utils.mitemgetter(*items)

Like operator.itemgetter() but returns None on missing items instead of raising KeyError.

celery.utils.noop(*args, **kwargs)

No operation.

Takes any arguments/keyword arguments and does nothing.

celery.utils.padlist(container, size, default=None)

Pad list with default elements.

Examples:

>>> first, last, city = padlist(["George", "Constanza", "NYC"], 3)
("George", "Constanza", "NYC")
>>> first, last, city = padlist(["George", "Constanza"], 3)
("George", "Constanza", None)
>>> first, last, city, planet = padlist(["George", "Constanza",
                                         "NYC"], 4, default="Earth")
("George", "Constanza", "NYC", "Earth")
celery.utils.repeatlast(it)

Iterate over all elements in the iterator, and when its exhausted yield the last value infinitely.

celery.utils.retry_over_time(fun, catch, args=[], kwargs={}, errback=<function noop at 0x47b7d70>, max_retries=None, interval_start=2, interval_step=2, interval_max=30)

Retry the function over and over until max retries is exceeded.

For each retry we sleep a for a while before we try again, this interval is increased for every retry until the max seconds is reached.

Parameters:
  • fun – The function to try
  • catch – Exceptions to catch, can be either tuple or a single exception class.
  • args – Positional arguments passed on to the function.
  • kwargs – Keyword arguments passed on to the function.
  • errback – Callback for when an exception in catch is raised. The callback must take two arguments: exc and interval, where exc is the exception instance, and interval is the time in seconds to sleep next..
  • max_retries – Maximum number of retries before we give up. If this is not set, we will retry forever.
  • interval_start – How long (in seconds) we start sleeping between retries.
  • interval_step – By how much the interval is increased for each retry.
  • interval_max – Maximum number of seconds to sleep between retries.
PKXDDQ\2\2:celery-1.0-archived/internals/reference/celery.models.html Django Models - celery.models — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Django Models - celery.models

TASK_STATUS_PENDING

The string status of a pending task.

TASK_STATUS_RETRY

The string status of a task which is to be retried.

TASK_STATUS_FAILURE

The string status of a failed task.

TASK_STATUS_DONE

The string status of a task that was successfully executed.

TASK_STATUSES

List of possible task statuses.

TASK_STATUSES_CHOICES

Django choice tuple of possible task statuses, for usage in model/form fields choices argument.

class TaskMeta

Model for storing the result and status of a task.

Note Only used if you’re running the database backend.

task_id

The unique task id.

status

The current status for this task.

result

The result after successful/failed execution. If the task failed, this contains the execption it raised.

date_done

The date this task changed status.

class PeriodicTaskMeta

Metadata model for periodic tasks.

name

The name of this task, as registered in the task registry.

last_run_at

The date this periodic task was last run. Used to find out when it should be run next.

total_run_count

The number of times this periodic task has been run.

task

The class/function for this task.

delay()
Delay the execution of a periodic task, and increment its total
run count.
PKXDDX''@celery-1.0-archived/internals/reference/celery.utils.compat.html Python Compatibility - celery.utils.compat — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Python Compatibility - celery.utils.compat

class celery.utils.compat.OrderedDict(*args, **kwds)

Dictionary that remembers insertion order

clear() → None. Remove all items from od.
copy() → a shallow copy of od
classmethod fromkeys(S[, v]) → New ordered dictionary with keys from S

and values equal to v (which defaults to None).

popitem() -> (k, v)

Return and remove a (key, value) pair. Pairs are returned in LIFO order if last is true or FIFO order if false.

PKXDDܵw) ) Acelery-1.0-archived/internals/reference/celery.backends.amqp.html Backend: AMQP - celery.backends.amqp — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Backend: AMQP - celery.backends.amqp

PKXDDwo@o@Ccelery-1.0-archived/internals/reference/celery.utils.timeutils.html Time and Date Utilities - celery.utils.timeutils — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Time and Date Utilities - celery.utils.timeutils

celery.utils.timeutils.delta_resolution(dt, delta)

Round a datetime to the resolution of a timedelta.

If the timedelta is in days, the datetime will be rounded to the nearest days, if the timedelta is in hours the datetime will be rounded to the nearest hour, and so on until seconds which will just return the original datetime.

Examples:

>>> now = datetime.now()
>>> now
datetime.datetime(2010, 3, 30, 11, 50, 58, 41065)
>>> delta_resolution(now, timedelta(days=2))
datetime.datetime(2010, 3, 30, 0, 0)
>>> delta_resolution(now, timedelta(hours=2))
datetime.datetime(2010, 3, 30, 11, 0)
>>> delta_resolution(now, timedelta(minutes=2))
datetime.datetime(2010, 3, 30, 11, 50)
>>> delta_resolution(now, timedelta(seconds=2))
datetime.datetime(2010, 3, 30, 11, 50, 58, 41065)
celery.utils.timeutils.rate(rate)

Parses rate strings, such as "100/m" or "2/h" and converts them to seconds.

celery.utils.timeutils.remaining(start, ends_in, now=None, relative=True)

Calculate the remaining time for a start date and a timedelta.

E.g. “how many seconds left for 30 seconds after start?”

Parameters:
  • start – Start datetime.datetime.
  • ends_in – The end delta as a datetime.timedelta.
  • relative

    If set to False, the end time will be calculated using delta_resolution() (i.e. rounded to the resolution

    of ends_in).
  • now – The current time, defaults to datetime.now().

Examples:

>>> remaining(datetime.now(), ends_in=timedelta(seconds=30))
'0:0:29.999948'

>>> str(remaining(datetime.now() - timedelta(minutes=29),
        ends_in=timedelta(hours=2)))
'1:30:59.999938'

>>> str(remaining(datetime.now() - timedelta(minutes=29),
        ends_in=timedelta(hours=2),
        relative=False))
'1:11:18.458437'
celery.utils.timeutils.timedelta_seconds(delta)

Convert datetime.timedelta to seconds.

Doesn’t account for negative values.

celery.utils.timeutils.weekday(name)

Return the position of a weekday (0 - 7, where 0 is Sunday).

>>> weekday("sunday")
0
>>> weekday("sun")
0
>>> weekday("mon")
1
PKXDD6|))<celery-1.0-archived/internals/reference/celery.platform.html Platform Specific - celery.platform — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Platform Specific - celery.platform

celery.platform.ignore_signal(signal_name)

Ignore signal using SIG_IGN.

Does nothing if the platform doesn’t support signals, or the specified signal in particular.

celery.platform.install_signal_handler(signal_name, handler)

Install a handler.

Does nothing if the current platform doesn’t support signals, or the specified signal in particular.

celery.platform.reset_signal(signal_name)

Reset signal to the default signal handler.

Does nothing if the platform doesn’t support signals, or the specified signal in particular.

celery.platform.set_mp_process_title(progname, info=None)

Set the ps name using the multiprocessing process name.

Only works if setproctitle is installed.

celery.platform.set_process_title(progname, info=None)

Set the ps name for the currently running process.

Only works if :mod`setproctitle` is installed.

PKXDD Worker Scheduler - celery.worker.scheduler — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Worker Scheduler - celery.worker.scheduler

PKXDD,=""Acelery-1.0-archived/internals/reference/celery.worker.revoke.html Worker Revoked Tasks - celery.worker.revoke — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Worker Revoked Tasks - celery.worker.revoke

revoked

A celery.datastructures.LimitedSet containing revoked task ids.

Items expire after one hour, and the structure can only hold 10000 expired items at a time (about 300kb).

PKXDD7celery-1.0-archived/internals/reference/celery.log.html Logging - celery.log — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Logging - celery.log

PKXDD22<celery-1.0-archived/internals/reference/celery.managers.html Django Model Managers - celery.managers — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Django Model Managers - celery.managers

class celery.managers.TaskManager

Manager for celery.models.Task models.

get_task(*args, **kwargs)

Get task meta for task by task_id.

Parameters:exception_retry_count – How many times to retry by transaction rollback on exception. This could theoretically happen in a race condition if another worker is trying to create the same task. The default is to retry once.
store_result(*args, **kwargs)

Store the result and status of a task.

Parameters:
  • task_id – task id
  • result – The return value of the task, or an exception instance raised by the task.
  • status – Task status. See celery.result.AsyncResult.get_status() for a list of possible status values.
  • traceback – The traceback at the point of exception (if the task failed).
  • exception_retry_count – How many times to retry by transaction rollback on exception. This could theoretically happen in a race condition if another worker is trying to create the same task. The default is to retry twice.
class celery.managers.TaskSetManager

Manager for celery.models.TaskSet models.

restore_taskset(*args, **kwargs)

Get taskset meta for task by taskset_id.

store_result(*args, **kwargs)

Store the result of a taskset.

Parameters:
  • taskset_id – task set id
  • result – The return value of the taskset
celery.managers.transaction_retry(max_retries=1)

Decorator for methods doing database operations.

If the database operation fails, it will retry the operation at most max_retries times.

PKXDD? ? Dcelery-1.0-archived/internals/reference/celery.worker.heartbeat.html Worker Heartbeats - celery.worker.heartbeat — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Worker Heartbeats - celery.worker.heartbeat

PKXDDIIBcelery-1.0-archived/internals/reference/celery.datastructures.html Datastructures - celery.datastructures — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Datastructures - celery.datastructures

class celery.datastructures.ExceptionInfo(exc_info)

Exception wrapping an exception and its traceback.

Parameters:exc_info – The exception tuple info as returned by traceback.format_exception().
exception

The original exception.

traceback

A traceback from the point when exception was raised.

class celery.datastructures.LimitedSet(maxlen=None, expires=None)

Kind-of Set with limitations.

Good for when you need to test for membership (a in set), but the list might become to big, so you want to limit it so it doesn’t consume too much resources.

Parameters:
  • maxlen – Maximum number of members before we start deleting expired members.
  • expires – Time in seconds, before a membership expires.
add(value)

Add a new member.

first

Get the oldest member.

pop_value(value)

Remove membership by finding value.

class celery.datastructures.LocalCache(limit=None)

Dictionary with a finite number of keys.

Older items expires first.

class celery.datastructures.PositionQueue(length)

A positional queue of a specific length, with slots that are either filled or unfilled. When all of the positions are filled, the queue is considered full().

Parameters:length – see length.
length

The number of items required for the queue to be considered full.

class UnfilledPosition(position)

Describes an unfilled slot.

PositionQueue.filled

Returns the filled slots as a list.

PositionQueue.full()

Returns True if all of the slots has been filled.

class celery.datastructures.SharedCounter(initial_value)

Thread-safe counter.

Please note that the final value is not synchronized, this means that you should not update the value by using a previous value, the only reliable operations are increment and decrement.

Example

>>> max_clients = SharedCounter(initial_value=10)

# Thread one >>> max_clients += 1 # OK (safe)

# Thread two >>> max_clients -= 3 # OK (safe)

# Main thread >>> if client >= int(max_clients): # Max clients now at 8 ... wait()

>>> max_client = max_clients + 10 # NOT OK (unsafe)
decrement(n=1)

Decrement value.

increment(n=1)

Increment value.

celery.datastructures.consume_queue(queue)

Iterator yielding all immediately available items in a Queue.Queue.

The iterator stops as soon as the queue raises Queue.Empty.

Example

>>> q = Queue()
>>> map(q.put, range(4))
>>> list(consume_queue(q))
[0, 1, 2, 3]
>>> list(consume_queue(q))
[]
PKXDD2;IW W Ecelery-1.0-archived/internals/reference/celery.backends.database.html Backend: Database - celery.backends.database — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Backend: Database - celery.backends.database

PKXDD5> Bcelery-1.0-archived/internals/reference/celery.worker.control.html Worker Control - celery.worker.control — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Worker Control - celery.worker.control

PKXDDm^1^12celery-1.0-archived/internals/reference/index.html Internal Module Reference — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

PKXDD[ԯ ?celery-1.0-archived/internals/reference/celery.worker.pool.html Task Pool - celery.worker.pool — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Task Pool - celery.worker.pool

PKXDDa_ _ Dcelery-1.0-archived/internals/reference/celery.backends.pyredis.html Backend: Redis - celery.backends.pyredis — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Backend: Redis - celery.backends.pyredis

PKXDDY7V7V*celery-1.0-archived/userguide/routing.html Routing Tasks — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Routing Tasks

NOTE This document refers to functionality only available in brokers using AMQP. Other brokers may implement some functionality, see their respective documenation for more information, or contact the mailinglist.

AMQP Primer

Messages

A message consists of headers and a body. Celery uses headers to store the content type of the message and its content encoding. In Celery the content type is usually the serialization format used to serialize the message, and the body contains the name of the task to execute, the task id (UUID), the arguments to execute it with and some additional metadata - like the number of retries and its ETA (if any).

This is an example task message represented as a Python dictionary:

{"task": "myapp.tasks.add",
 "id":
 "args": [4, 4],
 "kwargs": {}}

Producers, consumers and brokers

The client sending messages is typically called a publisher, or a producer, while the entity receiving messages is called a consumer.

The broker is the message server, routing messages from producers to consumers.

You are likely to see these terms used a lot in AMQP related material.

Exchanges, queues and routing keys.

TODO Mindblowing one-line simple explanation here. TODO

  1. Messages are sent to exchanges.
  2. An exchange routes messages to one or more queues. Several exchange types exists, providing different ways to do routing.
  3. The message waits in the queue until someone consumes from it.
  4. The message is deleted from the queue when it has been acknowledged.

The steps required to send and receive messages are:

  1. Create an exchange
  2. Create a queue
  3. Bind the queue to the exchange.

Celery automatically creates the entities necessary for the queues in CELERY_QUEUES to work (unless the queue’s auto_declare setting is set)

Here’s an example queue configuration with three queues; One for video, one for images and one default queue for everything else:

CELERY_QUEUES = {
    "default": {
        "exchange": "default",
        "binding_key": "default"},
    "videos": {
        "exchange": "media",
        "binding_key": "media.video",
    },
    "images": {
        "exchange": "media",
        "binding_key": "media.image",
    }
}
CELERY_DEFAULT_QUEUE = "default"
CELERY_DEFAULT_EXCHANGE_TYPE = "direct"
CELERY_DEFAULT_ROUTING_KEY = "default"

NOTE: In Celery the routing_key is the key used to send the message, while binding_key is the key the queue is bound with. In the AMQP API they are both referred to as a routing key.

Exchange types

The exchange type defines how the messages are routed through the exchange. The exchange types defined in the standard are direct, topic, fanout and headers. Also non-standard exchange types are available as plugins to RabbitMQ, like the last-value-cache plug-in by Michael Bridgen.

Direct exchanges

Direct exchanges match by exact routing keys, so a queue bound with the routing key video only receives messages with the same routing key.

Topic exchanges

Topic exchanges matches routing keys using dot-separated words, and can include wildcard characters: * matches a single word, # matches zero or more words.

With routing keys like usa.news, usa.weather, norway.news and norway.weather, bindings could be *.news (all news), usa.# (all items in the USA) or usa.weather (all USA weather items).

Hands-on with the API

Celery comes with a tool called camqadm (short for celery AMQP admin). It’s used for simple admnistration tasks like creating/deleting queues and exchanges, purging queues and sending messages. In short it’s for simple command-line access to the AMQP API.

You can write commands directly in the arguments to camqadm, or just start with no arguments to start it in shell-mode:

$ camqadm
-> connecting to amqp://guest@localhost:5672/.
-> connected.
1>

Here 1> is the prompt. The number is counting the number of commands you have executed. Type help for a list of commands. It also has autocompletion, so you can start typing a command and then hit the tab key to show a list of possible matches.

Now let’s create a queue we can send messages to:

1> exchange.declare testexchange direct
ok.
2> queue.declare testqueue
ok. queue:testqueue messages:0 consumers:0.
3> queue.bind testqueue testexchange testkey
ok.

This created the direct exchange testexchange, and a queue named testqueue. The queue is bound to the exchange using the routing key testkey.

From now on all messages sent to the exchange testexchange with routing key testkey will be moved to this queue. We can send a message by using the basic.publish command:

4> basic.publish "This is a message!" testexchange testkey
ok.

Now that the message is sent we can retrieve it again. We use the basic.get command here, which pops a single message off the queue, this command is not recommended for production as it implies polling, any real application would declare consumers instead.

Pop a message off the queue:

5> basic.get testqueue
{'body': 'This is a message!',
 'delivery_info': {'delivery_tag': 1,
                   'exchange': u'testexchange',
                   'message_count': 0,
                   'redelivered': False,
                   'routing_key': u'testkey'},
 'properties': {}}

AMQP uses acknowledgment to signify that a message has been received and processed successfully. The message is sent to the next receiver if it has not been acknowledged before the client connection is closed.

Note the delivery tag listed in the structure above; Within a connection channel, every received message has a unique delivery tag, This tag is used to acknowledge the message. Note that delivery tags are not unique across connections, so in another client the delivery tag 1 might point to a different message than in this channel.

You can acknowledge the message we received using basic.ack:

6> basic.ack 1
ok.

To clean up after our test session we should delete the entities we created:

7> queue.delete testqueue
ok. 0 messages deleted.
8> exchange.delete testexchange
ok.
PKXDD}"x88/celery-1.0-archived/userguide/remote-tasks.html HTTP Callback Tasks (Webhooks) — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

HTTP Callback Tasks (Webhooks)

Executing tasks on a web server

If you need to call into another language, framework or similar, you can do so by using HTTP callback tasks.

The HTTP callback tasks use GET/POST arguments and a simple JSON response to return results. The scheme to call a task is:

GET http://example.com/mytask/?arg1=a&arg2=b&arg3=c

or using POST:

POST http://example.com/mytask

Note: POST data has to be form encoded. Whether to use GET or POST is up to you and your requirements.

The web page should then return a response in the following format if the execution was successful:

{"status": "success", "retval": ....}

or if there was an error:

{"status": "failure": "reason": "Invalid moon alignment."}

With this information you could define a simple task in Django:

from django.http import HttpResponse
from anyjson import serialize


def multiply(request):
    x = int(request.GET["x"])
    y = int(request.GET["y"])
    result = x * y
    response = {"status": "success", "retval": result}
    return HttpResponse(serialize(response), mimetype="application/json")

or in Ruby on Rails:

def multiply
    @x = params[:x].to_i
    @y = params[:y].to_i

    @status = {:status => "success", :retval => @x * @y}

    render :json => @status
end

You can easily port this scheme to any language/framework; new examples and libraries are very welcome.

To execute the task you use the URL class:

>>> from celery.task.http import URL
>>> res = URL("http://example.com/multiply").get_async(x=10, y=10)

URL is a shortcut to the HttpDispatchTask. You can subclass this to extend the functionality.

>>> from celery.task.http import HttpDispatchTask
>>> res = HttpDispatchTask.delay(url="http://example.com/multiply", method="GET", x=10, y=10)
>>> res.get()
100

The output of celeryd (or the logfile if you’ve enabled it) should show the task being processed:

[INFO/MainProcess] Task celery.task.http.HttpDispatchTask
        [f2cc8efc-2a14-40cd-85ad-f1c77c94beeb] processed: 100

Since applying tasks can be done via HTTP using the celery.views.apply view, executing tasks from other languages is easy. For an example service exposing tasks via HTTP you should have a look at examples/celery_http_gateway.

PKXDD7/(celery-1.0-archived/userguide/tasks.html Tasks — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Tasks

A task is a class that encapsulates a function and its execution options. Given a function create_user, that takes two arguments: username and password, you can create a task like this:

from celery.task import Task

class CreateUserTask(Task):
    def run(self, username, password):
        create_user(username, password)

For convenience there is a shortcut decorator that turns any function into a task, celery.decorators.task:

from celery.decorators import task
from django.contrib.auth import User

@task
def create_user(username, password):
    User.objects.create(username=username, password=password)

The task decorator takes the same execution options the Task class does:

@task(serializer="json")
def create_user(username, password):
    User.objects.create(username=username, password=password)

An alternative way to use the decorator is to give the function as an argument instead, but if you do this be sure to set the resulting tasks __name__ attribute, so pickle is able to find it in reverse:

create_user_task = task()(create_user)
create_user_task.__name__ = "create_user_task"

Default keyword arguments

Celery supports a set of default arguments that can be forwarded to any task. Tasks can choose not to take these, or list the ones they want. The worker will do the right thing.

The current default keyword arguments are:

  • logfile

    The log file, can be passed on to self.get_logger to gain access to the workers log file. See Logging.

  • loglevel

    The loglevel used.

  • task_id

    The unique id of the executing task.

  • task_name

    Name of the executing task.

  • task_retries

    How many times the current task has been retried. An integer starting at 0.

  • task_is_eager

    Set to True if the task is executed locally in the client, and not by a worker.

  • delivery_info

    Additional message delivery information. This is a mapping containing the exchange and routing key used to deliver this task. It’s used by e.g. retry() to resend the task to the same destination queue.

    NOTE As some messaging backends doesn’t have advanced routing capabilities, you can’t trust the availability of keys in this mapping.

Logging

You can use the workers logger to add diagnostic output to the worker log:

class AddTask(Task):
    def run(self, x, y, **kwargs):
        logger = self.get_logger(**kwargs)
        logger.info("Adding %s + %s" % (x, y))
        return x + y

or using the decorator syntax:

@task()
def add(x, y, **kwargs):
    logger = add.get_logger(**kwargs)
    logger.info("Adding %s + %s" % (x, y))
    return x + y

There are several logging levels available, and the workers loglevel setting decides whether or not they will be written to the log file.

Retrying a task if something fails

Simply use Task.retry() to re-send the task. It will do the right thing, and respect the Task.max_retries attribute:

@task()
def send_twitter_status(oauth, tweet, **kwargs):
    try:
        twitter = Twitter(oauth)
        twitter.update_status(tweet)
    except (Twitter.FailWhaleError, Twitter.LoginError), exc:
        send_twitter_status.retry(args=[oauth, tweet], kwargs=kwargs, exc=exc)

Here we used the exc argument to pass the current exception to Task.retry(). At each step of the retry this exception is available as the tombstone (result) of the task. When Task.max_retries has been exceeded this is the exception raised. However, if an exc argument is not provided the RetryTaskError exception is raised instead.

Important note: The task has to take the magic keyword arguments in order for max retries to work properly, this is because it keeps track of the current number of retries using the task_retries keyword argument passed on to the task. In addition, it also uses the task_id keyword argument to use the same task id, and delivery_info to route the retried task to the same destination.

Using a custom retry delay

When a task is to be retried, it will wait for a given amount of time before doing so. The default delay is in the Task.default_retry_delay attribute on the task. By default this is set to 3 minutes. Note that the unit for setting the delay is in seconds (int or float).

You can also provide the countdown argument to Task.retry() to override this default.

class MyTask(Task):
    default_retry_delay = 30 * 60 # retry in 30 minutes

    def run(self, x, y, **kwargs):
        try:
            ...
        except Exception, exc:
            self.retry([x, y], kwargs, exc=exc,
                       countdown=60) # override the default and
                                     # - retry in 1 minute

Task options

  • name

    The name the task is registered as. You can set this name manually, or just use the default which is automatically generated using the module and class name.

  • abstract

    Abstract classes are not registered, but are used as the superclass when making new task types by subclassing.

  • max_retries

    The maximum number of attempted retries before giving up. If this is exceeded the :exc`celery.execptions.MaxRetriesExceeded` exception will be raised. Note that you have to retry manually, it’s not something that happens automatically.

  • default_retry_delay

    Default time in seconds before a retry of the task should be executed. Can be either an int or a float. Default is a 1 minute delay (60 seconds).

  • rate_limit

    Set the rate limit for this task type, that is, how many times in a given period of time is the task allowed to run.

    If this is None no rate limit is in effect. If it is an integer, it is interpreted as “tasks per second”.

    The rate limits can be specified in seconds, minutes or hours by appending "/s", "/m" or “/h"” to the value. Example: "100/m" (hundred tasks a minute). Default is the ``CELERY_DEFAULT_RATE_LIMIT setting, which if not specified means rate limiting for tasks is turned off by default.

  • ignore_result

    Don’t store the status and return value. This means you can’t

    use the celery.result.AsyncResult to check if the task is done, or get its return value. Only use if you need the performance and is able live without these features. Any exceptions raised will store the return value/status as usual.

  • disable_error_emails

    Disable error e-mails for this task. Default is False. Note: You can also turn off error e-mails globally using the CELERY_SEND_TASK_ERROR_EMAILS setting.

  • serializer

    A string identifying the default serialization method to use. Defaults to the CELERY_TASK_SERIALIZER setting. Can be pickle json, yaml, or any custom serialization methods that have been registered with carrot.serialization.registry.

    Please see Executing Tasks for more information.

Message and routing options

  • routing_key

    Override the global default routing_key for this task.

  • exchange

    Override the global default exchange for this task.

  • mandatory

    If set, the task message has mandatory routing. By default the task is silently dropped by the broker if it can’t be routed to a queue. However - If the task is mandatory, an exception will be raised instead.

  • immediate

    Request immediate delivery. If the task cannot be routed to a task worker immediately, an exception will be raised. This is instead of the default behavior, where the broker will accept and queue the task, but with no guarantee that the task will ever be executed.

  • priority

    The message priority. A number from 0 to 9, where 0 is the highest. Note: RabbitMQ does not support priorities yet.

See Executing Tasks for more information about the messaging options available.

Example

Let’s take a real wold example; A blog where comments posted needs to be filtered for spam. When the comment is created, the spam filter runs in the background, so the user doesn’t have to wait for it to finish.

We have a Django blog application allowing comments on blog posts. We’ll describe parts of the models/views and tasks for this application.

blog/models.py

The comment model looks like this:

from django.db import models
from django.utils.translation import ugettext_lazy as _


class Comment(models.Model):
    name = models.CharField(_("name"), max_length=64)
    email_address = models.EmailField(_("e-mail address"))
    homepage = models.URLField(_("home page"),
                               blank=True, verify_exists=False)
    comment = models.TextField(_("comment"))
    pub_date = models.DateTimeField(_("Published date"),
                                    editable=False, auto_add_now=True)
    is_spam = models.BooleanField(_("spam?"),
                                  default=False, editable=False)

    class Meta:
        verbose_name = _("comment")
        verbose_name_plural = _("comments")

In the view where the comment is posted, we first write the comment to the database, then we launch the spam filter task in the background.

blog/views.py

from django import forms
frmo django.http import HttpResponseRedirect
from django.template.context import RequestContext
from django.shortcuts import get_object_or_404, render_to_response

from blog import tasks
from blog.models import Comment


class CommentForm(forms.ModelForm):

    class Meta:
        model = Comment


def add_comment(request, slug, template_name="comments/create.html"):
    post = get_object_or_404(Entry, slug=slug)
    remote_addr = request.META.get("REMOTE_ADDR")

    if request.method == "post":
        form = CommentForm(request.POST, request.FILES)
        if form.is_valid():
            comment = form.save()
            # Check spam asynchronously.
            tasks.spam_filter.delay(comment_id=comment.id,
                                    remote_addr=remote_addr)
            return HttpResponseRedirect(post.get_absolute_url())
    else:
        form = CommentForm()

    context = RequestContext(request, {"form": form})
    return render_to_response(template_name, context_instance=context)

To filter spam in comments we use Akismet, the service used to filter spam in comments posted to the free weblog platform Wordpress. Akismet is free for personal use, but for commercial use you need to pay. You have to sign up to their service to get an API key.

To make API calls to Akismet we use the akismet.py library written by Michael Foord.

blog/tasks.py

from akismet import Akismet
from celery.decorators import task

from django.core.exceptions import ImproperlyConfigured
from django.contrib.sites.models import Site

from blog.models import Comment


@task
def spam_filter(comment_id, remote_addr=None, **kwargs):
        logger = spam_filter.get_logger(**kwargs)
        logger.info("Running spam filter for comment %s" % comment_id)

        comment = Comment.objects.get(pk=comment_id)
        current_domain = Site.objects.get_current().domain
        akismet = Akismet(settings.AKISMET_KEY, "http://%s" % domain)
        if not akismet.verify_key():
            raise ImproperlyConfigured("Invalid AKISMET_KEY")


        is_spam = akismet.comment_check(user_ip=remote_addr,
                            comment_content=comment.comment,
                            comment_author=comment.name,
                            comment_author_email=comment.email_address)
        if is_spam:
            comment.is_spam = True
            comment.save()

        return is_spam

How it works

Here comes the technical details, this part isn’t something you need to know, but you may be interested.

All defined tasks are listed in a registry. The registry contains a list of task names and their task classes. You can investigate this registry yourself:

>>> from celery import registry
>>> from celery import task
>>> registry.tasks
{'celery.delete_expired_task_meta':
  <celery.task.builtins.DeleteExpiredTaskMetaTask object at 0x101d1f510>,
'celery.execute_remote':
  <celery.task.base.ExecuteRemoteTask object at 0x101d17890>,
'celery.task.rest.RESTProxyTask':
  <celery.task.rest.RESTProxyTask object at 0x101d1f410>,
'celery.task.rest.Task': <celery.task.rest.Task object at 0x101d1f4d0>,
'celery.map_async':
  <celery.task.base.AsynchronousMapTask object at 0x101d17910>,
'celery.ping': <celery.task.builtins.PingTask object at 0x101d1f550>}

This is the list of tasks built-in to celery. Note that we had to import celery.task first for these to show up. This is because the tasks will only be registered when the module they are defined in is imported.

The default loader imports any modules listed in the CELERY_IMPORTS setting. If using Django it loads all tasks.py modules for the applications listed in INSTALLED_APPS. If you want to do something special you can create your own loader to do what you want.

The entity responsible for registering your task in the registry is a meta class, TaskType. This is the default meta class for Task. If you want to register your task manually you can set the abstract attribute:

class MyTask(Task):
    abstract = True

This way the task won’t be registered, but any task subclassing it will.

When tasks are sent, we don’t send the function code, just the name of the task. When the worker receives the message it can just look it up in the task registry to find the execution code.

This means that your workers should always be updated with the same software as the client. This is a drawback, but the alternative is a technical challenge that has yet to be solved.

Tips and Best Practices

Ignore results you don’t want

If you don’t care about the results of a task, be sure to set the ignore_result option, as storing results wastes time and resources.

@task(ignore_result=True)
def mytask(...)
    something()

Results can even be disabled globally using the CELERY_IGNORE_RESULT setting.

Disable rate limits if they’re not used

Disabling rate limits altogether is recommended if you don’t have any tasks using them. This is because the rate limit subsystem introduces quite a lot of complexity.

Set the CELERY_DISABLE_RATE_LIMITS setting to globally disable rate limits:

CELERY_DISABLE_RATE_LIMITS = True

Avoid launching synchronous subtasks

Having a task wait for the result of another task is really inefficient, and may even cause a deadlock if the worker pool is exhausted.

Make your design asynchronous instead, for example by using callbacks.

Bad:

@task()
def update_page_info(url):
    page = fetch_page.delay(url).get()
    info = parse_page.delay(url, page).get()
    store_page_info.delay(url, info)

@task()
def fetch_page(url):
    return myhttplib.get(url)

@task()
def parse_page(url, page):
    return myparser.parse_document(page)

@task()
def store_page_info(url, info):
    return PageInfo.objects.create(url, info)

Good:

from functools import curry

@task(ignore_result=True)
def update_page_info(url):
    # fetch_page -> parse_page -> store_page
    callback = curry(parse_page.delay, callback=store_page_info)
    fetch_page.delay(url, callback=callback)

@task(ignore_result=True)
def fetch_page(url, callback=None):
    page = myparser.parse_document(page)
    if callback:
        callback(page)

@task(ignore_result=True)
def parse_page(url, page, callback=None):
    info = myparser.parse_document(page)
    if callback:
        callback(url, info)

@task(ignore_result=True)
def store_page_info(url, info):
    PageInfo.objects.create(url, info)

Performance and Strategies

Granularity

The task’s granularity is the degree of parallelization your task have. It’s better to have many small tasks, than a few long running ones.

With smaller tasks, you can process more tasks in parallel and the tasks won’t run long enough to block the worker from processing other waiting tasks.

However, there’s a limit. Sending messages takes processing power and bandwidth. If your tasks are so short the overhead of passing them around is worse than just executing them in-line, you should reconsider your strategy. There is no universal answer here.

Data locality

The worker processing the task should be as close to the data as possible. The best would be to have a copy in memory, the worst being a full transfer from another continent.

If the data is far away, you could try to run another worker at location, or if that’s not possible, cache often used data, or preload data you know is going to be used.

The easiest way to share data between workers is to use a distributed caching system, like memcached.

For more information about data-locality, please read http://research.microsoft.com/pubs/70001/tr-2003-24.pdf

State

Since celery is a distributed system, you can’t know in which process, or even on what machine the task will run. Indeed you can’t even know if the task will run in a timely manner, so please be wary of the state you pass on to tasks.

One gotcha is Django model objects. They shouldn’t be passed on as arguments to task classes, it’s almost always better to re-fetch the object from the database instead, as there are possible race conditions involved.

Imagine the following scenario where you have an article and a task that automatically expands some abbreviations in it.

class Article(models.Model):
    title = models.CharField()
    body = models.TextField()

@task
def expand_abbreviations(article):
    article.body.replace("MyCorp", "My Corporation")
    article.save()

First, an author creates an article and saves it, then the author clicks on a button that initiates the abbreviation task.

>>> article = Article.objects.get(id=102)
>>> expand_abbreviations.delay(model_object)

Now, the queue is very busy, so the task won’t be run for another 2 minutes, in the meantime another author makes some changes to the article, when the task is finally run, the body of the article is reverted to the old version, because the task had the old body in its argument.

Fixing the race condition is easy, just use the article id instead, and re-fetch the article in the task body:

@task
def expand_abbreviations(article_id)
    article = Article.objects.get(id=article_id)
    article.body.replace("MyCorp", "My Corporation")
    article.save()

>>> expand_abbreviations(article_id)

There might even be performance benefits to this approach, as sending large messages may be expensive.

PKXDD\7m&m&(celery-1.0-archived/userguide/index.html User Guide — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

PKXDD&1 Executing Tasks — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Executing Tasks

Executing tasks is done with apply_async, and its shortcut: delay.

delay is simple and convenient, as it looks like calling a regular function:

Task.delay(arg1, arg2, kwarg1="x", kwarg2="y")

The same thing using apply_async is written like this:

Task.apply_async(args=[arg1, arg2], kwargs={"kwarg1": "x", "kwarg2": "y"})

But delay doesn’t give you as much control as using apply_async. With apply_async you can override the execution options available as attributes on the Task class: routing_key, exchange, immediate, mandatory, priority, and serializer. In addition you can set a countdown/eta, or provide a custom broker connection.

Let’s go over these in more detail. The following examples use this simple task, which adds together two numbers:

@task
def add(x, y):
    return x + y

ETA and countdown

The ETA (estimated time of arrival) lets you set a specific date and time that is the earliest time at which your task will execute. countdown is a shortcut to set this by seconds in the future.

>>> result = add.apply_async(args=[10, 10], countdown=3)
>>> result.get()    # this takes at least 3 seconds to return
20

Note that your task is guaranteed to be executed at some time after the specified date and time has passed, but not necessarily at that exact time.

While countdown is an integer, eta must be a datetime object, specifying an exact date and time in the future. This is good if you already have a datetime object and need to modify it with a timedelta, or when using time in seconds is not very readable.

from datetime import datetime, timedelta

def quickban(username):
    """Ban user for 24 hours."""
    ban(username)
    tomorrow = datetime.now() + timedelta(days=1)
    UnbanTask.apply_async(args=[username], eta=tomorrow)

Serializers

Data passed between celery and workers has to be serialized to be transferred. The default serializer is pickle, but you can change this for each task. There is built-in support for using pickle, JSON and YAML, and you can add your own custom serializers by registering them into the carrot serializer registry.

The default serializer (pickle) supports Python objects, like datetime and any custom datatypes you define yourself. But since pickle has poor support outside of the Python language, you need to choose another serializer if you need to communicate with other languages. In that case, JSON is a very popular choice.

The serialization method is sent with the message, so the worker knows how to deserialize any task. Of course, if you use a custom serializer, this must also be registered in the worker.

When sending a task the serialization method is taken from the following places in order: The serializer argument to apply_async, the Task’s serializer attribute, and finally the global default CELERY_SERIALIZER configuration directive.

>>> add.apply_async(args=[10, 10], serializer="json")

Connections and connection timeouts.

Currently there is no support for broker connection pools in celery, so this is something you need to be aware of when sending more than one task at a time, as apply_async/delay establishes and closes a connection every time.

If you need to send more than one task at the same time, it’s a good idea to establish the connection yourself and pass it to apply_async:

from celery.messaging import establish_connection

numbers = [(2, 2), (4, 4), (8, 8), (16, 16)]

results = []
connection = establish_connection()
try:
    for args in numbers:
        res = add.apply_async(args=args, connection=connection)
        results.append(res)
finally:
    connection.close()

print([res.get() for res in results])

In Python 2.5 and above, you can use the with statement:

from __future__ import with_statement
from celery.messaging import establish_connection

numbers = [(2, 2), (4, 4), (8, 8), (16, 16)]

results = []
with establish_connection() as connection:
    for args in numbers:
        res = add.apply_async(args=args, connection=connection)
        results.append(res)

print([res.get() for res in results])

The connection timeout is the number of seconds to wait before we give up establishing the connection. You can set this with the connect_timeout argument to apply_async:

add.apply_async([10, 10], connect_timeout=3)

Or if you handle the connection manually:

connection = establish_connection(connect_timeout=3)

Routing options

Celery uses the AMQP routing mechanisms to route tasks to different workers. You can route tasks using the following entities: exchange, queue and routing key.

Messages (tasks) are sent to exchanges, a queue binds to an exchange with a routing key. Let’s look at an example:

Our application has a lot of tasks, some process video, others process images, and some gather collective intelligence about users. Some of these have higher priority than others so we want to make sure the high priority tasks get sent to powerful machines, while low priority tasks are sent to dedicated machines that can handle these at their own pace.

For the sake of example we have only one exchange called tasks. There are different types of exchanges that matches the routing key in different ways, the exchange types are:

  • direct

    Matches the routing key exactly.

  • topic

    In the topic exchange the routing key is made up of words separated by dots (.). Words can be matched by the wild cards * and #, where * matches one exact word, and # matches one or many.

    For example, *.stock.# matches the routing keys usd.stock and euro.stock.db but not stock.nasdaq.

(there are also other exchange types, but these are not used by celery)

So, we create three queues, video, image and lowpri that bind to our tasks exchange. For the queues we use the following binding keys:

video: video.#
image: image.#
lowpri: misc.#

Now we can send our tasks to different worker machines, by making the workers listen to different queues:

>>> CompressVideoTask.apply_async(args=[filename],
...                               routing_key="video.compress")

>>> ImageRotateTask.apply_async(args=[filename, 360],
                                routing_key="image.rotate")

>>> ImageCropTask.apply_async(args=[filename, selection],
                              routing_key="image.crop")
>>> UpdateReccomendationsTask.apply_async(routing_key="misc.recommend")

Later, if the crop task is consuming a lot of resources, we can bind some new workers to handle just the "image.crop" task, by creating a new queue that binds to "image.crop”.

AMQP options

  • mandatory

This sets the delivery to be mandatory. An exception will be raised if there are no running workers able to take on the task.

  • immediate

Request immediate delivery. Will raise an exception if the task cannot be routed to a worker immediately.

  • priority

A number between 0 and 9, where 0 is the highest priority. Note that RabbitMQ does not implement AMQP priorities, and maybe your broker does not either, consult your broker’s documentation for more information.

PKXDD)=N1I1I0celery-1.0-archived/.doctrees/environment.pickle(csphinx.environment BuildEnvironment qoq}q(Udlfilesqcsphinx.util FilenameUniqDict q)qc__builtin__ set q]RqbUappq NU _warnfuncq NUtitlesq }q (Xreleases/1.0/announcementq cdocutils.nodes title q)q}q(U rawsourceqUU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]Unamesq]uUchildrenq]qcdocutils.nodes Text qXCelery 1.0 has been released!qq}q(hXCelery 1.0 has been released!qUparentq hubaUtagnameq!Utitleq"ubXcookbook/indexq#h)q$}q%(hUh}q&(h]h]h]h]h]uh]q'hXCookbookq(q)}q*(hXCookbookq+h h$ubah!h"ubXuserguide/tasksq,h)q-}q.(hUh}q/(h]h]h]h]h]uh]q0hXTasksq1q2}q3(hXTasksq4h h-ubah!h"ubXinternals/indexq5h)q6}q7(hUh}q8(h]h]h]h]h]uh]q9hX Internalsq:q;}q<(hX Internalsq=h h6ubah!h"ubXinternals/protocolq>h)q?}q@(hUh}qA(h]h]h]h]h]uh]qBhXTask Message ProtocolqCqD}qE(hXTask Message ProtocolqFh h?ubah!h"ubXreference/celery.task.httpqGh)qH}qI(hUh}qJ(h]h]h]h]h]uh]qKhX&HTTP Callback Tasks - celery.task.httpqLqM}qN(hX&HTTP Callback Tasks - celery.task.httpqOh hHubah!h"ubX+internals/reference/celery.worker.schedulerqPh)qQ}qR(hUh}qS(h]h]h]h]h]uh]qThX*Worker Scheduler - celery.worker.schedulerqUqV}qW(hX*Worker Scheduler - celery.worker.schedulerqXh hQubah!h"ubXreference/celery.statesqYh)qZ}q[(hUh}q\(h]h]h]h]h]uh]q]hXTask States - celery.statesq^q_}q`(hXTask States - celery.statesqah hZubah!h"ubX2internals/reference/celery.worker.control.builtinsqbh)qc}qd(hUh}qe(h]h]h]h]h]uh]qfhXABuilt-in Remote Control Commands - celery.worker.control.builtinsqgqh}qi(hXABuilt-in Remote Control Commands - celery.worker.control.builtinsqjh hcubah!h"ubXinternals/reference/celery.logqkh)ql}qm(hUh}qn(h]h]h]h]h]uh]qohXLogging - celery.logqpqq}qr(hXLogging - celery.logqsh hlubah!h"ubX!internals/reference/celery.workerqth)qu}qv(hUh}qw(h]h]h]h]h]uh]qxhX&Multiprocessing Worker - celery.workerqyqz}q{(hX&Multiprocessing Worker - celery.workerq|h huubah!h"ubXreference/indexq}h)q~}q(hUh}q(h]h]h]h]h]uh]qhX API Referenceqq}q(hX API Referenceqh h~ubah!h"ubX*internals/reference/celery.worker.listenerqh)q}q(hUh}q(h]h]h]h]h]uh]qhX0Worker Message Listener - celery.worker.listenerqq}q(hX0Worker Message Listener - celery.worker.listenerqh hubah!h"ubXreference/celery.viewsqh)q}q(hUh}q(h]h]h]h]h]uh]qhXDjango Views - celery.viewsqq}q(hXDjango Views - celery.viewsqh hubah!h"ubX(internals/reference/celery.execute.traceqh)q}q(hUh}q(h]h]h]h]h]uh]qhX(Tracing Execution - celery.execute.traceqq}q(hX(Tracing Execution - celery.execute.traceqh hubah!h"ubXfaqqh)q}q(hUh}q(h]h]h]h]h]uh]qhXFrequently Asked Questionsqq}q(hXFrequently Asked Questionsqh hubah!h"ubXuserguide/remote-tasksqh)q}q(hUh}q(h]h]h]h]h]uh]qhXHTTP Callback Tasks (Webhooks)qq}q(hXHTTP Callback Tasks (Webhooks)qh hubah!h"ubX%internals/reference/celery.worker.jobqh)q}q(hUh}q(h]h]h]h]h]uh]qhX#Executable Jobs - celery.worker.jobqq}q(hX#Executable Jobs - celery.worker.jobqh hubah!h"ubX#getting-started/broker-installationqh)q}q(hUh}q(h]h]h]h]h]uh]qhXBroker Installationqq}q(hXBroker Installationqh hubah!h"ubX_theme/ADCTheme/READMEqh)q}q(hUh}q(h]h]h]h]h]uh]qhXHow To Installqʅq}q(hXHow To Installqh hubah!h"ubXreference/celery.signalsqh)q}q(hUh}q(h]h]h]h]h]uh]qhXSignals - celery.signalsqӅq}q(hXSignals - celery.signalsqh hubah!h"ubXreference/celery.executeqh)q}q(hUh}q(h]h]h]h]h]uh]qhX Executing Tasks - celery.executeq܅q}q(hX Executing Tasks - celery.executeqh hubah!h"ubX#internals/reference/celery.managersqh)q}q(hUh}q(h]h]h]h]h]uh]qhX'Django Model Managers - celery.managersq允q}q(hX'Django Model Managers - celery.managersqh hubah!h"ubX changelogqh)q}q(hUh}q(h]h]h]h]h]uh]qhXChange historyqq}q(hXChange historyqh hubah!h"ubXreference/celery.resultqh)q}q(hUh}q(h]h]h]h]h]uh]qhXTask Result - celery.resultqq}q(hXTask Result - celery.resultqh hubah!h"ubXtutorials/clickcounterqh)q}q(hUh}q(h]h]h]h]h]uh]qhX:Tutorial: Creating a click counter using carrot and celeryrr}r(hX:Tutorial: Creating a click counter using carrot and celeryrh hubah!h"ubXreference/celery.confrh)r}r(hUh}r(h]h]h]h]h]uh]rhXConfiguration - celery.confr r }r (hXConfiguration - celery.confr h jubah!h"ubXreference/celery.task.controlr h)r}r(hUh}r(h]h]h]h]h]uh]rhX2Remote Management of Workers - celery.task.controlrr}r(hX2Remote Management of Workers - celery.task.controlrh jubah!h"ubX#internals/reference/celery.backendsrh)r}r(hUh}r(h]h]h]h]h]uh]rhXBackends - celery.backendsrr}r(hXBackends - celery.backendsrh jubah!h"ubXreference/celery.task.baserh)r }r!(hUh}r"(h]h]h]h]h]uh]r#hX!Defining Tasks - celery.task.baser$r%}r&(hX!Defining Tasks - celery.task.baser'h j ubah!h"ubX$reference/celery.contrib.test_runnerr(h)r)}r*(hUh}r+(h]h]h]h]h]uh]r,hX1Contrib: Test runner - celery.contrib.test_runnerr-r.}r/(hX1Contrib: Test runner - celery.contrib.test_runnerr0h j)ubah!h"ubX)internals/reference/celery.datastructuresr1h)r2}r3(hUh}r4(h]h]h]h]h]uh]r5hX&Datastructures - celery.datastructuresr6r7}r8(hX&Datastructures - celery.datastructuresr9h j2ubah!h"ubXreference/celery.bin.celeryinitr:h)r;}r<(hUh}r=(h]h]h]h]h]uh]r>hX)Celery Initialize - celery.bin.celeryinitr?r@}rA(hX)Celery Initialize - celery.bin.celeryinitrBh j;ubah!h"ubXindexrCh)rD}rE(hUh}rF(h]h]h]h]h]uh]rGhXCelery - Distributed Task QueuerHrI}rJ(hXCelery - Distributed Task QueuerKh jDubah!h"ubX'getting-started/first-steps-with-celeryrLh)rM}rN(hUh}rO(h]h]h]h]h]uh]rPhXFirst steps with CeleryrQrR}rS(hXFirst steps with CeleryrTh jMubah!h"ubXreference/celery.exceptionsrUh)rV}rW(hUh}rX(h]h]h]h]h]uh]rYhXExceptions - celery.exceptionsrZr[}r\(hXExceptions - celery.exceptionsr]h jVubah!h"ubXreference/celery.messagingr^h)r_}r`(hUh}ra(h]h]h]h]h]uh]rbhXMessaging - celery.messagingrcrd}re(hXMessaging - celery.messagingrfh j_ubah!h"ubX(internals/reference/celery.worker.revokergh)rh}ri(hUh}rj(h]h]h]h]h]uh]rkhX+Worker Revoked Tasks - celery.worker.revokerlrm}rn(hX+Worker Revoked Tasks - celery.worker.revokeroh jhubah!h"ubXtutorials/indexrph)rq}rr(hUh}rs(h]h]h]h]h]uh]rthX Tutorialsrurv}rw(hX Tutorialsrxh jqubah!h"ubXinternals/moduleindexryh)rz}r{(hUh}r|(h]h]h]h]h]uh]r}hX Module Indexr~r}r(hX Module Indexrh jzubah!h"ubX+internals/reference/celery.backends.pyredisrh)r}r(hUh}r(h]h]h]h]h]uh]rhX(Backend: Redis - celery.backends.pyredisrr}r(hX(Backend: Redis - celery.backends.pyredisrh jubah!h"ubX!internals/reference/celery.modelsrh)r}r(hUh}r(h]h]h]h]h]uh]rhXDjango Models - celery.modelsrr}r(hXDjango Models - celery.modelsrh jubah!h"ubX"reference/celery.contrib.abortablerh)r}r(hUh}r(h]h]h]h]h]uh]rhX3Contrib: Abortable tasks - celery.contrib.abortablerr}r(hX3Contrib: Abortable tasks - celery.contrib.abortablerh jubah!h"ubXreference/celery.bin.celerybeatrh)r}r(hUh}r(h]h]h]h]h]uh]rhX3Celery Periodic Task Server - celery.bin.celerybeatrr}r(hX3Celery Periodic Task Server - celery.bin.celerybeatrh jubah!h"ubX)internals/reference/celery.worker.bucketsrh)r}r(hUh}r(h]h]h]h]h]uh]rhX4Token Bucket (rate limiting) - celery.worker.bucketsrr}r(hX4Token Bucket (rate limiting) - celery.worker.bucketsrh jubah!h"ubX configurationrh)r}r(hUh}r(h]h]h]h]h]uh]rhXConfiguration and defaultsrr}r(hXConfiguration and defaultsrh jubah!h"ubX'internals/reference/celery.utils.compatrh)r}r(hUh}r(h]h]h]h]h]uh]rhX*Python Compatibility - celery.utils.compatrr}r(hX*Python Compatibility - celery.utils.compatrh jubah!h"ubXreference/celery.registryrh)r}r(hUh}r(h]h]h]h]h]uh]rhXTask Registry - celery.registryrr}r(hXTask Registry - celery.registryrh jubah!h"ubXcookbook/daemonizingrh)r}r(hUh}r(h]h]h]h]h]uh]rhXRunning celeryd as a daemonrr}r(hXRunning celeryd as a daemonrh jubah!h"ubXtutorials/externalrh)r}r(hUh}r(h]h]h]h]h]uh]rhX External tutorials and resourcesrr}r(hX External tutorials and resourcesrh jubah!h"ubX%internals/reference/celery.utils.inforh)r}r(hUh}r(h]h]h]h]h]uh]rhX"Debugging Info - celery.utils.inforr}r(hX"Debugging Info - celery.utils.inforh jubah!h"ubXreference/celery.loaders.baserh)r}r(hUh}r(h]h]h]h]h]uh]rhX)Loader Base Classes - celery.loaders.baserr}r(hX)Loader Base Classes - celery.loaders.baserh jubah!h"ubX_theme/ADCThemePrint/READMErh)r}r(hUh}r(h]h]h]h]h]uh]rhXHow To Installrr}r(hXHow To Installrh jubah!h"ubXreference/celery.task.builtinsrh)r}r(hUh}r(h]h]h]h]h]uh]rhX,Built-in Task Classes - celery.task.builtinsrr}r(hX,Built-in Task Classes - celery.task.builtinsrh jubah!h"ubXinternals/deprecationrh)r}r(hUh}r(h]h]h]h]h]uh]rhXCelery Deprecation Timelinerr}r(hXCelery Deprecation Timelinerh jubah!h"ubX reference/celery.loaders.defaultr h)r }r (hUh}r (h]h]h]h]h]uh]r hX'Default Loader - celery.loaders.defaultrr}r(hX'Default Loader - celery.loaders.defaultrh j ubah!h"ubXgetting-started/resourcesrh)r}r(hUh}r(h]h]h]h]h]uh]rhX Resourcesrr}r(hX Resourcesrh jubah!h"ubX-internals/reference/celery.worker.controllersrh)r}r(hUh}r(h]h]h]h]h]uh]rhX5Worker Controller Threads - celery.worker.controllersr r!}r"(hX5Worker Controller Threads - celery.worker.controllersr#h jubah!h"ubXreference/celery.bin.celerydr$h)r%}r&(hUh}r'(h]h]h]h]h]uh]r(hX)Celery Worker Daemon - celery.bin.celerydr)r*}r+(hX)Celery Worker Daemon - celery.bin.celerydr,h j%ubah!h"ubXgetting-started/introductionr-h)r.}r/(hUh}r0(h]h]h]h]h]uh]r1hX Introductionr2r3}r4(hX Introductionr5h j.ubah!h"ubX*internals/reference/celery.utils.timeutilsr6h)r7}r8(hUh}r9(h]h]h]h]h]uh]r:hX0Time and Date Utilities - celery.utils.timeutilsr;r<}r=(hX0Time and Date Utilities - celery.utils.timeutilsr>h j7ubah!h"ubXgetting-started/periodic-tasksr?h)r@}rA(hUh}rB(h]h]h]h]h]uh]rChXPeriodic TasksrDrE}rF(hXPeriodic TasksrGh j@ubah!h"ubXuserguide/indexrHh)rI}rJ(hUh}rK(h]h]h]h]h]uh]rLhX User GuiderMrN}rO(hX User GuiderPh jIubah!h"ubX#internals/reference/celery.platformrQh)rR}rS(hUh}rT(h]h]h]h]h]uh]rUhX#Platform Specific - celery.platformrVrW}rX(hX#Platform Specific - celery.platformrYh jRubah!h"ubXinternals/eventsrZh)r[}r\(hUh}r](h]h]h]h]h]uh]r^hXList of Worker Eventsr_r`}ra(hXList of Worker Eventsrbh j[ubah!h"ubXinternals/workerrch)rd}re(hUh}rf(h]h]h]h]h]uh]rghXInternals: The workerrhri}rj(hXInternals: The workerrkh jdubah!h"ubXreference/celery.taskrlh)rm}rn(hUh}ro(h]h]h]h]h]uh]rphX,Task Information and Utilities - celery.taskrqrr}rs(hX,Task Information and Utilities - celery.taskrth jmubah!h"ubX&internals/reference/celery.worker.poolruh)rv}rw(hUh}rx(h]h]h]h]h]uh]ryhXTask Pool - celery.worker.poolrzr{}r|(hXTask Pool - celery.worker.poolr}h jvubah!h"ubX)internals/reference/celery.backends.cacher~h)r}r(hUh}r(h]h]h]h]h]uh]rhX&Backend: Cache - celery.backends.cacherr}r(hX&Backend: Cache - celery.backends.cacherh jubah!h"ubXreference/celery.eventsrh)r}r(hUh}r(h]h]h]h]h]uh]rhXEvents - celery.eventsrr}r(hXEvents - celery.eventsrh jubah!h"ubX)internals/reference/celery.worker.controlrh)r}r(hUh}r(h]h]h]h]h]uh]rhX&Worker Control - celery.worker.controlrr}r(hX&Worker Control - celery.worker.controlrh jubah!h"ubXlinksrh)r}r(hUh}r(h]h]h]h]h]uh]rhXInteresting Linksrr}r(hXInteresting Linksrh jubah!h"ubX,internals/reference/celery.backends.databaserh)r}r(hUh}r(h]h]h]h]h]uh]rhX,Backend: Database - celery.backends.databaserr}r(hX,Backend: Database - celery.backends.databaserh jubah!h"ubXinternals/reference/indexrh)r}r(hUh}r(h]h]h]h]h]uh]rhXInternal Module Referencerr}r(hXInternal Module Referencerh jubah!h"ubX&internals/reference/celery.utils.patchrh)r}r(hUh}r(h]h]h]h]h]uh]rhX*Compatibility Patches - celery.utils.patchrr}r(hX*Compatibility Patches - celery.utils.patchrh jubah!h"ubXuserguide/routingrh)r}r(hUh}r(h]h]h]h]h]uh]rhX Routing Tasksrr}r(hX Routing Tasksrh jubah!h"ubX(internals/reference/celery.backends.amqprh)r}r(hUh}r(h]h]h]h]h]uh]rhX$Backend: AMQP - celery.backends.amqprr}r(hX$Backend: AMQP - celery.backends.amqprh jubah!h"ubX*internals/reference/celery.backends.tyrantrh)r}r(hUh}r(h]h]h]h]h]uh]rhX.Backend: Tokyo Tyrant - celery.backends.tyrantrr}r(hX.Backend: Tokyo Tyrant - celery.backends.tyrantrh jubah!h"ubXgetting-started/indexrh)r}r(hUh}r(h]h]h]h]h]uh]rhXGetting Startedrr}r(hXGetting Startedrh jubah!h"ubX2internals/reference/celery.worker.control.registryrh)r}r(hUh}r(h]h]h]h]h]uh]rhX@Remote Control Command Registry - celery.worker.control.registryrr}r(hX@Remote Control Command Registry - celery.worker.control.registryrh jubah!h"ubXtutorials/otherqueuesrh)r}r(hUh}r(h]h]h]h]h]uh]rhX8Using Celery with Redis/Database as the messaging queue.rr}r(hX8Using Celery with Redis/Database as the messaging queue.rh jubah!h"ubX(internals/reference/celery.backends.baserh)r}r(hUh}r(h]h]h]h]h]uh]rhX$Backend: Base - celery.backends.baserr}r(hX$Backend: Base - celery.backends.baserh jubah!h"ubXinternals/reference/celery.beatrh)r}r(hUh}r(h]h]h]h]h]uh]rhXClock Service - celery.beatrr}r(hXClock Service - celery.beatrh jubah!h"ubXcookbook/unit-testingrh)r}r(hUh}r(h]h]h]h]h]uh]r hX Unit Testingr r }r (hX Unit Testingr h jubah!h"ubX'getting-started/first-steps-with-djangorh)r}r(hUh}r(h]h]h]h]h]uh]rhXFirst steps with Djangorr}r(hXFirst steps with Djangorh jubah!h"ubX+internals/reference/celery.backends.mongodbrh)r}r(hUh}r(h]h]h]h]h]uh]rhX*Backend: MongoDB - celery.backends.mongodbrr}r(hX*Backend: MongoDB - celery.backends.mongodbrh jubah!h"ubXcookbook/tasksr h)r!}r"(hUh}r#(h]h]h]h]h]uh]r$hXCreating Tasksr%r&}r'(hXCreating Tasksr(h j!ubah!h"ubX"reference/celery.loaders.djangoappr)h)r*}r+(hUh}r,(h]h]h]h]h]uh]r-hX(Django Loader - celery.loaders.djangoappr.r/}r0(hX(Django Loader - celery.loaders.djangoappr1h j*ubah!h"ubX internals/reference/celery.utilsr2h)r3}r4(hUh}r5(h]h]h]h]h]uh]r6hX&Multiprocessing Worker - celery.workerr7r8}r9(hX&Multiprocessing Worker - celery.workerr:h j3ubah!h"ubX+internals/reference/celery.worker.heartbeatr;h)r<}r=(hUh}r>(h]h]h]h]h]uh]r?hX+Worker Heartbeats - celery.worker.heartbeatr@rA}rB(hX+Worker Heartbeats - celery.worker.heartbeatrCh j<ubah!h"ubXuserguide/executingrDh)rE}rF(hUh}rG(h]h]h]h]h]uh]rHhXExecuting TasksrIrJ}rK(hXExecuting TasksrLh jEubah!h"ubXreference/celery.loadersrMh)rN}rO(hUh}rP(h]h]h]h]h]uh]rQhXLoaders - celery.loadersrRrS}rT(hXLoaders - celery.loadersrUh jNubah!h"ubXreference/celery.bin.camqadmrVh)rW}rX(hUh}rY(h]h]h]h]h]uh]rZhX9caqmadm: AMQP API Command-line Shell - celery.bin.camqadmr[r\}r](hX9caqmadm: AMQP API Command-line Shell - celery.bin.camqadmr^h jWubah!h"ubXreference/celery.task.schedulesr_h)r`}ra(hUh}rb(h]h]h]h]h]uh]rchX8Periodic Task Schedule Behaviors - celery.task.schedulesrdre}rf(hX8Periodic Task Schedule Behaviors - celery.task.schedulesrgh j`ubah!h"ubXreference/celery.decoratorsrhh)ri}rj(hUh}rk(h]h]h]h]h]uh]rlhX#Task Decorators - celery.decoratorsrmrn}ro(hX#Task Decorators - celery.decoratorsrph jiubah!h"ubuU domaindatarq}rr(Ustdrs}rt(UversionruKU anonlabelsrv}rw(UmodindexrxU py-modindexUUgenindexryjyUUsearchrzUsearchUuUlabelsr{}r|(jxU py-modindexUcsphinx.locale _TranslationProxy r}csphinx.locale mygettext r~U Module Indexrrj~jrbjyjyUj}j~UIndexrrj~jrbjzjzUj}j~U Search Pagerrj~jrbuU progoptionsr}rUobjectsr}ruUc}r(j}rjuKuUpyr}r(j}r(X$celery.utils.compat.OrderedDict.copyrjXmethodX DEFAULT_QUEUErjXdataX-celery.datastructures.SharedCounter.incrementrj1XmethodXcelery.exceptionsrjUUmodulerXBROADCAST_EXCHANGE_TYPErjXdataXcelery.loaders.base.BaseLoaderrjXclassrXcelery.utils.timeutils.raterj6XfunctionXcelery.loaders.djangoapprj)jXRESULT_BACKENDrjXdataX LOG_LEVELSrjXdataXcelery.utils.timeutilsrj6jX0celery.loaders.default.Loader.read_configurationrj XmethodX,celery.loaders.djangoapp.find_related_modulerj)XfunctionXQUEUESrjXdataX'celery.utils.compat.OrderedDict.popitemrjXmethodX+celery.managers.TaskSetManager.store_resultrhXmethodXcelery.utils.firstrj2XfunctionX(celery.datastructures.PositionQueue.fullrj1XmethodX)celery.registry.TaskRegistry.filter_typesrjXmethodrX#celery.loaders.base.BaseLoader.confrjX attributerXCELERYBEAT_SCHEDULE_FILENAMErjXdataX-celery.datastructures.ExceptionInfo.tracebackrj1X attributeXcelery.states.PENDINGrhYXdataXTaskMeta.task_idrjX attributeXcelery.task.baserh,jX PeriodicTaskMeta.total_run_countrjX attributeXcelery.loadersrjMjXcelery.states.RETRYrhYXdataXcelery.loaders.defaultrj jX#celery.datastructures.ExceptionInforj1XclassX TRACK_STARTEDrjXdataXcelery.utils.patchrjjXCELERYD_TASK_LOG_FORMATrjXdataXDEFAULT_EXCHANGErjXdataXTaskMetarjXclassXcelery.states.EXCEPTION_STATESrhYXdataXcelery.bin.celeryinitrj:jX celery.statesrhYjXcelery.utils.chunksrj2XfunctionXDISABLE_RATE_LIMITSrjXdataXcelery.utils.mitemgetterrj2XfunctionXcelery.contrib.test_runnerrj(jX&celery.datastructures.LimitedSet.firstrj1X attributeXPeriodicTaskMeta.taskrjX attributeXcelery.utils.gen_unique_idrj2XfunctionX task_sentrhXdataXcelery.loaders.default.Loaderrj XclassXPeriodicTaskMeta.last_run_atrjX attributeXcelery.exceptions.NotRegisteredrjUX exceptionXcelery.utils.repeatlastrj2XfunctionXcelery.utils.fun_takes_kwargsrj2XfunctionXcelery.utils.instantiaterj2XfunctionX,celery.loaders.default.Loader.on_worker_initrj XmethodX'celery.registry.TaskRegistry.unregisterrjXmethodrXCELERYMON_LOG_FILErjXdataXPeriodicTaskMetarjXclassXcelery.states.ALL_STATESrhYXdataXcelery.utils.get_full_cls_namerj2XfunctionX celery.utils.timeutils.remainingrj6XfunctionX#celery.exceptions.AlreadyRegisteredrjUX exceptionX celery.utilsrj2jX*celery.registry.TaskRegistry.NotRegisteredrjX exceptionrXcelery.utils.timeutils.weekdayrj6XfunctionX*celery.datastructures.PositionQueue.lengthrj1X attributeX#celery.datastructures.PositionQueuerj1XclassX#celery.datastructures.SharedCounterrj1XclassXcelery.platform.ignore_signalrjQXfunctionXDEFAULT_EXCHANGE_TYPErjXdataXcelery.loaders.load_settingsrjMXfunctionXSTORE_ERRORS_EVEN_IF_IGNOREDrjXdataXcelery.managers.TaskManagerrhXclassX&celery.platform.install_signal_handlerrjQXfunctionXcelery.platformrjQjXcelery.states.FAILURErhYXdataXCELERYMON_LOG_LEVELrjXdataX.celery.loaders.djangoapp.Loader.on_worker_initrj)XmethodXTASK_STATUS_RETRYrjXdataX%celery.loaders.djangoapp.autodiscoverrj)XfunctionX TASK_STATUSESrjXdataXBROKER_CONNECTION_TIMEOUTrjXdataX$celery.managers.TaskManager.get_taskrhXmethodXrevokedrjgXdataX-celery.datastructures.ExceptionInfo.exceptionrj1X attributeXcelery.loaders.djangoapp.Loaderrj)XclassXPeriodicTaskMeta.delayrjXmethodX celery.datastructures.LocalCacherj1XclassXcelery.registryrjjXcelery.utils.mattrgetterrj2XfunctionX worker_readyrhXdataX IGNORE_RESULTrjXdataXCELERY_CACHE_BACKENDrjXdataX SEND_EVENTSrjXdataX$celery.platform.set_mp_process_titlerjQXfunctionXcelery.states.UNREADY_STATESrhYXdataXTASK_SERIALIZERrjXdataX'celery.utils.timeutils.delta_resolutionrj6XfunctionXRESULT_EXCHANGErjXdataXEVENT_ROUTING_KEYrjXdataXTASK_RESULT_EXPIRESrjXdataXcelery.managers.TaskSetManagerrhXclassXCELERYD_ETA_SCHEDULERrjXdataXEVENT_EXCHANGErjXdataXTaskMeta.date_donerjX attributeX task_prerunrhXdataX ALWAYS_EAGERrjXdataXPeriodicTaskMeta.namerjX attributeX CELERYD_POOLrjXdataXcelery.loaders.get_loader_clsrjMXfunctionX2celery.loaders.djangoapp.Loader.read_configurationrj)XmethodX+celery.loaders.base.BaseLoader.on_task_initrjXmethodrX)celery.exceptions.MaxRetriesExceededErrorrjUX exceptionXcelery.loaders.baserjjX ACKS_LATErjXdataX#celery.datastructures.consume_queuer j1XfunctionXcelery.utils.noopr j2XfunctionXCELERYBEAT_LOG_FILEr jXdataX%celery.registry.TaskRegistry.periodicr jXmethodr X-celery.loaders.base.BaseLoader.on_worker_initrjXmethodrXcelery.utils.retry_over_timerj2XfunctionXcelery.utils.compat.OrderedDictrjXclassXBROKER_CONNECTION_RETRYrjXdataXBROKER_CONNECTION_MAX_RETRIESrjXdataX%celery.registry.TaskRegistry.registerrjXmethodrXCELERYD_LOG_FILErjXdataXcelery.registry.TaskRegistryrjXclassrXEVENT_EXCHANGE_TYPErjXdataXDEFAULT_ROUTING_KEYrjXdataX celery.exceptions.RetryTaskErrorrjUX exceptionX(celery.utils.compat.OrderedDict.fromkeysrjX classmethodX,celery.loaders.djangoapp.Loader.on_task_initrj)XmethodX$celery.contrib.test_runner.run_testsrj(XfunctionXCELERYD_CONCURRENCYrjXdataXcelery.states.SUCCESSr hYXdataXcelery.loaders.current_loaderr!jMXfunctionXMAX_CACHED_RESULTSr"jXdataXTaskMeta.statusr#jX attributeX.celery.managers.TaskSetManager.restore_tasksetr$hXmethodXTASK_STATUSES_CHOICESr%jXdataXCELERYBEAT_MAX_LOOP_INTERVALr&jXdataXCELERYD_LOG_LEVELr'jXdataX*celery.datastructures.PositionQueue.filledr(j1X attributeX$celery.registry.TaskRegistry.regularr)jXmethodr*XTASK_STATUS_DONEr+jXdataXcelery.states.READY_STATESr,hYXdataXcelery.managersr-hjX!celery.managers.transaction_retryr.hXfunctionXCELERYD_LOG_FORMATr/jXdataXCELERYD_LISTENERr0jXdataXcelery.utils.padlistr1j2XfunctionXTASK_STATUS_FAILUREr2jXdataX worker_initr3hXdataXCELERY_SEND_TASK_ERROR_EMAILSr4jXdataX(celery.utils.timeutils.timedelta_secondsr5j6XfunctionXCELERYBEAT_LOG_LEVELr6jXdataXcelery.utils.get_cls_by_namer7j2XfunctionXcelery.datastructuresr8j1jX task_postrunr9hXdataXBROADCAST_QUEUEr:jXdataXTASK_STATUS_PENDINGr;jXdataX-celery.datastructures.SharedCounter.decrementr<j1XmethodX!celery.platform.set_process_titler=jQXfunctionXCELERYD_PREFETCH_MULTIPLIERr>jXdataXDEFAULT_DELIVERY_MODEr?jXdataXcelery.task.httpr@hjXcelery.platform.reset_signalrAjQXfunctionX EVENT_QUEUErBjXdataX*celery.datastructures.LimitedSet.pop_valuerCj1XmethodXBROADCAST_EXCHANGErDjXdataX4celery.datastructures.PositionQueue.UnfilledPositionrEj1XclassXCELERYD_MEDIATORrFjXdataXcelery.exceptions.TimeoutErrorrGjUX exceptionXworker_shutdownrHhXdataX%celery.utils.compat.OrderedDict.clearrIjXmethodX(celery.managers.TaskManager.store_resultrJhXmethodXDEFAULT_RATE_LIMITrKjXdataXEVENT_SERIALIZERrLjXdataX celery.datastructures.LimitedSetrMj1XclassXTaskMeta.resultrNjX attributeX$celery.datastructures.LimitedSet.addrOj1XmethodXcelery.states.STARTEDrPhYXdataXcelery.utils.compatrQjjX&celery.exceptions.ImproperlyConfiguredrRjUX exceptionuUmodulesrS}rT(j(j UUtj(jUUtj(j6UUtj-(hUUtj(jUUtj(j(UUtj8(j1UUtj(jMUUtj(jUUtj@(hUUtj(h,UUtj(jQUUtj(j:UUtj(j2UUtj(j)UUtj(jUUUtj(hYUUtjQ(jUUtujuKuUjsrU}rV(j}rWjuKuUrstrX}rY(j}rZjuKuUcppr[}r\(j}r]juKuuU glob_toctreesr^h]Rr_U reread_alwaysr`h]ra(j jj~jjjhhGhPjj^jj$hbhkhtjhjjjhjjjjhjjjj;jljujjVhhj_jheRrbU doctreedirrcXO/var/build/user_builds/celery/checkouts/1.0-archived/docs/_build/html/.doctreesrdUversioning_conditionreU citationsrf}juK*UsrcdirrgX9/var/build/user_builds/celery/checkouts/1.0-archived/docsrhUconfigricsphinx.config Config rj)rk}rl(Upygments_stylermUtracrnUhtml_use_smartypantsroU html_themerpUADCThemerqU exclude_treesrr]rsU.buildrtaU html_contextru}rv(U github_userUceleryrwUnamerxXCeleryryU github_repojwUversions]rz(UmasterU /en/master/r{Ulatestr|U /en/latest/r}U 2.5-archivedU/en/2.5-archived/r~U 2.4-archivedU/en/2.4-archived/rU 2.3-archivedU/en/2.3-archived/rU 2.2-archivedU/en/2.2-archived/rU 2.1-archivedU/en/2.1-archived/rU 2.0-archivedU/en/2.0-archived/rU 1.0-archivedrU/en/1.0-archived/rU3.0U/en/3.0/reU using_themeU downloads]U READTHEDOCSUgithub_versionjU conf_py_pathU/docs/U canonical_urlUUanalytics_codeUU rtd_languageXenUPRODUCTION_DOMAINUreadthedocs.orgjpjqUdisplay_githubUcurrent_versionrjUsingle_versionUapi_hostUhttps://readthedocs.orgUslugrjwU new_themeU MEDIA_URLrUhttps://media.readthedocs.org/uU source_suffixrU.rstU copyrightrX2009, Ask SolemUadd_function_parenthesesrjuU1.0U master_docrUindexrUtemplates_pathr]r(UA/home/docs/checkouts/readthedocs.org/readthedocs/templates/sphinxrU .templatesreUlatex_documentsr]r(UindexU Celery.texXCelery DocumentationX Ask SolemUmanualtraUhtml_static_pathr]r(U.staticrUI/home/docs/checkouts/readthedocs.org/readthedocs/templates/sphinx/_staticreUhtml_theme_pathr]r(U_themerjeUlanguagerXenrU overridesr}rjjsUhtml_use_indexrUhtml_use_modindexrUprojectrjyU extensionsr]r(Usphinx.ext.autodocrUsphinx.ext.coveragerU djangodocsrUreadthedocs_ext.readthedocsrU"readthedocs_ext.readthedocshtmldirreUreleaserU1.0.6 (stable)UsetuprNubUmetadatar}r(h }h#}h,}h5}h>}hG}hP}hY}hb}hk}ht}h}}h}h}h}h}h}h}h}h}h}h}h}h}h}h}j}j }j}j}j(}j1}j:}jC}jL}jU}j^}jg}jp}jy}j}j}j}j}j}j}j}j}j}j}j}j}j}j}j}j }j}j}j$}j-}j6}j?}jH}jQ}jZ}jc}jl}ju}j~}j}j}j}j}j}j}j}j}j}j}j}j}j}j}j}j}j}j }j)}j2}j;}jD}jM}jV}j_}jh}uUversionchangesr}Utoc_num_entriesr}r(h Kh#Kh,Kh5Kh>KhGKhPKhYKhbKhkKhtKh}KhKhKhKhK-hKhKhKhKhKhKhKhK8hKhKjKj KjKjKj(Kj1Kj:KjCKjLKjUKj^KjgKjpKjyK;jKjKjKjKjKjKjKjKjKjK jKjKjKjKjKj KjKjKj$Kj-Kj6Kj?KjHKjQKjZKjcK jlKjuKj~KjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKjKj Kj)Kj2Kj;KjDKjMKjVKj_KjhKuUimagesrh)rh]RrbUnumbered_toctreesrh]RrU found_docsrh]r(h h#h,h5h>hGhPhYhbhkhth}hhhhhjhhhhhhhjhjj jjj(j1j:jCjLjUj^jgjpjyjhjjjjjjjjjjjjjj jjj$j-j6j?jHjQjZjcjljuj~jjjjjjjjjjjjjjjjj j)j2j;jDjMjVj_jheRrU longtitlesr}r(h hh#h$h,h-h5h6h>h?hGhHhPhQhYhZhbhchkhlhthuh}h~hhhhhhhhhhhhhhhhhhhhhhhhhhhhjjj jjjjj j(j)j1j2j:j;jCjDjLjMjUjVj^j_jgjhjpjqjyjzjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj j jjjjj$j%j-j.j6j7j?j@jHjIjQjRjZj[jcjdjljmjujvj~jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj j!j)j*j2j3j;j<jDjEjMjNjVjWj_j`jhjiuU dependenciesr}r(jh]rU../celery/utils/compat.pyraRrjUh]rU../celery/exceptions.pyraRrhh]rU../celery/managers.pyraRrj h]rU../celery/loaders/default.pyraRrjh]rU../celery/registry.pyraRrj-h]rXincludes/introduction.txtraRrjh]rU../celery/utils/patch.pyraRrhYh]rU../celery/states.pyraRrj(h]rU ../celery/contrib/test_runner.pyraRrjQh]rU../celery/platform.pyraRrj)h]rU../celery/loaders/djangoapp.pyraRrj6h]rU../celery/utils/timeutils.pyraRrj1h]rU../celery/datastructures.pyraRrj2h]rU../celery/utils/__init__.pyraRrjMh]rU../celery/loaders/__init__.pyraRrj:h]rU../celery/bin/celeryinit.pyraRrjh]rXincludes/resources.txtraRrjh]rU../celery/loaders/base.pyraRruUtoctree_includesr}r(jC]r(Xgetting-started/indexrXuserguide/indexrX configurationrXcookbook/indexrXtutorials/indexrXfaqrXreference/indexrXinternals/indexrX changelogrXlinksreh}]r(Xreference/celery.decoratorsrXreference/celery.task.baserXreference/celery.executerXreference/celery.resultrXreference/celery.taskrXreference/celery.confrXreference/celery.task.controlrXreference/celery.task.httpr Xreference/celery.task.schedulesr Xreference/celery.signalsr Xreference/celery.exceptionsr Xreference/celery.task.builtinsr Xreference/celery.loadersrXreference/celery.loaders.baserX reference/celery.loaders.defaultrX"reference/celery.loaders.djangoapprXreference/celery.registryrXreference/celery.statesrXreference/celery.messagingrX$reference/celery.contrib.test_runnerrX"reference/celery.contrib.abortablerXreference/celery.viewsrXreference/celery.eventsrXreference/celery.bin.celerydrXreference/celery.bin.celerybeatrXreference/celery.bin.celeryinitrXreference/celery.bin.camqadmrej]r(Xgetting-started/introductionrX#getting-started/broker-installationrX'getting-started/first-steps-with-celeryr X'getting-started/first-steps-with-djangor!Xgetting-started/periodic-tasksr"Xgetting-started/resourcesr#eh#]r$(Xcookbook/tasksr%Xcookbook/daemonizingr&Xcookbook/unit-testingr'ejH]r((Xuserguide/tasksr)Xuserguide/executingr*Xuserguide/remote-tasksr+Xuserguide/routingr,ejp]r-(Xtutorials/externalr.Xtutorials/otherqueuesr/Xtutorials/clickcounterr0ej]r1(X!internals/reference/celery.workerr2X*internals/reference/celery.worker.listenerr3X%internals/reference/celery.worker.jobr4X-internals/reference/celery.worker.controllersr5X)internals/reference/celery.worker.bucketsr6X+internals/reference/celery.worker.schedulerr7X&internals/reference/celery.worker.poolr8X+internals/reference/celery.worker.heartbeatr9X)internals/reference/celery.worker.controlr:X2internals/reference/celery.worker.control.builtinsr;X2internals/reference/celery.worker.control.registryr<X(internals/reference/celery.worker.revoker=Xinternals/reference/celery.beatr>X#internals/reference/celery.backendsr?X(internals/reference/celery.backends.baser@X(internals/reference/celery.backends.amqprAX,internals/reference/celery.backends.databaserBX)internals/reference/celery.backends.cacherCX+internals/reference/celery.backends.mongodbrDX+internals/reference/celery.backends.pyredisrEX*internals/reference/celery.backends.tyrantrFX(internals/reference/celery.execute.tracerGX)internals/reference/celery.datastructuresrHXinternals/reference/celery.logrIX internals/reference/celery.utilsrJX*internals/reference/celery.utils.timeutilsrKX%internals/reference/celery.utils.inforLX'internals/reference/celery.utils.compatrMX&internals/reference/celery.utils.patchrNX#internals/reference/celery.platformrOX#internals/reference/celery.managersrPX!internals/reference/celery.modelsrQeh5]rR(Xinternals/deprecationrSXinternals/workerrTXinternals/protocolrUXinternals/eventsrVXinternals/moduleindexrWXinternals/reference/indexrXeuU temp_datarY}UtocsrZ}r[(h cdocutils.nodes bullet_list r\)r]}r^(hUh}r_(h]h]h]h]h]uh]r`cdocutils.nodes list_item ra)rb}rc(hUh}rd(h]h]h]h]h]uh j]h]re(csphinx.addnodes compact_paragraph rf)rg}rh(hUh}ri(h]h]h]h]h]uh jbh]rjcdocutils.nodes reference rk)rl}rm(hUh}rn(U anchornameUUrefurih h]h]h]h]h]Uinternaluh jgh]rohXCelery 1.0 has been released!rprq}rr(hhh jlubah!U referencersubah!Ucompact_paragraphrtubj\)ru}rv(hUh}rw(h]h]h]h]h]uh jbh]rx(ja)ry}rz(hUh}r{(h]h]h]h]h]uh juh]r|(jf)r}}r~(hUh}r(h]h]h]h]h]uh jyh]rjk)r}r(hUh}r(U anchornameU #what-is-itUrefurih h]h]h]h]h]Uinternaluh j}h]rhX What is it?rr}r(hX What is it?rh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jyh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #featuresUrefurih h]h]h]h]h]Uinternaluh jh]rhXFeaturesrr}r(hXFeaturesrh jubah!jsubah!jtubah!U list_itemrubah!U bullet_listrubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh juh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #stable-apiUrefurih h]h]h]h]h]Uinternaluh jh]rhX Stable APIrr}r(hX Stable APIrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh juh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #what-s-newUrefurih h]h]h]h]h]Uinternaluh jh]rhX What's new?rr}r(hX What's new?rh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh juh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #resourcesUrefurih h]h]h]h]h]Uinternaluh jh]rhX Resourcesrr}r(hX Resourcesrh jubah!jsubah!jtubah!jubeh!jubeh!jubah!jubh#j\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurih#h]h]h]h]h]Uinternaluh jh]rhXCookbookrr}r(hh+h jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]rcsphinx.addnodes toctree r)r}r(hUh}r(UnumberedKUparenth#U titlesonlyUglobh]h]h]h]h]Uentries]r(Nj%rNj&rNj'reUhiddenUmaxdepthKU includefiles]r(j%j&j'eU includehiddenuh jh]h!Utoctreerubah!jubeh!jubah!jubh,j\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurih,h]h]h]h]h]Uinternaluh jh]rhXTasksrr}r(hh4h jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r (h]h]h]h]h]uh jh]r jf)r }r (hUh}r (h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#default-keyword-argumentsUrefurih,h]h]h]h]h]Uinternaluh j h]rhXDefault keyword argumentsrr}r(hXDefault keyword argumentsrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r (hUh}r!(U anchornameU#loggingUrefurih,h]h]h]h]h]Uinternaluh jh]r"hXLoggingr#r$}r%(hXLoggingr&h jubah!jsubah!jtubah!jubja)r'}r((hUh}r)(h]h]h]h]h]uh jh]r*(jf)r+}r,(hUh}r-(h]h]h]h]h]uh j'h]r.jk)r/}r0(hUh}r1(U anchornameU##retrying-a-task-if-something-failsUrefurih,h]h]h]h]h]Uinternaluh j+h]r2hX"Retrying a task if something failsr3r4}r5(hX"Retrying a task if something failsr6h j/ubah!jsubah!jtubj\)r7}r8(hUh}r9(h]h]h]h]h]uh j'h]r:ja)r;}r<(hUh}r=(h]h]h]h]h]uh j7h]r>jf)r?}r@(hUh}rA(h]h]h]h]h]uh j;h]rBjk)rC}rD(hUh}rE(U anchornameU#using-a-custom-retry-delayUrefurih,h]h]h]h]h]Uinternaluh j?h]rFhXUsing a custom retry delayrGrH}rI(hXUsing a custom retry delayrJh jCubah!jsubah!jtubah!jubah!jubeh!jubja)rK}rL(hUh}rM(h]h]h]h]h]uh jh]rN(jf)rO}rP(hUh}rQ(h]h]h]h]h]uh jKh]rRjk)rS}rT(hUh}rU(U anchornameU #task-optionsUrefurih,h]h]h]h]h]Uinternaluh jOh]rVhX Task optionsrWrX}rY(hX Task optionsrZh jSubah!jsubah!jtubj\)r[}r\(hUh}r](h]h]h]h]h]uh jKh]r^ja)r_}r`(hUh}ra(h]h]h]h]h]uh j[h]rbjf)rc}rd(hUh}re(h]h]h]h]h]uh j_h]rfjk)rg}rh(hUh}ri(U anchornameU#message-and-routing-optionsUrefurih,h]h]h]h]h]Uinternaluh jch]rjhXMessage and routing optionsrkrl}rm(hXMessage and routing optionsrnh jgubah!jsubah!jtubah!jubah!jubeh!jubja)ro}rp(hUh}rq(h]h]h]h]h]uh jh]rr(jf)rs}rt(hUh}ru(h]h]h]h]h]uh joh]rvjk)rw}rx(hUh}ry(U anchornameU#exampleUrefurih,h]h]h]h]h]Uinternaluh jsh]rzhXExampler{r|}r}(hXExampler~h jwubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh joh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#blog-models-pyUrefurih,h]h]h]h]h]Uinternaluh jh]rhXblog/models.pyrr}r(hXblog/models.pyrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#blog-views-pyUrefurih,h]h]h]h]h]Uinternaluh jh]rhX blog/views.pyrr}r(hX blog/views.pyrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#blog-tasks-pyUrefurih,h]h]h]h]h]Uinternaluh jh]rhX blog/tasks.pyrr}r(hX blog/tasks.pyrh jubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #how-it-worksUrefurih,h]h]h]h]h]Uinternaluh jh]rhX How it worksrr}r(hX How it worksrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#tips-and-best-practicesUrefurih,h]h]h]h]h]Uinternaluh jh]rhXTips and Best Practicesrr}r(hXTips and Best Practicesrh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#ignore-results-you-don-t-wantUrefurih,h]h]h]h]h]Uinternaluh jh]rhXIgnore results you don't wantrr}r(hXIgnore results you don't wantrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU(#disable-rate-limits-if-they-re-not-usedUrefurih,h]h]h]h]h]Uinternaluh jh]rhX'Disable rate limits if they're not usedrr}r(hX'Disable rate limits if they're not usedrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU%#avoid-launching-synchronous-subtasksUrefurih,h]h]h]h]h]Uinternaluh jh]rhX$Avoid launching synchronous subtasksrr}r(hX$Avoid launching synchronous subtasksrh jubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r (h]h]h]h]h]uh jh]r (jf)r }r (hUh}r (h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#performance-and-strategiesUrefurih,h]h]h]h]h]Uinternaluh j h]rhXPerformance and Strategiesrr}r(hXPerformance and Strategiesrh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r (hUh}r!(h]h]h]h]h]uh jh]r"jk)r#}r$(hUh}r%(U anchornameU #granularityUrefurih,h]h]h]h]h]Uinternaluh jh]r&hX Granularityr'r(}r)(hX Granularityr*h j#ubah!jsubah!jtubah!jubja)r+}r,(hUh}r-(h]h]h]h]h]uh jh]r.jf)r/}r0(hUh}r1(h]h]h]h]h]uh j+h]r2jk)r3}r4(hUh}r5(U anchornameU#data-localityUrefurih,h]h]h]h]h]Uinternaluh j/h]r6hX Data localityr7r8}r9(hX Data localityr:h j3ubah!jsubah!jtubah!jubja)r;}r<(hUh}r=(h]h]h]h]h]uh jh]r>jf)r?}r@(hUh}rA(h]h]h]h]h]uh j;h]rBjk)rC}rD(hUh}rE(U anchornameU#stateUrefurih,h]h]h]h]h]Uinternaluh j?h]rFhXStaterGrH}rI(hXStaterJh jCubah!jsubah!jtubah!jubeh!jubeh!jubeh!jubeh!jubah!jubh5j\)rK}rL(hUh}rM(h]h]h]h]h]uh]rNja)rO}rP(hUh}rQ(h]h]h]h]h]uh jKh]rR(jf)rS}rT(hUh}rU(h]h]h]h]h]uh jOh]rVjk)rW}rX(hUh}rY(U anchornameUUrefurih5h]h]h]h]h]Uinternaluh jSh]rZhX Internalsr[r\}r](hh=h jWubah!jsubah!jtubj\)r^}r_(hUh}r`(h]h]h]h]h]uh jOh]raj)rb}rc(hUh}rd(UnumberedKUparenth5U titlesonlyUglobh]h]h]h]h]Uentries]re(NjSrfNjTrgNjUrhNjVriNjWrjNjXrkeUhiddenUmaxdepthKU includefiles]rl(jSjTjUjVjWjXeU includehiddenuh j^h]h!jubah!jubeh!jubah!jubh>j\)rm}rn(hUh}ro(h]h]h]h]h]uh]rpja)rq}rr(hUh}rs(h]h]h]h]h]uh jmh]rt(jf)ru}rv(hUh}rw(h]h]h]h]h]uh jqh]rxjk)ry}rz(hUh}r{(U anchornameUUrefurih>h]h]h]h]h]Uinternaluh juh]r|hXTask Message Protocolr}r~}r(hhFh jyubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jqh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#exampleUrefurih>h]h]h]h]h]Uinternaluh jh]rhXExamplerr}r(hXExampleh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#serializationUrefurih>h]h]h]h]h]Uinternaluh jh]rhX Serializationrr}r(hX Serializationh jubah!jsubah!jtubah!jubeh!jubeh!jubah!jubhGj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurihGh]h]h]h]h]Uinternaluh jh]rhX&HTTP Callback Tasks - celery.task.httprr}r(hhOh jubah!jsubah!jtubah!jubah!jubhPj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurihPh]h]h]h]h]Uinternaluh jh]rhX*Worker Scheduler - celery.worker.schedulerrr}r(hhXh jubah!jsubah!jtubah!jubah!jubhYj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurihYh]h]h]h]h]Uinternaluh jh]rhXTask States - celery.statesrr}r(hhah jubah!jsubah!jtubah!jubah!jubhbj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurihbh]h]h]h]h]Uinternaluh jh]rhXABuilt-in Remote Control Commands - celery.worker.control.builtinsrr}r(hhjh jubah!jsubah!jtubah!jubah!jubhkj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurihkh]h]h]h]h]Uinternaluh jh]rhXLogging - celery.logrr}r(hhsh jubah!jsubah!jtubah!jubah!jubhtj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r }r (hUh}r (h]h]h]h]h]uh jh]r jk)r }r(hUh}r(U anchornameUUrefurihth]h]h]h]h]Uinternaluh j h]rhX&Multiprocessing Worker - celery.workerrr}r(hh|h j ubah!jsubah!jtubah!jubah!jubh}j\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r }r!(hUh}r"(U anchornameUUrefurih}h]h]h]h]h]Uinternaluh jh]r#hX API Referencer$r%}r&(hhh j ubah!jsubah!jtubj\)r'}r((hUh}r)(h]h]h]h]h]uh jh]r*j)r+}r,(hUh}r-(UnumberedKUparenth}U titlesonlyUglobh]h]h]h]h]Uentries]r.(Njr/Njr0Njr1Njr2Njr3Njr4Njr5Nj r6Nj r7Nj r8Nj r9Nj r:Njr;Njr<Njr=Njr>Njr?Njr@NjrANjrBNjrCNjrDNjrENjrFNjrGNjrHNjrIeUhiddenUmaxdepthKU includefiles]rJ(jjjjjjjj j j j j jjjjjjjjjjjjjjjeU includehiddenuh j'h]h!jubah!jubeh!jubah!jubhj\)rK}rL(hUh}rM(h]h]h]h]h]uh]rNja)rO}rP(hUh}rQ(h]h]h]h]h]uh jKh]rRjf)rS}rT(hUh}rU(h]h]h]h]h]uh jOh]rVjk)rW}rX(hUh}rY(U anchornameUUrefurihh]h]h]h]h]Uinternaluh jSh]rZhX0Worker Message Listener - celery.worker.listenerr[r\}r](hhh jWubah!jsubah!jtubah!jubah!jubhj\)r^}r_(hUh}r`(h]h]h]h]h]uh]raja)rb}rc(hUh}rd(h]h]h]h]h]uh j^h]rejf)rf}rg(hUh}rh(h]h]h]h]h]uh jbh]rijk)rj}rk(hUh}rl(U anchornameUUrefurihh]h]h]h]h]Uinternaluh jfh]rmhXDjango Views - celery.viewsrnro}rp(hhh jjubah!jsubah!jtubah!jubah!jubhj\)rq}rr(hUh}rs(h]h]h]h]h]uh]rtja)ru}rv(hUh}rw(h]h]h]h]h]uh jqh]rxjf)ry}rz(hUh}r{(h]h]h]h]h]uh juh]r|jk)r}}r~(hUh}r(U anchornameUUrefurihh]h]h]h]h]Uinternaluh jyh]rhX(Tracing Execution - celery.execute.tracerr}r(hhh j}ubah!jsubah!jtubah!jubah!jubhj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurihh]h]h]h]h]Uinternaluh jh]rhXFrequently Asked Questionsrr}r(hhh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#generalUrefurihh]h]h]h]h]Uinternaluh jh]rhXGeneralrr}r(hXGeneralh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU-#what-kinds-of-things-should-i-use-celery-forUrefurihh]h]h]h]h]Uinternaluh jh]rhX-What kinds of things should I use celery for?rr}r(hX-What kinds of things should I use celery for?h jubah!jsubah!jtubah!jubah!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#misconceptionsUrefurihh]h]h]h]h]Uinternaluh jh]rhXMisconceptionsrr}r(hXMisconceptionsh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#is-celery-dependent-on-pickleUrefurihh]h]h]h]h]Uinternaluh jh]rhXIs celery dependent on pickle?rr}r(hXIs celery dependent on pickle?h jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#is-celery-for-django-onlyUrefurihh]h]h]h]h]Uinternaluh jh]rhXIs celery for Django only?rr}r(hXIs celery for Django only?h jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#why-is-django-a-dependencyUrefurihh]h]h]h]h]Uinternaluh jh]rhXWhy is Django a dependency?rr}r(hXWhy is Django a dependency?h jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]r jf)r }r (hUh}r (h]h]h]h]h]uh jh]r jk)r }r (hUh}r (U anchornameU#do-i-have-to-use-amqp-rabbitmqUrefurihh]h]h]h]h]Uinternaluh j h]r hXDo I have to use AMQP/RabbitMQ?r r }r (hXDo I have to use AMQP/RabbitMQ?h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh jh]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#is-celery-multi-lingualUrefurihh]h]h]h]h]Uinternaluh j h]r hXIs celery multi-lingual?r r }r (hXIs celery multi-lingual?h j ubah!jsubah!jtubah!jubeh!jubeh!jubja)r }r (hUh}r (h]h]h]h]h]uh jh]r (jf)r }r (hUh}r! (h]h]h]h]h]uh j h]r" jk)r# }r$ (hUh}r% (U anchornameU#troubleshootingUrefurihh]h]h]h]h]Uinternaluh j h]r& hXTroubleshootingr' r( }r) (hXTroubleshootingh j# ubah!jsubah!jtubj\)r* }r+ (hUh}r, (h]h]h]h]h]uh j h]r- (ja)r. }r/ (hUh}r0 (h]h]h]h]h]uh j* h]r1 jf)r2 }r3 (hUh}r4 (h]h]h]h]h]uh j. h]r5 jk)r6 }r7 (hUh}r8 (U anchornameU0#mysql-is-throwing-deadlock-errors-what-can-i-doUrefurihh]h]h]h]h]Uinternaluh j2 h]r9 hX1MySQL is throwing deadlock errors, what can I do?r: r; }r< (hX1MySQL is throwing deadlock errors, what can I do?h j6 ubah!jsubah!jtubah!jubja)r= }r> (hUh}r? (h]h]h]h]h]uh j* h]r@ jf)rA }rB (hUh}rC (h]h]h]h]h]uh j= h]rD jk)rE }rF (hUh}rG (U anchornameU+#celeryd-is-not-doing-anything-just-hangingUrefurihh]h]h]h]h]Uinternaluh jA h]rH hX+celeryd is not doing anything, just hangingrI rJ }rK (hX+celeryd is not doing anything, just hangingh jE ubah!jsubah!jtubah!jubja)rL }rM (hUh}rN (h]h]h]h]h]uh j* h]rO jf)rP }rQ (hUh}rR (h]h]h]h]h]uh jL h]rS jk)rT }rU (hUh}rV (U anchornameU-#why-is-task-delay-apply-celeryd-just-hangingUrefurihh]h]h]h]h]Uinternaluh jP h]rW hX.Why is Task.delay/apply*/celeryd just hanging?rX rY }rZ (hX/Why is Task.delay/apply\*/celeryd just hanging?h jT ubah!jsubah!jtubah!jubja)r[ }r\ (hUh}r] (h]h]h]h]h]uh j* h]r^ jf)r_ }r` (hUh}ra (h]h]h]h]h]uh j[ h]rb jk)rc }rd (hUh}re (U anchornameU!#why-won-t-celeryd-run-on-freebsdUrefurihh]h]h]h]h]Uinternaluh j_ h]rf hX!Why won't celeryd run on FreeBSD?rg rh }ri (hX!Why won't celeryd run on FreeBSD?h jc ubah!jsubah!jtubah!jubja)rj }rk (hUh}rl (h]h]h]h]h]uh j* h]rm jf)rn }ro (hUh}rp (h]h]h]h]h]uh jj h]rq jk)rr }rs (hUh}rt (U anchornameU3#i-m-having-integrityerror-duplicate-key-errors-whyUrefurihh]h]h]h]h]Uinternaluh jn h]ru (hX I'm having rv rw }rx (hX I'm having h jr ubcdocutils.nodes literal ry )rz }r{ (hX!``IntegrityError: Duplicate Key``h}r| (h]h]h]h]h]uh jr h]r} hXIntegrityError: Duplicate Keyr~ r }r (hUh jz ubah!Uliteralr ubhX errors. Why?r r }r (hX errors. Why?h jr ubeh!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j* h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#why-aren-t-my-tasks-processedUrefurihh]h]h]h]h]Uinternaluh j h]r hXWhy aren't my tasks processed?r r }r (hXWhy aren't my tasks processed?h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j* h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#why-won-t-my-task-runUrefurihh]h]h]h]h]Uinternaluh j h]r hXWhy won't my Task run?r r }r (hXWhy won't my Task run?h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j* h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#why-won-t-my-periodic-task-runUrefurihh]h]h]h]h]Uinternaluh j h]r hXWhy won't my Periodic Task run?r r }r (hXWhy won't my Periodic Task run?h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j* h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU##how-do-i-discard-all-waiting-tasksUrefurihh]h]h]h]h]Uinternaluh j h]r hX#How do I discard all waiting tasks?r r }r (hX#How do I discard all waiting tasks?h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j* h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameUG#i-ve-discarded-messages-but-there-are-still-messages-left-in-the-queueUrefurihh]h]h]h]h]Uinternaluh j h]r hXHI've discarded messages, but there are still messages left in the queue?r r }r (hXHI've discarded messages, but there are still messages left in the queue?h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j* h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU2#windows-the-b-beat-option-to-celeryd-doesn-t-workUrefurihh]h]h]h]h]Uinternaluh j h]r (hX Windows: The r r }r (hX Windows: The h j ubjy )r }r (hX``-B``h}r (h]h]h]h]h]uh j h]r hX-Br r }r (hUh j ubah!j ubhX / r r }r (hX / h j ubjy )r }r (hX ``--beat``h}r (h]h]h]h]h]uh j h]r hX--beatr r }r (hUh j ubah!j ubhX option to celeryd doesn't work?r r }r (hX option to celeryd doesn't work?h j ubeh!jsubah!jtubah!jubeh!jubeh!jubja)r }r (hUh}r (h]h]h]h]h]uh jh]r (jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#tasksUrefurihh]h]h]h]h]Uinternaluh j h]r hXTasksr r }r (hXTasksh j ubah!jsubah!jtubj\)r }r (hUh}r (h]h]h]h]h]uh j h]r (ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU8#how-can-i-reuse-the-same-connection-when-applying-tasksUrefurihh]h]h]h]h]Uinternaluh j h]r hX8How can I reuse the same connection when applying tasks?r r }r (hX8How can I reuse the same connection when applying tasks?h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#can-i-execute-a-task-by-nameUrefurihh]h]h]h]h]Uinternaluh j h]r hXCan I execute a task by name?r! r" }r# (hXCan I execute a task by name?h j ubah!jsubah!jtubah!jubeh!jubeh!jubja)r$ }r% (hUh}r& (h]h]h]h]h]uh jh]r' (jf)r( }r) (hUh}r* (h]h]h]h]h]uh j$ h]r+ jk)r, }r- (hUh}r. (U anchornameU#resultsUrefurihh]h]h]h]h]Uinternaluh j( h]r/ hXResultsr0 r1 }r2 (hXResultsh j, ubah!jsubah!jtubj\)r3 }r4 (hUh}r5 (h]h]h]h]h]uh j$ h]r6 ja)r7 }r8 (hUh}r9 (h]h]h]h]h]uh j3 h]r: jf)r; }r< (hUh}r= (h]h]h]h]h]uh j7 h]r> jk)r? }r@ (hUh}rA (U anchornameUF#how-dow-i-get-the-result-of-a-task-if-i-have-the-id-that-points-thereUrefurihh]h]h]h]h]Uinternaluh j; h]rB hXFHow dow I get the result of a task if I have the ID that points there?rC rD }rE (hXFHow dow I get the result of a task if I have the ID that points there?h j? ubah!jsubah!jtubah!jubah!jubeh!jubja)rF }rG (hUh}rH (h]h]h]h]h]uh jh]rI (jf)rJ }rK (hUh}rL (h]h]h]h]h]uh jF h]rM jk)rN }rO (hUh}rP (U anchornameU#brokersUrefurihh]h]h]h]h]Uinternaluh jJ h]rQ hXBrokersrR rS }rT (hXBrokersh jN ubah!jsubah!jtubj\)rU }rV (hUh}rW (h]h]h]h]h]uh jF h]rX (ja)rY }rZ (hUh}r[ (h]h]h]h]h]uh jU h]r\ jf)r] }r^ (hUh}r_ (h]h]h]h]h]uh jY h]r` jk)ra }rb (hUh}rc (U anchornameU#why-is-rabbitmq-crashingUrefurihh]h]h]h]h]Uinternaluh j] h]rd hXWhy is RabbitMQ crashing?re rf }rg (hXWhy is RabbitMQ crashing?h ja ubah!jsubah!jtubah!jubja)rh }ri (hUh}rj (h]h]h]h]h]uh jU h]rk jf)rl }rm (hUh}rn (h]h]h]h]h]uh jh h]ro jk)rp }rq (hUh}rr (U anchornameU%#can-i-use-celery-with-activemq-stompUrefurihh]h]h]h]h]Uinternaluh jl h]rs hX%Can I use celery with ActiveMQ/STOMP?rt ru }rv (hX%Can I use celery with ActiveMQ/STOMP?h jp ubah!jsubah!jtubah!jubja)rw }rx (hUh}ry (h]h]h]h]h]uh jU h]rz jf)r{ }r| (hUh}r} (h]h]h]h]h]uh jw h]r~ jk)r }r (hUh}r (U anchornameU1#what-features-are-not-supported-when-using-stompUrefurihh]h]h]h]h]Uinternaluh j{ h]r hX1What features are not supported when using STOMP?r r }r (hX1What features are not supported when using STOMP?h j ubah!jsubah!jtubah!jubeh!jubeh!jubja)r }r (hUh}r (h]h]h]h]h]uh jh]r (jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU #featuresUrefurihh]h]h]h]h]Uinternaluh j h]r hXFeaturesr r }r (hXFeaturesh j ubah!jsubah!jtubj\)r }r (hUh}r (h]h]h]h]h]uh j h]r (ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU4#how-can-i-run-a-task-once-another-task-has-finishedUrefurihh]h]h]h]h]Uinternaluh j h]r hX4How can I run a task once another task has finished?r r }r (hX4How can I run a task once another task has finished?h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU%#can-i-cancel-the-execution-of-a-taskUrefurihh]h]h]h]h]Uinternaluh j h]r hX%Can I cancel the execution of a task?r r }r (hX%Can I cancel the execution of a task?h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU>#why-aren-t-my-remote-control-commands-received-by-all-workersUrefurihh]h]h]h]h]Uinternaluh j h]r hX>Why aren't my remote control commands received by all workers?r r }r (hX>Why aren't my remote control commands received by all workers?h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU+#can-i-send-some-tasks-to-only-some-serversUrefurihh]h]h]h]h]Uinternaluh j h]r hX+Can I send some tasks to only some servers?r r }r (hX+Can I send some tasks to only some servers?h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU #can-i-use-celery-without-djangoUrefurihh]h]h]h]h]Uinternaluh j h]r hX Can I use celery without Django?r r }r (hX Can I use celery without Django?h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU!#the-celery-test-suite-is-failingUrefurihh]h]h]h]h]Uinternaluh j h]r hX The celery test-suite is failingr r }r (hX The celery test-suite is failingh j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU8#can-i-change-the-interval-of-a-periodic-task-at-runtimeUrefurihh]h]h]h]h]Uinternaluh j h]r hX8Can I change the interval of a periodic task at runtime?r r }r (hX8Can I change the interval of a periodic task at runtime?h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU$#does-celery-support-task-prioritiesUrefurihh]h]h]h]h]Uinternaluh j h]r hX$Does celery support task priorities?r r }r (hX$Does celery support task priorities?h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU #should-i-use-retry-or-acks-lateUrefurihh]h]h]h]h]Uinternaluh j h]r hX Should I use retry or acks_late?r r }r (hX Should I use retry or acks_late?h j ubah!jsubah!jtubah!jubja)r }r! (hUh}r" (h]h]h]h]h]uh j h]r# jf)r$ }r% (hUh}r& (h]h]h]h]h]uh j h]r' jk)r( }r) (hUh}r* (U anchornameX#module-celery.task.baseUrefurihh]h]h]h]h]Uinternaluh j$ h]r+ hX3Can I schedule tasks to execute at a specific time?r, r- }r. (hX3Can I schedule tasks to execute at a specific time?h j( ubah!jsubah!jtubah!jubja)r/ }r0 (hUh}r1 (h]h]h]h]h]uh j h]r2 jf)r3 }r4 (hUh}r5 (h]h]h]h]h]uh j/ h]r6 jk)r7 }r8 (hUh}r9 (U anchornameU"#how-do-i-shut-down-celeryd-safelyUrefurihh]h]h]h]h]Uinternaluh j3 h]r: (hXHow do I shut down r; r< }r= (hXHow do I shut down h j7 ubjy )r> }r? (hX ``celeryd``h}r@ (h]h]h]h]h]uh j7 h]rA hXcelerydrB rC }rD (hUh j> ubah!j ubhX safely?rE rF }rG (hX safely?h j7 ubeh!jsubah!jtubah!jubja)rH }rI (hUh}rJ (h]h]h]h]h]uh j h]rK jf)rL }rM (hUh}rN (h]h]h]h]h]uh jH h]rO jk)rP }rQ (hUh}rR (U anchornameU3#how-do-i-run-celeryd-in-the-background-on-platformUrefurihh]h]h]h]h]Uinternaluh jL h]rS hX5How do I run celeryd in the background on [platform]?rT rU }rV (hX5How do I run celeryd in the background on [platform]?h jP ubah!jsubah!jtubah!jubeh!jubeh!jubja)rW }rX (hUh}rY (h]h]h]h]h]uh jh]rZ (jf)r[ }r\ (hUh}r] (h]h]h]h]h]uh jW h]r^ jk)r_ }r` (hUh}ra (U anchornameU#djangoUrefurihh]h]h]h]h]Uinternaluh j[ h]rb hXDjangorc rd }re (hXDjangoh j_ ubah!jsubah!jtubj\)rf }rg (hUh}rh (h]h]h]h]h]uh jW h]ri ja)rj }rk (hUh}rl (h]h]h]h]h]uh jf h]rm jf)rn }ro (hUh}rp (h]h]h]h]h]uh jj h]rq jk)rr }rs (hUh}rt (U anchornameUI#generating-a-template-in-a-task-doesn-t-seem-to-respect-my-i18n-settingsUrefurihh]h]h]h]h]Uinternaluh jn h]ru hXIGenerating a template in a task doesn't seem to respect my i18n settings?rv rw }rx (hXIGenerating a template in a task doesn't seem to respect my i18n settings?h jr ubah!jsubah!jtubah!jubah!jubeh!jubeh!jubeh!jubah!jubhj\)ry }rz (hUh}r{ (h]h]h]h]h]uh]r| ja)r} }r~ (hUh}r (h]h]h]h]h]uh jy h]r (jf)r }r (hUh}r (h]h]h]h]h]uh j} h]r jk)r }r (hUh}r (U anchornameUUrefurihh]h]h]h]h]Uinternaluh j h]r hXHTTP Callback Tasks (Webhooks)r r }r (hhh j ubah!jsubah!jtubj\)r }r (hUh}r (h]h]h]h]h]uh j} h]r ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU #executing-tasks-on-a-web-serverUrefurihh]h]h]h]h]Uinternaluh j h]r hXExecuting tasks on a web serverr r }r (hXExecuting tasks on a web serverh j ubah!jsubah!jtubah!jubah!jubeh!jubah!jubhj\)r }r (hUh}r (h]h]h]h]h]uh]r ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameUUrefurihh]h]h]h]h]Uinternaluh j h]r hX#Executable Jobs - celery.worker.jobr r }r (hhh j ubah!jsubah!jtubah!jubah!jubhj\)r }r (hUh}r (h]h]h]h]h]uh]r ja)r }r (hUh}r (h]h]h]h]h]uh j h]r (jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameUUrefurihh]h]h]h]h]Uinternaluh j h]r hXBroker Installationr r }r (hhh j ubah!jsubah!jtubj\)r }r (hUh}r (h]h]h]h]h]uh j h]r (ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#installing-rabbitmqUrefurihh]h]h]h]h]Uinternaluh j h]r hXInstalling RabbitMQr r }r (hXInstalling RabbitMQh j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#setting-up-rabbitmqUrefurihh]h]h]h]h]Uinternaluh j h]r hXSetting up RabbitMQr r }r (hXSetting up RabbitMQh j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r (jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#installing-rabbitmq-on-os-xUrefurihh]h]h]h]h]Uinternaluh j h]r hXInstalling RabbitMQ on OS Xr r }r (hXInstalling RabbitMQ on OS Xh j ubah!jsubah!jtubj\)r }r (hUh}r (h]h]h]h]h]uh j h]r (ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU #configuring-the-system-hostnameUrefurihh]h]h]h]h]Uinternaluh j h]r hXConfiguring the system hostnamer r }r (hXConfiguring the system hostnameh j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU&#starting-stopping-the-rabbitmq-serverUrefurihh]h]h]h]h]Uinternaluh j h]r hX%Starting/Stopping the RabbitMQ serverr r }r (hX%Starting/Stopping the RabbitMQ serverh j ubah!jsubah!jtubah!jubeh!jubeh!jubeh!jubeh!jubah!jubhj\)r }r (hUh}r (h]h]h]h]h]uh]r ja)r }r (hUh}r (h]h]h]h]h]uh j h]r (jf)r }r! (hUh}r" (h]h]h]h]h]uh j h]r# jk)r$ }r% (hUh}r& (U anchornameUUrefurihh]h]h]h]h]Uinternaluh j h]r' hXHow To Installr( r) }r* (hhh j$ ubah!jsubah!jtubj\)r+ }r, (hUh}r- (h]h]h]h]h]uh j h]r. (ja)r/ }r0 (hUh}r1 (h]h]h]h]h]uh j+ h]r2 jf)r3 }r4 (hUh}r5 (h]h]h]h]h]uh j/ h]r6 jk)r7 }r8 (hUh}r9 (U anchornameU#install-in-sphinxUrefurihh]h]h]h]h]Uinternaluh j3 h]r: hXInstall in Sphinxr; r< }r= (hXInstall in Sphinxh j7 ubah!jsubah!jtubah!jubja)r> }r? (hUh}r@ (h]h]h]h]h]uh j+ h]rA jf)rB }rC (hUh}rD (h]h]h]h]h]uh j> h]rE jk)rF }rG (hUh}rH (U anchornameU#install-somewhere-elseUrefurihh]h]h]h]h]Uinternaluh jB h]rI hXInstall Somewhere ElserJ rK }rL (hXInstall Somewhere Elseh jF ubah!jsubah!jtubah!jubja)rM }rN (hUh}rO (h]h]h]h]h]uh j+ h]rP jf)rQ }rR (hUh}rS (h]h]h]h]h]uh jM h]rT jk)rU }rV (hUh}rW (U anchornameU'#install-directly-in-your-documentationUrefurihh]h]h]h]h]Uinternaluh jQ h]rX hX&Install Directly in Your DocumentationrY rZ }r[ (hX&Install Directly in Your Documentationh jU ubah!jsubah!jtubah!jubja)r\ }r] (hUh}r^ (h]h]h]h]h]uh j+ h]r_ jf)r` }ra (hUh}rb (h]h]h]h]h]uh j\ h]rc jk)rd }re (hUh}rf (U anchornameU#making-sphinx-use-the-themeUrefurihh]h]h]h]h]Uinternaluh j` h]rg hXMaking Sphinx Use the Themerh ri }rj (hXMaking Sphinx Use the Themeh jd ubah!jsubah!jtubah!jubja)rk }rl (hUh}rm (h]h]h]h]h]uh j+ h]rn jf)ro }rp (hUh}rq (h]h]h]h]h]uh jk h]rr jk)rs }rt (hUh}ru (U anchornameU #screen-shotsUrefurihh]h]h]h]h]Uinternaluh jo h]rv hX Screen Shotsrw rx }ry (hX Screen Shotsh js ubah!jsubah!jtubah!jubja)rz }r{ (hUh}r| (h]h]h]h]h]uh j+ h]r} jf)r~ }r (hUh}r (h]h]h]h]h]uh jz h]r jk)r }r (hUh}r (U anchornameU#to-doUrefurihh]h]h]h]h]Uinternaluh j~ h]r hXTo Dor r }r (hXTo Doh j ubah!jsubah!jtubah!jubeh!jubeh!jubah!jubhj\)r }r (hUh}r (h]h]h]h]h]uh]r ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameUUrefurihh]h]h]h]h]Uinternaluh j h]r hXSignals - celery.signalsr r }r (hhh j ubah!jsubah!jtubah!jubah!jubhj\)r }r (hUh}r (h]h]h]h]h]uh]r ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameUUrefurihh]h]h]h]h]Uinternaluh j h]r hX Executing Tasks - celery.executer r }r (hhh j ubah!jsubah!jtubah!jubah!jubhj\)r }r (hUh}r (h]h]h]h]h]uh]r ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameUUrefurihh]h]h]h]h]Uinternaluh j h]r hX'Django Model Managers - celery.managersr r }r (hhh j ubah!jsubah!jtubah!jubah!jubhj\)r }r (hUh}r (h]h]h]h]h]uh]r ja)r }r (hUh}r (h]h]h]h]h]uh j h]r (jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameUUrefurihh]h]h]h]h]Uinternaluh j h]r hXChange historyr r }r (hhh j ubah!jsubah!jtubj\)r }r (hUh}r (h]h]h]h]h]uh j h]r (ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU #a-m-cestUrefurihh]h]h]h]h]Uinternaluh j h]r hX!1.0.6 [2010-06-30 09:57 A.M CEST]r r }r (hX!1.0.6 [2010-06-30 09:57 A.M CEST]r h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r (jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU #p-m-cestUrefurihh]h]h]h]h]Uinternaluh j h]r hX!1.0.5 [2010-06-01 02:36 P.M CEST]r r }r (hX!1.0.5 [2010-06-01 02:36 P.M CEST]r h j ubah!jsubah!jtubj\)r }r (hUh}r (h]h]h]h]h]uh j h]r (ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU #criticalUrefurihh]h]h]h]h]Uinternaluh j h]r hXCriticalr r }r (hXCriticalr h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#changesUrefurihh]h]h]h]h]Uinternaluh j h]r hXChangesr r }r (hXChangesr h j ubah!jsubah!jtubah!jubeh!jubeh!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r! }r" (hUh}r# (h]h]h]h]h]uh j h]r$ jk)r% }r& (hUh}r' (U anchornameU#id1Urefurihh]h]h]h]h]Uinternaluh j! h]r( hX!1.0.4 [2010-05-31 09:54 A.M CEST]r) r* }r+ (hX!1.0.4 [2010-05-31 09:54 A.M CEST]r, h j% ubah!jsubah!jtubah!jubja)r- }r. (hUh}r/ (h]h]h]h]h]uh j h]r0 (jf)r1 }r2 (hUh}r3 (h]h]h]h]h]uh j- h]r4 jk)r5 }r6 (hUh}r7 (U anchornameU#id2Urefurihh]h]h]h]h]Uinternaluh j1 h]r8 hX!1.0.3 [2010-05-15 03:00 P.M CEST]r9 r: }r; (hX!1.0.3 [2010-05-15 03:00 P.M CEST]r< h j5 ubah!jsubah!jtubj\)r= }r> (hUh}r? (h]h]h]h]h]uh j- h]r@ (ja)rA }rB (hUh}rC (h]h]h]h]h]uh j= h]rD jf)rE }rF (hUh}rG (h]h]h]h]h]uh jA h]rH jk)rI }rJ (hUh}rK (U anchornameU#important-notesUrefurihh]h]h]h]h]Uinternaluh jE h]rL hXImportant notesrM rN }rO (hXImportant notesrP h jI ubah!jsubah!jtubah!jubja)rQ }rR (hUh}rS (h]h]h]h]h]uh j= h]rT jf)rU }rV (hUh}rW (h]h]h]h]h]uh jQ h]rX jk)rY }rZ (hUh}r[ (U anchornameU#newsUrefurihh]h]h]h]h]Uinternaluh jU h]r\ hXNewsr] r^ }r_ (hXNewsr` h jY ubah!jsubah!jtubah!jubja)ra }rb (hUh}rc (h]h]h]h]h]uh j= h]rd jf)re }rf (hUh}rg (h]h]h]h]h]uh ja h]rh jk)ri }rj (hUh}rk (U anchornameU#remote-control-commandsUrefurihh]h]h]h]h]Uinternaluh je h]rl hXRemote control commandsrm rn }ro (hXRemote control commandsrp h ji ubah!jsubah!jtubah!jubja)rq }rr (hUh}rs (h]h]h]h]h]uh j= h]rt jf)ru }rv (hUh}rw (h]h]h]h]h]uh jq h]rx jk)ry }rz (hUh}r{ (U anchornameU#fixesUrefurihh]h]h]h]h]Uinternaluh ju h]r| hXFixesr} r~ }r (hXFixesr h jy ubah!jsubah!jtubah!jubeh!jubeh!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#p-m-cetUrefurihh]h]h]h]h]Uinternaluh j h]r hX 1.0.2 [2010-03-31 12:50 P.M CET]r r }r (hX 1.0.2 [2010-03-31 12:50 P.M CET]r h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#id3Urefurihh]h]h]h]h]Uinternaluh j h]r hX 1.0.1 [2010-02-24 07:05 P.M CET]r r }r (hX 1.0.1 [2010-02-24 07:05 P.M CET]r h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r (jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#id4Urefurihh]h]h]h]h]Uinternaluh j h]r hX 1.0.0 [2010-02-10 04:00 P.M CET]r r }r (hX 1.0.0 [2010-02-10 04:00 P.M CET]r h j ubah!jsubah!jtubj\)r }r (hUh}r (h]h]h]h]h]uh j h]r (ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#backward-incompatible-changesUrefurihh]h]h]h]h]Uinternaluh j h]r hXBACKWARD INCOMPATIBLE CHANGESr r }r (hXBACKWARD INCOMPATIBLE CHANGESr h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU #deprecationsUrefurihh]h]h]h]h]Uinternaluh j h]r hX DEPRECATIONSr r }r (hX DEPRECATIONSr h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#id5Urefurihh]h]h]h]h]Uinternaluh j h]r hXNEWSr r }r (hXNEWSr h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#id6Urefurihh]h]h]h]h]Uinternaluh j h]r hXCHANGESr r }r (hXCHANGESr h j ubah!jsubah!jtubah!jubja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#bugsUrefurihh]h]h]h]h]Uinternaluh j h]rhXBUGSrr}r(hXBUGSrh j ubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r }r (hUh}r (h]h]h]h]h]uh jh]r jk)r }r(hUh}r(U anchornameU#documentationUrefurihh]h]h]h]h]Uinternaluh j h]rhX DOCUMENTATIONrr}r(hX DOCUMENTATIONrh j ubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id7Urefurihh]h]h]h]h]Uinternaluh jh]r hX!0.8.4 [2010-02-05 01:52 P.M CEST]r!r"}r#(hX!0.8.4 [2010-02-05 01:52 P.M CEST]r$h jubah!jsubah!jtubah!jubja)r%}r&(hUh}r'(h]h]h]h]h]uh j h]r(jf)r)}r*(hUh}r+(h]h]h]h]h]uh j%h]r,jk)r-}r.(hUh}r/(U anchornameU#id8Urefurihh]h]h]h]h]Uinternaluh j)h]r0hX!0.8.3 [2009-12-22 09:43 A.M CEST]r1r2}r3(hX!0.8.3 [2009-12-22 09:43 A.M CEST]r4h j-ubah!jsubah!jtubah!jubja)r5}r6(hUh}r7(h]h]h]h]h]uh j h]r8jf)r9}r:(hUh}r;(h]h]h]h]h]uh j5h]r<jk)r=}r>(hUh}r?(U anchornameU#id9Urefurihh]h]h]h]h]Uinternaluh j9h]r@hX!0.8.2 [2009-11-20 03:40 P.M CEST]rArB}rC(hX!0.8.2 [2009-11-20 03:40 P.M CEST]rDh j=ubah!jsubah!jtubah!jubeh!jubeh!jubja)rE}rF(hUh}rG(h]h]h]h]h]uh j h]rH(jf)rI}rJ(hUh}rK(h]h]h]h]h]uh jEh]rLjk)rM}rN(hUh}rO(U anchornameU#id10Urefurihh]h]h]h]h]Uinternaluh jIh]rPhX!0.8.1 [2009-11-16 05:21 P.M CEST]rQrR}rS(hX!0.8.1 [2009-11-16 05:21 P.M CEST]rTh jMubah!jsubah!jtubj\)rU}rV(hUh}rW(h]h]h]h]h]uh jEh]rX(ja)rY}rZ(hUh}r[(h]h]h]h]h]uh jUh]r\jf)r]}r^(hUh}r_(h]h]h]h]h]uh jYh]r`jk)ra}rb(hUh}rc(U anchornameU#very-important-noteUrefurihh]h]h]h]h]Uinternaluh j]h]rdhXVERY IMPORTANT NOTErerf}rg(hXVERY IMPORTANT NOTErhh jaubah!jsubah!jtubah!jubja)ri}rj(hUh}rk(h]h]h]h]h]uh jUh]rljf)rm}rn(hUh}ro(h]h]h]h]h]uh jih]rpjk)rq}rr(hUh}rs(U anchornameU#important-changesUrefurihh]h]h]h]h]Uinternaluh jmh]rthXIMPORTANT CHANGESrurv}rw(hXIMPORTANT CHANGESrxh jqubah!jsubah!jtubah!jubja)ry}rz(hUh}r{(h]h]h]h]h]uh jUh]r|jf)r}}r~(hUh}r(h]h]h]h]h]uh jyh]rjk)r}r(hUh}r(U anchornameU#id11Urefurihh]h]h]h]h]Uinternaluh j}h]rhXCHANGESrr}r(hXCHANGESrh jubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id12Urefurihh]h]h]h]h]Uinternaluh jh]rhX!0.8.0 [2009-09-22 03:06 P.M CEST]rr}r(hX!0.8.0 [2009-09-22 03:06 P.M CEST]rh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id13Urefurihh]h]h]h]h]Uinternaluh jh]rhXBACKWARD INCOMPATIBLE CHANGESrr}r(hXBACKWARD INCOMPATIBLE CHANGESrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id14Urefurihh]h]h]h]h]Uinternaluh jh]rhXIMPORTANT CHANGESrr}r(hXIMPORTANT CHANGESrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id15Urefurihh]h]h]h]h]Uinternaluh jh]rhXNEWSrr}r(hXNEWSrh jubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#a-m-cetUrefurihh]h]h]h]h]Uinternaluh jh]rhX 0.6.0 [2009-08-07 06:54 A.M CET]rr}r(hX 0.6.0 [2009-08-07 06:54 A.M CET]rh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id16Urefurihh]h]h]h]h]Uinternaluh jh]rhXIMPORTANT CHANGESrr}r(hXIMPORTANT CHANGESrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id17Urefurihh]h]h]h]h]Uinternaluh jh]rhXNEWSrr}r(hXNEWSrh jubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r }r (hUh}r (U anchornameU#id18Urefurihh]h]h]h]h]Uinternaluh jh]r hX 0.4.1 [2009-07-02 01:42 P.M CET]r r}r(hX 0.4.1 [2009-07-02 01:42 P.M CET]rh j ubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id19Urefurihh]h]h]h]h]Uinternaluh jh]rhX 0.4.0 [2009-07-01 07:29 P.M CET]rr}r(hX 0.4.0 [2009-07-01 07:29 P.M CET]r h jubah!jsubah!jtubah!jubja)r!}r"(hUh}r#(h]h]h]h]h]uh j h]r$(jf)r%}r&(hUh}r'(h]h]h]h]h]uh j!h]r(jk)r)}r*(hUh}r+(U anchornameU#id20Urefurihh]h]h]h]h]Uinternaluh j%h]r,hX!0.3.20 [2009-06-25 08:42 P.M CET]r-r.}r/(hX!0.3.20 [2009-06-25 08:42 P.M CET]r0h j)ubah!jsubah!jtubj\)r1}r2(hUh}r3(h]h]h]h]h]uh j!h]r4ja)r5}r6(hUh}r7(h]h]h]h]h]uh j1h]r8jf)r9}r:(hUh}r;(h]h]h]h]h]uh j5h]r<jk)r=}r>(hUh}r?(U anchornameU#id21Urefurihh]h]h]h]h]Uinternaluh j9h]r@hX 0.3.7 [2008-06-16 11:41 P.M CET]rArB}rC(hX 0.3.7 [2008-06-16 11:41 P.M CET]rDh j=ubah!jsubah!jtubah!jubah!jubeh!jubja)rE}rF(hUh}rG(h]h]h]h]h]uh j h]rHjf)rI}rJ(hUh}rK(h]h]h]h]h]uh jEh]rLjk)rM}rN(hUh}rO(U anchornameU#id22Urefurihh]h]h]h]h]Uinternaluh jIh]rPhX 0.3.3 [2009-06-08 01:07 P.M CET]rQrR}rS(hX 0.3.3 [2009-06-08 01:07 P.M CET]rTh jMubah!jsubah!jtubah!jubja)rU}rV(hUh}rW(h]h]h]h]h]uh j h]rXjf)rY}rZ(hUh}r[(h]h]h]h]h]uh jUh]r\jk)r]}r^(hUh}r_(U anchornameU#id23Urefurihh]h]h]h]h]Uinternaluh jYh]r`hX 0.3.2 [2009-06-08 01:07 P.M CET]rarb}rc(hX 0.3.2 [2009-06-08 01:07 P.M CET]rdh j]ubah!jsubah!jtubah!jubja)re}rf(hUh}rg(h]h]h]h]h]uh j h]rhjf)ri}rj(hUh}rk(h]h]h]h]h]uh jeh]rljk)rm}rn(hUh}ro(U anchornameU#id24Urefurihh]h]h]h]h]Uinternaluh jih]rphX 0.3.1 [2009-06-08 01:07 P.M CET]rqrr}rs(hX 0.3.1 [2009-06-08 01:07 P.M CET]rth jmubah!jsubah!jtubah!jubja)ru}rv(hUh}rw(h]h]h]h]h]uh j h]rxjf)ry}rz(hUh}r{(h]h]h]h]h]uh juh]r|jk)r}}r~(hUh}r(U anchornameU#id25Urefurihh]h]h]h]h]Uinternaluh jyh]rhX 0.3.0 [2009-06-08 12:41 P.M CET]rr}r(hX 0.3.0 [2009-06-08 12:41 P.M CET]rh j}ubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id26Urefurihh]h]h]h]h]Uinternaluh jh]rhX 0.2.0 [2009-05-20 05:14 P.M CET]rr}r(hX 0.2.0 [2009-05-20 05:14 P.M CET]rh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#pre3-2009-05-20-05-14-p-m-cetUrefurihh]h]h]h]h]Uinternaluh jh]rhX%0.2.0-pre3 [2009-05-20 05:14 P.M CET]rr}r(hX%0.2.0-pre3 [2009-05-20 05:14 P.M CET]rh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#pre2-2009-05-20-01-56-p-m-cetUrefurihh]h]h]h]h]Uinternaluh jh]rhX%0.2.0-pre2 [2009-05-20 01:56 P.M CET]rr}r(hX%0.2.0-pre2 [2009-05-20 01:56 P.M CET]rh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#pre1-2009-05-20-12-33-p-m-cetUrefurihh]h]h]h]h]Uinternaluh jh]rhX%0.2.0-pre1 [2009-05-20 12:33 P.M CET]rr}r(hX%0.2.0-pre1 [2009-05-20 12:33 P.M CET]rh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id27Urefurihh]h]h]h]h]Uinternaluh jh]rhX!0.1.15 [2009-05-19 04:13 P.M CET]rr}r(hX!0.1.15 [2009-05-19 04:13 P.M CET]rh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id28Urefurihh]h]h]h]h]Uinternaluh jh]rhX!0.1.14 [2009-05-19 01:08 P.M CET]rr}r(hX!0.1.14 [2009-05-19 01:08 P.M CET]rh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id29Urefurihh]h]h]h]h]Uinternaluh jh]rhX!0.1.13 [2009-05-19 12:36 P.M CET]rr}r(hX!0.1.13 [2009-05-19 12:36 P.M CET]rh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id30Urefurihh]h]h]h]h]Uinternaluh jh]rhX!0.1.12 [2009-05-18 04:38 P.M CET]rr}r(hX!0.1.12 [2009-05-18 04:38 P.M CET]rh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r }r (hUh}r (h]h]h]h]h]uh jh]r jk)r }r(hUh}r(U anchornameU#id31Urefurihh]h]h]h]h]Uinternaluh j h]rhX!0.1.11 [2009-05-12 02:08 P.M CET]rr}r(hX!0.1.11 [2009-05-12 02:08 P.M CET]rh j ubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id32Urefurihh]h]h]h]h]Uinternaluh jh]r hX!0.1.10 [2009-05-11 12:46 P.M CET]r!r"}r#(hX!0.1.10 [2009-05-11 12:46 P.M CET]r$h jubah!jsubah!jtubah!jubja)r%}r&(hUh}r'(h]h]h]h]h]uh j h]r(jf)r)}r*(hUh}r+(h]h]h]h]h]uh j%h]r,jk)r-}r.(hUh}r/(U anchornameU#id33Urefurihh]h]h]h]h]Uinternaluh j)h]r0hX 0.1.8 [2009-05-07 12:27 P.M CET]r1r2}r3(hX 0.1.8 [2009-05-07 12:27 P.M CET]r4h j-ubah!jsubah!jtubah!jubja)r5}r6(hUh}r7(h]h]h]h]h]uh j h]r8jf)r9}r:(hUh}r;(h]h]h]h]h]uh j5h]r<jk)r=}r>(hUh}r?(U anchornameU#id34Urefurihh]h]h]h]h]Uinternaluh j9h]r@hX0.1.7 [2009-04-30 1:50 P.M CET]rArB}rC(hX0.1.7 [2009-04-30 1:50 P.M CET]rDh j=ubah!jsubah!jtubah!jubja)rE}rF(hUh}rG(h]h]h]h]h]uh j h]rHjf)rI}rJ(hUh}rK(h]h]h]h]h]uh jEh]rLjk)rM}rN(hUh}rO(U anchornameU#id35Urefurihh]h]h]h]h]Uinternaluh jIh]rPhX0.1.6 [2009-04-28 2:13 P.M CET]rQrR}rS(hX0.1.6 [2009-04-28 2:13 P.M CET]rTh jMubah!jsubah!jtubah!jubja)rU}rV(hUh}rW(h]h]h]h]h]uh j h]rXjf)rY}rZ(hUh}r[(h]h]h]h]h]uh jUh]r\jk)r]}r^(hUh}r_(U anchornameU#id36Urefurihh]h]h]h]h]Uinternaluh jYh]r`hX 0.1.0 [2009-04-24 11:28 A.M CET]rarb}rc(hX 0.1.0 [2009-04-24 11:28 A.M CET]rdh j]ubah!jsubah!jtubah!jubeh!jubeh!jubah!jubhj\)re}rf(hUh}rg(h]h]h]h]h]uh]rhja)ri}rj(hUh}rk(h]h]h]h]h]uh jeh]rljf)rm}rn(hUh}ro(h]h]h]h]h]uh jih]rpjk)rq}rr(hUh}rs(U anchornameUUrefurihh]h]h]h]h]Uinternaluh jmh]rthXTask Result - celery.resultrurv}rw(hhh jqubah!jsubah!jtubah!jubah!jubhj\)rx}ry(hUh}rz(h]h]h]h]h]uh]r{ja)r|}r}(hUh}r~(h]h]h]h]h]uh jxh]r(jf)r}r(hUh}r(h]h]h]h]h]uh j|h]rjk)r}r(hUh}r(U anchornameUUrefurihh]h]h]h]h]Uinternaluh jh]rhX:Tutorial: Creating a click counter using carrot and celeryrr}r(hjh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh j|h]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #introductionUrefurihh]h]h]h]h]Uinternaluh jh]rhX Introductionrr}r(hX Introductionrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #the-modelUrefurihh]h]h]h]h]Uinternaluh jh]rhX The modelrr}r(hX The modelrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU(#using-carrot-to-send-clicks-as-messagesUrefurihh]h]h]h]h]Uinternaluh jh]rhX'Using carrot to send clicks as messagesrr}r(hX'Using carrot to send clicks as messagesrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#view-and-urlsUrefurihh]h]h]h]h]Uinternaluh jh]rhX View and URLsrr}r(hX View and URLsrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#creating-the-periodic-taskUrefurihh]h]h]h]h]Uinternaluh jh]rhXCreating the periodic taskrr}r(hXCreating the periodic taskrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #finishingUrefurihh]h]h]h]h]Uinternaluh jh]rhX Finishingrr}r(hX Finishingrh jubah!jsubah!jtubah!jubeh!jubeh!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]rhXConfiguration - celery.confrr}r(hj h jubah!jsubah!jtubah!jubah!jubj j\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]r jf)r }r (hUh}r (h]h]h]h]h]uh jh]r jk)r}r(hUh}r(U anchornameUUrefurij h]h]h]h]h]Uinternaluh j h]rhX2Remote Management of Workers - celery.task.controlrr}r(hjh jubah!jsubah!jtubah!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]r jk)r!}r"(hUh}r#(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]r$hXBackends - celery.backendsr%r&}r'(hjh j!ubah!jsubah!jtubah!jubah!jubjj\)r(}r)(hUh}r*(h]h]h]h]h]uh]r+ja)r,}r-(hUh}r.(h]h]h]h]h]uh j(h]r/jf)r0}r1(hUh}r2(h]h]h]h]h]uh j,h]r3jk)r4}r5(hUh}r6(U anchornameUUrefurijh]h]h]h]h]Uinternaluh j0h]r7hX!Defining Tasks - celery.task.baser8r9}r:(hj'h j4ubah!jsubah!jtubah!jubah!jubj(j\)r;}r<(hUh}r=(h]h]h]h]h]uh]r>ja)r?}r@(hUh}rA(h]h]h]h]h]uh j;h]rBjf)rC}rD(hUh}rE(h]h]h]h]h]uh j?h]rFjk)rG}rH(hUh}rI(U anchornameUUrefurij(h]h]h]h]h]Uinternaluh jCh]rJhX1Contrib: Test runner - celery.contrib.test_runnerrKrL}rM(hj0h jGubah!jsubah!jtubah!jubah!jubj1j\)rN}rO(hUh}rP(h]h]h]h]h]uh]rQja)rR}rS(hUh}rT(h]h]h]h]h]uh jNh]rUjf)rV}rW(hUh}rX(h]h]h]h]h]uh jRh]rYjk)rZ}r[(hUh}r\(U anchornameUUrefurij1h]h]h]h]h]Uinternaluh jVh]r]hX&Datastructures - celery.datastructuresr^r_}r`(hj9h jZubah!jsubah!jtubah!jubah!jubj:j\)ra}rb(hUh}rc(h]h]h]h]h]uh]rdja)re}rf(hUh}rg(h]h]h]h]h]uh jah]rhjf)ri}rj(hUh}rk(h]h]h]h]h]uh jeh]rljk)rm}rn(hUh}ro(U anchornameUUrefurij:h]h]h]h]h]Uinternaluh jih]rphX)Celery Initialize - celery.bin.celeryinitrqrr}rs(hjBh jmubah!jsubah!jtubah!jubah!jubjCj\)rt}ru(hUh}rv(h]h]h]h]h]uh]rwja)rx}ry(hUh}rz(h]h]h]h]h]uh jth]r{(jf)r|}r}(hUh}r~(h]h]h]h]h]uh jxh]rjk)r}r(hUh}r(U anchornameUUrefurijCh]h]h]h]h]Uinternaluh j|h]rhXCelery - Distributed Task Queuerr}r(hjKh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jxh]r(j)r}r(hUh}r(UnumberedKUparentjCU titlesonlyUglobh]h]h]h]h]Uentries]r(NjrNjrNjrNjrNjrNjrNjrNjrNjrNjreUhiddenUmaxdepthKU includefiles]r(jjjjjjjjjjeU includehiddenuh jh]h!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#indices-and-tablesUrefurijCh]h]h]h]h]Uinternaluh jh]rhXIndices and tablesrr}r(hXIndices and tablesh jubah!jsubah!jtubah!jubeh!jubeh!jubah!jubjLj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijLh]h]h]h]h]Uinternaluh jh]rhXFirst steps with Celeryrr}r(hjTh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#creating-a-simple-taskUrefurijLh]h]h]h]h]Uinternaluh jh]rhXCreating a simple taskrr}r(hXCreating a simple taskh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#configurationUrefurijLh]h]h]h]h]Uinternaluh jh]rhX Configurationrr}r(hX Configurationh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU!#running-the-celery-worker-serverUrefurijLh]h]h]h]h]Uinternaluh jh]rhX Running the celery worker serverrr}r(hX Running the celery worker serverh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#executing-the-taskUrefurijLh]h]h]h]h]Uinternaluh jh]rhXExecuting the taskrr}r(hXExecuting the taskh jubah!jsubah!jtubah!jubeh!jubeh!jubah!jubjUj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r (hUh}r (U anchornameUUrefurijUh]h]h]h]h]Uinternaluh jh]r hXExceptions - celery.exceptionsr r }r(hj]h jubah!jsubah!jtubah!jubah!jubj^j\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurij^h]h]h]h]h]Uinternaluh jh]rhXMessaging - celery.messagingrr }r!(hjfh jubah!jsubah!jtubah!jubah!jubjgj\)r"}r#(hUh}r$(h]h]h]h]h]uh]r%ja)r&}r'(hUh}r((h]h]h]h]h]uh j"h]r)jf)r*}r+(hUh}r,(h]h]h]h]h]uh j&h]r-jk)r.}r/(hUh}r0(U anchornameUUrefurijgh]h]h]h]h]Uinternaluh j*h]r1hX+Worker Revoked Tasks - celery.worker.revoker2r3}r4(hjoh j.ubah!jsubah!jtubah!jubah!jubjpj\)r5}r6(hUh}r7(h]h]h]h]h]uh]r8ja)r9}r:(hUh}r;(h]h]h]h]h]uh j5h]r<(jf)r=}r>(hUh}r?(h]h]h]h]h]uh j9h]r@jk)rA}rB(hUh}rC(U anchornameUUrefurijph]h]h]h]h]Uinternaluh j=h]rDhX TutorialsrErF}rG(hjxh jAubah!jsubah!jtubj\)rH}rI(hUh}rJ(h]h]h]h]h]uh j9h]rKj)rL}rM(hUh}rN(UnumberedKUparentjpU titlesonlyUglobh]h]h]h]h]Uentries]rO(Nj.rPNj/rQNj0rReUhiddenUmaxdepthKU includefiles]rS(j.j/j0eU includehiddenuh jHh]h!jubah!jubeh!jubah!jubjyj\)rT}rU(hUh}rV(h]h]h]h]h]uh]rWja)rX}rY(hUh}rZ(h]h]h]h]h]uh jTh]r[(jf)r\}r](hUh}r^(h]h]h]h]h]uh jXh]r_jk)r`}ra(hUh}rb(U anchornameUUrefurijyh]h]h]h]h]Uinternaluh j\h]rchX Module Indexrdre}rf(hjh j`ubah!jsubah!jtubj\)rg}rh(hUh}ri(h]h]h]h]h]uh jXh]rj(ja)rk}rl(hUh}rm(h]h]h]h]h]uh jgh]rn(jf)ro}rp(hUh}rq(h]h]h]h]h]uh jkh]rrjk)rs}rt(hUh}ru(U anchornameU#workerUrefurijyh]h]h]h]h]Uinternaluh joh]rvhXWorkerrwrx}ry(hXWorkerh jsubah!jsubah!jtubj\)rz}r{(hUh}r|(h]h]h]h]h]uh jkh]r}(ja)r~}r(hUh}r(h]h]h]h]h]uh jzh]rjf)r}r(hUh}r(h]h]h]h]h]uh j~h]rjk)r}r(hUh}r(U anchornameU#celery-workerUrefurijyh]h]h]h]h]Uinternaluh jh]rhX celery.workerrr}r(hX celery.workerh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jzh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-worker-jobUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.worker.jobrr}r(hXcelery.worker.jobh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jzh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-worker-poolUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.worker.poolrr}r(hXcelery.worker.poolh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jzh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-worker-listenerUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.worker.listenerrr}r(hXcelery.worker.listenerh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jzh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-worker-controllersUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.worker.controllersrr}r(hXcelery.worker.controllersh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jzh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-worker-schedulerUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.worker.schedulerrr}r(hXcelery.worker.schedulerh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jzh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-worker-bucketsUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.worker.bucketsrr}r(hXcelery.worker.bucketsh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jzh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-worker-heartbeatUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.worker.heartbeatrr}r(hXcelery.worker.heartbeath jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jzh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-worker-revokeUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.worker.revokerr}r(hXcelery.worker.revokeh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jzh]rjf)r }r (hUh}r (h]h]h]h]h]uh jh]r jk)r }r(hUh}r(U anchornameU#celery-worker-controlUrefurijyh]h]h]h]h]Uinternaluh j h]rhXcelery.worker.controlrr}r(hXcelery.worker.controlh j ubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jgh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#tasksUrefurijyh]h]h]h]h]Uinternaluh jh]rhXTasksr r!}r"(hXTasksh jubah!jsubah!jtubj\)r#}r$(hUh}r%(h]h]h]h]h]uh jh]r&(ja)r'}r((hUh}r)(h]h]h]h]h]uh j#h]r*jf)r+}r,(hUh}r-(h]h]h]h]h]uh j'h]r.jk)r/}r0(hUh}r1(U anchornameU#celery-decoratorsUrefurijyh]h]h]h]h]Uinternaluh j+h]r2hXcelery.decoratorsr3r4}r5(hXcelery.decoratorsh j/ubah!jsubah!jtubah!jubja)r6}r7(hUh}r8(h]h]h]h]h]uh j#h]r9jf)r:}r;(hUh}r<(h]h]h]h]h]uh j6h]r=jk)r>}r?(hUh}r@(U anchornameU#celery-registryUrefurijyh]h]h]h]h]Uinternaluh j:h]rAhXcelery.registryrBrC}rD(hXcelery.registryh j>ubah!jsubah!jtubah!jubja)rE}rF(hUh}rG(h]h]h]h]h]uh j#h]rHjf)rI}rJ(hUh}rK(h]h]h]h]h]uh jEh]rLjk)rM}rN(hUh}rO(U anchornameU #celery-taskUrefurijyh]h]h]h]h]Uinternaluh jIh]rPhX celery.taskrQrR}rS(hX celery.taskh jMubah!jsubah!jtubah!jubja)rT}rU(hUh}rV(h]h]h]h]h]uh j#h]rWjf)rX}rY(hUh}rZ(h]h]h]h]h]uh jTh]r[jk)r\}r](hUh}r^(U anchornameU#celery-task-baseUrefurijyh]h]h]h]h]Uinternaluh jXh]r_hXcelery.task.baser`ra}rb(hXcelery.task.baseh j\ubah!jsubah!jtubah!jubja)rc}rd(hUh}re(h]h]h]h]h]uh j#h]rfjf)rg}rh(hUh}ri(h]h]h]h]h]uh jch]rjjk)rk}rl(hUh}rm(U anchornameU#celery-task-httpUrefurijyh]h]h]h]h]Uinternaluh jgh]rnhXcelery.task.httprorp}rq(hXcelery.task.httph jkubah!jsubah!jtubah!jubja)rr}rs(hUh}rt(h]h]h]h]h]uh j#h]rujf)rv}rw(hUh}rx(h]h]h]h]h]uh jrh]ryjk)rz}r{(hUh}r|(U anchornameU#celery-task-restUrefurijyh]h]h]h]h]Uinternaluh jvh]r}hXcelery.task.restr~r}r(hXcelery.task.resth jzubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j#h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-task-controlUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.task.controlrr}r(hXcelery.task.controlh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j#h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-task-builtinsUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.task.builtinsrr}r(hXcelery.task.builtinsh jubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jgh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #executionUrefurijyh]h]h]h]h]Uinternaluh jh]rhX Executionrr}r(hX Executionh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-executeUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.executerr}r(hXcelery.executeh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-execute-traceUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.execute.tracerr}r(hXcelery.execute.traceh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-resultUrefurijyh]h]h]h]h]Uinternaluh jh]rhX celery.resultrr}r(hX celery.resulth jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-statesUrefurijyh]h]h]h]h]Uinternaluh jh]rhX celery.statesrr}r(hX celery.statesh jubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jgh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #messagingUrefurijyh]h]h]h]h]Uinternaluh jh]rhX Messagingrr}r(hX Messagingh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r }r (hUh}r (U anchornameU#celery-messagingUrefurijyh]h]h]h]h]Uinternaluh jh]r hXcelery.messagingr r}r(hXcelery.messagingh j ubah!jsubah!jtubah!jubah!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jgh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#django-specificUrefurijyh]h]h]h]h]Uinternaluh jh]rhXDjango-specificrr}r(hXDjango-specifich jubah!jsubah!jtubj\)r}r (hUh}r!(h]h]h]h]h]uh jh]r"(ja)r#}r$(hUh}r%(h]h]h]h]h]uh jh]r&jf)r'}r((hUh}r)(h]h]h]h]h]uh j#h]r*jk)r+}r,(hUh}r-(U anchornameU#celery-modelsUrefurijyh]h]h]h]h]Uinternaluh j'h]r.hX celery.modelsr/r0}r1(hX celery.modelsh j+ubah!jsubah!jtubah!jubja)r2}r3(hUh}r4(h]h]h]h]h]uh jh]r5jf)r6}r7(hUh}r8(h]h]h]h]h]uh j2h]r9jk)r:}r;(hUh}r<(U anchornameU#celery-managersUrefurijyh]h]h]h]h]Uinternaluh j6h]r=hXcelery.managersr>r?}r@(hXcelery.managersh j:ubah!jsubah!jtubah!jubja)rA}rB(hUh}rC(h]h]h]h]h]uh jh]rDjf)rE}rF(hUh}rG(h]h]h]h]h]uh jAh]rHjk)rI}rJ(hUh}rK(U anchornameU #celery-viewsUrefurijyh]h]h]h]h]Uinternaluh jEh]rLhX celery.viewsrMrN}rO(hX celery.viewsh jIubah!jsubah!jtubah!jubja)rP}rQ(hUh}rR(h]h]h]h]h]uh jh]rSjf)rT}rU(hUh}rV(h]h]h]h]h]uh jPh]rWjk)rX}rY(hUh}rZ(U anchornameU #celery-urlsUrefurijyh]h]h]h]h]Uinternaluh jTh]r[hX celery.urlsr\r]}r^(hX celery.urlsh jXubah!jsubah!jtubah!jubeh!jubeh!jubja)r_}r`(hUh}ra(h]h]h]h]h]uh jgh]rb(jf)rc}rd(hUh}re(h]h]h]h]h]uh j_h]rfjk)rg}rh(hUh}ri(U anchornameU#result-backendsUrefurijyh]h]h]h]h]Uinternaluh jch]rjhXResult backendsrkrl}rm(hXResult backendsh jgubah!jsubah!jtubj\)rn}ro(hUh}rp(h]h]h]h]h]uh j_h]rq(ja)rr}rs(hUh}rt(h]h]h]h]h]uh jnh]rujf)rv}rw(hUh}rx(h]h]h]h]h]uh jrh]ryjk)rz}r{(hUh}r|(U anchornameU#celery-backendsUrefurijyh]h]h]h]h]Uinternaluh jvh]r}hXcelery.backendsr~r}r(hXcelery.backendsh jzubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jnh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-backends-baseUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.backends.baserr}r(hXcelery.backends.baseh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jnh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-backends-amqpUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.backends.amqprr}r(hXcelery.backends.amqph jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jnh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-backends-databaseUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.backends.databaserr}r(hXcelery.backends.databaseh jubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jgh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#loadersUrefurijyh]h]h]h]h]Uinternaluh jh]rhXLoadersrr}r(hXLoadersh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-loadersUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.loadersrr}r(hXcelery.loadersh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU(#celery-loaders-base-loader-base-classesUrefurijyh]h]h]h]h]Uinternaluh jh]rhX)celery.loaders.base - Loader base classesrr}r(hX)celery.loaders.base - Loader base classesh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU*#celery-loaders-default-the-default-loaderUrefurijyh]h]h]h]h]Uinternaluh jh]rhX+celery.loaders.default - The default loaderrr}r(hX+celery.loaders.default - The default loaderh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU+#celery-loaders-djangoapp-the-django-loaderUrefurijyh]h]h]h]h]Uinternaluh jh]rhX,celery.loaders.djangoapp - The Django loaderrr}r(hX,celery.loaders.djangoapp - The Django loaderh jubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jgh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #celerybeatUrefurijyh]h]h]h]h]Uinternaluh jh]rhX CeleryBeatr r }r (hX CeleryBeath jubah!jsubah!jtubj\)r }r (hUh}r(h]h]h]h]h]uh jh]rja)r}r(hUh}r(h]h]h]h]h]uh j h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #celery-beatUrefurijyh]h]h]h]h]Uinternaluh jh]rhX celery.beatrr}r(hX celery.beath jubah!jsubah!jtubah!jubah!jubeh!jubja)r}r (hUh}r!(h]h]h]h]h]uh jgh]r"(jf)r#}r$(hUh}r%(h]h]h]h]h]uh jh]r&jk)r'}r((hUh}r)(U anchornameU#eventsUrefurijyh]h]h]h]h]Uinternaluh j#h]r*hXEventsr+r,}r-(hXEventsh j'ubah!jsubah!jtubj\)r.}r/(hUh}r0(h]h]h]h]h]uh jh]r1ja)r2}r3(hUh}r4(h]h]h]h]h]uh j.h]r5jf)r6}r7(hUh}r8(h]h]h]h]h]uh j2h]r9jk)r:}r;(hUh}r<(U anchornameU#celery-eventsUrefurijyh]h]h]h]h]Uinternaluh j6h]r=hX celery.eventsr>r?}r@(hX celery.eventsh j:ubah!jsubah!jtubah!jubah!jubeh!jubja)rA}rB(hUh}rC(h]h]h]h]h]uh jgh]rD(jf)rE}rF(hUh}rG(h]h]h]h]h]uh jAh]rHjk)rI}rJ(hUh}rK(U anchornameU#loggingUrefurijyh]h]h]h]h]Uinternaluh jEh]rLhXLoggingrMrN}rO(hXLoggingh jIubah!jsubah!jtubj\)rP}rQ(hUh}rR(h]h]h]h]h]uh jAh]rS(ja)rT}rU(hUh}rV(h]h]h]h]h]uh jPh]rWjf)rX}rY(hUh}rZ(h]h]h]h]h]uh jTh]r[jk)r\}r](hUh}r^(U anchornameU #celery-logUrefurijyh]h]h]h]h]Uinternaluh jXh]r_hX celery.logr`ra}rb(hX celery.logh j\ubah!jsubah!jtubah!jubja)rc}rd(hUh}re(h]h]h]h]h]uh jPh]rfjf)rg}rh(hUh}ri(h]h]h]h]h]uh jch]rjjk)rk}rl(hUh}rm(U anchornameU#celery-utils-patchUrefurijyh]h]h]h]h]Uinternaluh jgh]rnhXcelery.utils.patchrorp}rq(hXcelery.utils.patchh jkubah!jsubah!jtubah!jubeh!jubeh!jubja)rr}rs(hUh}rt(h]h]h]h]h]uh jgh]ru(jf)rv}rw(hUh}rx(h]h]h]h]h]uh jrh]ryjk)rz}r{(hUh}r|(U anchornameU#configurationUrefurijyh]h]h]h]h]Uinternaluh jvh]r}hX Configurationr~r}r(hX Configurationh jzubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jrh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #celery-confUrefurijyh]h]h]h]h]Uinternaluh jh]rhX celery.confrr}r(hX celery.confh jubah!jsubah!jtubah!jubah!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jgh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#miscellaneousUrefurijyh]h]h]h]h]Uinternaluh jh]rhX Miscellaneousrr}r(hX Miscellaneoush jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-datastructuresUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.datastructuresrr}r(hXcelery.datastructuresh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-exceptionsUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.exceptionsrr}r(hXcelery.exceptionsh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-platformUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.platformrr}r(hXcelery.platformh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #celery-utilsUrefurijyh]h]h]h]h]Uinternaluh jh]rhX celery.utilsrr}r(hX celery.utilsh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-utils-infoUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.utils.inforr}r(hXcelery.utils.infoh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celery-utils-compatUrefurijyh]h]h]h]h]Uinternaluh jh]rhXcelery.utils.compatrr}r(hXcelery.utils.compath jubah!jsubah!jtubah!jubeh!jubeh!jubeh!jubeh!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r }r (hUh}r (h]h]h]h]h]uh jh]r jk)r }r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh j h]rhX(Backend: Redis - celery.backends.pyredisrr}r(hjh j ubah!jsubah!jtubah!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r }r!(hUh}r"(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]r#hXDjango Models - celery.modelsr$r%}r&(hjh j ubah!jsubah!jtubah!jubah!jubjj\)r'}r((hUh}r)(h]h]h]h]h]uh]r*ja)r+}r,(hUh}r-(h]h]h]h]h]uh j'h]r.jf)r/}r0(hUh}r1(h]h]h]h]h]uh j+h]r2jk)r3}r4(hUh}r5(U anchornameUUrefurijh]h]h]h]h]Uinternaluh j/h]r6hX3Contrib: Abortable tasks - celery.contrib.abortabler7r8}r9(hjh j3ubah!jsubah!jtubah!jubah!jubjj\)r:}r;(hUh}r<(h]h]h]h]h]uh]r=ja)r>}r?(hUh}r@(h]h]h]h]h]uh j:h]rAjf)rB}rC(hUh}rD(h]h]h]h]h]uh j>h]rEjk)rF}rG(hUh}rH(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jBh]rIhX3Celery Periodic Task Server - celery.bin.celerybeatrJrK}rL(hjh jFubah!jsubah!jtubah!jubah!jubjj\)rM}rN(hUh}rO(h]h]h]h]h]uh]rPja)rQ}rR(hUh}rS(h]h]h]h]h]uh jMh]rTjf)rU}rV(hUh}rW(h]h]h]h]h]uh jQh]rXjk)rY}rZ(hUh}r[(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jUh]r\hX4Token Bucket (rate limiting) - celery.worker.bucketsr]r^}r_(hjh jYubah!jsubah!jtubah!jubah!jubjj\)r`}ra(hUh}rb(h]h]h]h]h]uh]rcja)rd}re(hUh}rf(h]h]h]h]h]uh j`h]rg(jf)rh}ri(hUh}rj(h]h]h]h]h]uh jdh]rkjk)rl}rm(hUh}rn(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jhh]rohXConfiguration and defaultsrprq}rr(hjh jlubah!jsubah!jtubj\)rs}rt(hUh}ru(h]h]h]h]h]uh jdh]rv(ja)rw}rx(hUh}ry(h]h]h]h]h]uh jsh]rzjf)r{}r|(hUh}r}(h]h]h]h]h]uh jwh]r~jk)r}r(hUh}r(U anchornameU#example-configuration-fileUrefurijh]h]h]h]h]Uinternaluh j{h]rhXExample configuration filerr}r(hXExample configuration fileh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jsh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#concurrency-settingsUrefurijh]h]h]h]h]Uinternaluh jh]rhXConcurrency settingsrr}r(hXConcurrency settingsh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jsh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#task-result-backend-settingsUrefurijh]h]h]h]h]Uinternaluh jh]rhXTask result backend settingsrr}r(hXTask result backend settingsh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jsh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#database-backend-settingsUrefurijh]h]h]h]h]Uinternaluh jh]rhXDatabase backend settingsrr}r(hXDatabase backend settingsh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#example-configurationUrefurijh]h]h]h]h]Uinternaluh jh]rhXExample configurationrr}r(hXExample configurationh jubah!jsubah!jtubah!jubah!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jsh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#amqp-backend-settingsUrefurijh]h]h]h]h]Uinternaluh jh]rhXAMQP backend settingsrr}r(hXAMQP backend settingsh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id1Urefurijh]h]h]h]h]Uinternaluh jh]rhXExample configurationrr}r(hXExample configurationh jubah!jsubah!jtubah!jubah!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jsh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#cache-backend-settingsUrefurijh]h]h]h]h]Uinternaluh jh]rhXCache backend settingsrr}r(hXCache backend settingsh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id2Urefurijh]h]h]h]h]Uinternaluh jh]rhXExample configurationrr}r (hXExample configurationh jubah!jsubah!jtubah!jubah!jubeh!jubja)r }r (hUh}r (h]h]h]h]h]uh jsh]r (jf)r}r(hUh}r(h]h]h]h]h]uh j h]rjk)r}r(hUh}r(U anchornameU#tokyo-tyrant-backend-settingsUrefurijh]h]h]h]h]Uinternaluh jh]rhXTokyo Tyrant backend settingsrr}r(hXTokyo Tyrant backend settingsh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh j h]rja)r}r(hUh}r(h]h]h]h]h]uh jh]r jf)r!}r"(hUh}r#(h]h]h]h]h]uh jh]r$jk)r%}r&(hUh}r'(U anchornameU#id3Urefurijh]h]h]h]h]Uinternaluh j!h]r(hXExample configurationr)r*}r+(hXExample configurationh j%ubah!jsubah!jtubah!jubah!jubeh!jubja)r,}r-(hUh}r.(h]h]h]h]h]uh jsh]r/(jf)r0}r1(hUh}r2(h]h]h]h]h]uh j,h]r3jk)r4}r5(hUh}r6(U anchornameU#redis-backend-settingsUrefurijh]h]h]h]h]Uinternaluh j0h]r7hXRedis backend settingsr8r9}r:(hXRedis backend settingsh j4ubah!jsubah!jtubj\)r;}r<(hUh}r=(h]h]h]h]h]uh j,h]r>ja)r?}r@(hUh}rA(h]h]h]h]h]uh j;h]rBjf)rC}rD(hUh}rE(h]h]h]h]h]uh j?h]rFjk)rG}rH(hUh}rI(U anchornameU#id4Urefurijh]h]h]h]h]Uinternaluh jCh]rJhXExample configurationrKrL}rM(hXExample configurationh jGubah!jsubah!jtubah!jubah!jubeh!jubja)rN}rO(hUh}rP(h]h]h]h]h]uh jsh]rQ(jf)rR}rS(hUh}rT(h]h]h]h]h]uh jNh]rUjk)rV}rW(hUh}rX(U anchornameU#mongodb-backend-settingsUrefurijh]h]h]h]h]Uinternaluh jRh]rYhXMongoDB backend settingsrZr[}r\(hXMongoDB backend settingsh jVubah!jsubah!jtubj\)r]}r^(hUh}r_(h]h]h]h]h]uh jNh]r`ja)ra}rb(hUh}rc(h]h]h]h]h]uh j]h]rdjf)re}rf(hUh}rg(h]h]h]h]h]uh jah]rhjk)ri}rj(hUh}rk(U anchornameU#id5Urefurijh]h]h]h]h]Uinternaluh jeh]rlhXExample configurationrmrn}ro(hXExample configurationh jiubah!jsubah!jtubah!jubah!jubeh!jubja)rp}rq(hUh}rr(h]h]h]h]h]uh jsh]rs(jf)rt}ru(hUh}rv(h]h]h]h]h]uh jph]rwjk)rx}ry(hUh}rz(U anchornameU#messaging-settingsUrefurijh]h]h]h]h]Uinternaluh jth]r{hXMessaging settingsr|r}}r~(hXMessaging settingsh jxubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jph]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#routingUrefurijh]h]h]h]h]Uinternaluh jh]rhXRoutingrr}r(hXRoutingh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #connectionUrefurijh]h]h]h]h]Uinternaluh jh]rhX Connectionrr}r(hX Connectionh jubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jsh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#task-execution-settingsUrefurijh]h]h]h]h]Uinternaluh jh]rhXTask execution settingsrr}r(hXTask execution settingsh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jsh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#worker-celerydUrefurijh]h]h]h]h]Uinternaluh jh]rhXWorker: celerydrr}r(hXWorker: celerydh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#loggingUrefurijh]h]h]h]h]Uinternaluh jh]rhXLoggingrr}r(hXLoggingh jubah!jsubah!jtubah!jubah!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jsh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #periodic-task-server-celerybeatUrefurijh]h]h]h]h]Uinternaluh jh]rhX Periodic Task Server: celerybeatrr}r(hX Periodic Task Server: celerybeath jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jsh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#monitor-server-celerymonUrefurijh]h]h]h]h]Uinternaluh jh]rhXMonitor Server: celerymonrr}r(hXMonitor Server: celerymonh jubah!jsubah!jtubah!jubeh!jubeh!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]rhX*Python Compatibility - celery.utils.compatrr}r(hjh jubah!jsubah!jtubah!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r (h]h]h]h]h]uh jh]r jf)r }r (hUh}r (h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh j h]rhXTask Registry - celery.registryrr}r(hjh jubah!jsubah!jtubah!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r (h]h]h]h]h]uh jh]r!jk)r"}r#(hUh}r$(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]r%hXRunning celeryd as a daemonr&r'}r((hjh j"ubah!jsubah!jtubj\)r)}r*(hUh}r+(h]h]h]h]h]uh jh]r,(ja)r-}r.(hUh}r/(h]h]h]h]h]uh j)h]r0jf)r1}r2(hUh}r3(h]h]h]h]h]uh j-h]r4jk)r5}r6(hUh}r7(U anchornameU#start-stop-daemonUrefurijh]h]h]h]h]Uinternaluh j1h]r8hXstart-stop-daemonr9r:}r;(hXstart-stop-daemonh j5ubah!jsubah!jtubah!jubja)r<}r=(hUh}r>(h]h]h]h]h]uh j)h]r?jf)r@}rA(hUh}rB(h]h]h]h]h]uh j<h]rCjk)rD}rE(hUh}rF(U anchornameU #supervisordUrefurijh]h]h]h]h]Uinternaluh j@h]rGhX supervisordrHrI}rJ(hUh jDubah!jsubah!jtubah!jubja)rK}rL(hUh}rM(h]h]h]h]h]uh j)h]rNjf)rO}rP(hUh}rQ(h]h]h]h]h]uh jKh]rRjk)rS}rT(hUh}rU(U anchornameU #launchd-os-xUrefurijh]h]h]h]h]Uinternaluh jOh]rVhXlaunchd (OS X)rWrX}rY(hXlaunchd (OS X)h jSubah!jsubah!jtubah!jubeh!jubeh!jubah!jubjj\)rZ}r[(hUh}r\(h]h]h]h]h]uh]r]ja)r^}r_(hUh}r`(h]h]h]h]h]uh jZh]ra(jf)rb}rc(hUh}rd(h]h]h]h]h]uh j^h]rejk)rf}rg(hUh}rh(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jbh]rihX External tutorials and resourcesrjrk}rl(hjh jfubah!jsubah!jtubj\)rm}rn(hUh}ro(h]h]h]h]h]uh j^h]rpja)rq}rr(hUh}rs(h]h]h]h]h]uh jmh]rt(jf)ru}rv(hUh}rw(h]h]h]h]h]uh jqh]rxjk)ry}rz(hUh}r{(U anchornameU#introduction-to-celeryUrefurijh]h]h]h]h]Uinternaluh juh]r|hXIntroduction to Celeryr}r~}r(hXIntroduction to Celeryrh jyubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jqh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#rabbitmq-celery-and-djangoUrefurijh]h]h]h]h]Uinternaluh jh]rhXRabbitMQ, Celery and Djangorr}r(hXRabbitMQ, Celery and Djangorh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU-#message-queues-django-and-celery-quick-startUrefurijh]h]h]h]h]Uinternaluh jh]rhX-Message Queues, Django and Celery Quick Startrr}r(hX-Message Queues, Django and Celery Quick Startrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU<#background-task-processing-and-deferred-execution-in-djangoUrefurijh]h]h]h]h]Uinternaluh jh]rhX;Background task processing and deferred execution in Djangorr}r(hX;Background task processing and deferred execution in Djangorh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUF#build-a-processing-queue-in-less-than-a-day-using-rabbitmq-and-celeryUrefurijh]h]h]h]h]Uinternaluh jh]rhXKBuild a processing queue [...] in less than a day using RabbitMQ and Celeryrr}r(hXKBuild a processing queue [...] in less than a day using RabbitMQ and Celeryrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU&#how-to-get-celeryd-to-work-on-freebsdUrefurijh]h]h]h]h]Uinternaluh jh]rhX%How to get celeryd to work on FreeBSDrr}r(hX%How to get celeryd to work on FreeBSDrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #web-based-3d-animation-softwareUrefurijh]h]h]h]h]Uinternaluh jh]rhXWeb-based 3D animation softwarerr}r(hXWeb-based 3D animation softwarerh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#rabbitmq-with-python-and-rubyUrefurijh]h]h]h]h]Uinternaluh jh]rhXRabbitMQ with Python and Rubyrr}r(hXRabbitMQ with Python and Rubyrh jubah!jsubah!jtubah!jubeh!jubeh!jubah!jubeh!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]rhX"Debugging Info - celery.utils.inforr}r(hjh jubah!jsubah!jtubah!jubah!jubjj\)r}r (hUh}r (h]h]h]h]h]uh]r ja)r }r (hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh j h]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]rhX)Loader Base Classes - celery.loaders.baserr}r(hjh jubah!jsubah!jtubah!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r (hUh}r!(h]h]h]h]h]uh jh]r"(jf)r#}r$(hUh}r%(h]h]h]h]h]uh jh]r&jk)r'}r((hUh}r)(U anchornameUUrefurijh]h]h]h]h]Uinternaluh j#h]r*hXHow To Installr+r,}r-(hjh j'ubah!jsubah!jtubj\)r.}r/(hUh}r0(h]h]h]h]h]uh jh]r1(ja)r2}r3(hUh}r4(h]h]h]h]h]uh j.h]r5jf)r6}r7(hUh}r8(h]h]h]h]h]uh j2h]r9jk)r:}r;(hUh}r<(U anchornameU#install-in-sphinxUrefurijh]h]h]h]h]Uinternaluh j6h]r=hXInstall in Sphinxr>r?}r@(hXInstall in Sphinxh j:ubah!jsubah!jtubah!jubja)rA}rB(hUh}rC(h]h]h]h]h]uh j.h]rDjf)rE}rF(hUh}rG(h]h]h]h]h]uh jAh]rHjk)rI}rJ(hUh}rK(U anchornameU#install-somewhere-elseUrefurijh]h]h]h]h]Uinternaluh jEh]rLhXInstall Somewhere ElserMrN}rO(hXInstall Somewhere Elseh jIubah!jsubah!jtubah!jubja)rP}rQ(hUh}rR(h]h]h]h]h]uh j.h]rSjf)rT}rU(hUh}rV(h]h]h]h]h]uh jPh]rWjk)rX}rY(hUh}rZ(U anchornameU#making-sphinx-use-the-themeUrefurijh]h]h]h]h]Uinternaluh jTh]r[hXMaking Sphinx Use the Themer\r]}r^(hXMaking Sphinx Use the Themeh jXubah!jsubah!jtubah!jubja)r_}r`(hUh}ra(h]h]h]h]h]uh j.h]rbjf)rc}rd(hUh}re(h]h]h]h]h]uh j_h]rfjk)rg}rh(hUh}ri(U anchornameU #screen-shotsUrefurijh]h]h]h]h]Uinternaluh jch]rjhX Screen Shotsrkrl}rm(hX Screen Shotsh jgubah!jsubah!jtubah!jubja)rn}ro(hUh}rp(h]h]h]h]h]uh j.h]rqjf)rr}rs(hUh}rt(h]h]h]h]h]uh jnh]rujk)rv}rw(hUh}rx(U anchornameU#to-doUrefurijh]h]h]h]h]Uinternaluh jrh]ryhXTo Dorzr{}r|(hXTo Doh jvubah!jsubah!jtubah!jubeh!jubeh!jubah!jubjj\)r}}r~(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh j}h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]rhX,Built-in Task Classes - celery.task.builtinsrr}r(hjh jubah!jsubah!jtubah!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]rhXCelery Deprecation Timelinerr}r(hjh jubah!jsubah!jtubah!jubah!jubj j\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurij h]h]h]h]h]Uinternaluh jh]rhX'Default Loader - celery.loaders.defaultrr}r(hjh jubah!jsubah!jtubah!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]rhX Resourcesrr}r(hjh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #getting-helpUrefurijh]h]h]h]h]Uinternaluh jh]rhX Getting Helprr}r(hX Getting Helph jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #mailing-listUrefurijh]h]h]h]h]Uinternaluh jh]rhX Mailing listrr}r(hX Mailing listh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#ircUrefurijh]h]h]h]h]Uinternaluh jh]rhXIRCrr}r(hXIRCh jubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #bug-trackerUrefurijh]h]h]h]h]Uinternaluh jh]r hX Bug trackerr r }r (hX Bug trackerh jubah!jsubah!jtubah!jubja)r }r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh j h]rjk)r}r(hUh}r(U anchornameU#wikiUrefurijh]h]h]h]h]Uinternaluh jh]rhXWikirr}r(hXWikih jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r }r!(hUh}r"(h]h]h]h]h]uh jh]r#jk)r$}r%(hUh}r&(U anchornameU #contributingUrefurijh]h]h]h]h]Uinternaluh j h]r'hX Contributingr(r)}r*(hX Contributingh j$ubah!jsubah!jtubah!jubja)r+}r,(hUh}r-(h]h]h]h]h]uh jh]r.jf)r/}r0(hUh}r1(h]h]h]h]h]uh j+h]r2jk)r3}r4(hUh}r5(U anchornameU#licenseUrefurijh]h]h]h]h]Uinternaluh j/h]r6hXLicenser7r8}r9(hXLicenseh j3ubah!jsubah!jtubah!jubeh!jubeh!jubah!jubjj\)r:}r;(hUh}r<(h]h]h]h]h]uh]r=ja)r>}r?(hUh}r@(h]h]h]h]h]uh j:h]rAjf)rB}rC(hUh}rD(h]h]h]h]h]uh j>h]rEjk)rF}rG(hUh}rH(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jBh]rIhX5Worker Controller Threads - celery.worker.controllersrJrK}rL(hj#h jFubah!jsubah!jtubah!jubah!jubj$j\)rM}rN(hUh}rO(h]h]h]h]h]uh]rPja)rQ}rR(hUh}rS(h]h]h]h]h]uh jMh]rTjf)rU}rV(hUh}rW(h]h]h]h]h]uh jQh]rXjk)rY}rZ(hUh}r[(U anchornameUUrefurij$h]h]h]h]h]Uinternaluh jUh]r\hX)Celery Worker Daemon - celery.bin.celerydr]r^}r_(hj,h jYubah!jsubah!jtubah!jubah!jubj-j\)r`}ra(hUh}rb(h]h]h]h]h]uh]rcja)rd}re(hUh}rf(h]h]h]h]h]uh j`h]rg(jf)rh}ri(hUh}rj(h]h]h]h]h]uh jdh]rkjk)rl}rm(hUh}rn(U anchornameUUrefurij-h]h]h]h]h]Uinternaluh jhh]rohX Introductionrprq}rr(hj5h jlubah!jsubah!jtubj\)rs}rt(hUh}ru(h]h]h]h]h]uh jdh]rv(ja)rw}rx(hUh}ry(h]h]h]h]h]uh jsh]rzjf)r{}r|(hUh}r}(h]h]h]h]h]uh jwh]r~jk)r}r(hUh}r(U anchornameU #overviewUrefurij-h]h]h]h]h]Uinternaluh j{h]rhXOverviewrr}r(hXOverviewh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jsh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#exampleUrefurij-h]h]h]h]h]Uinternaluh jh]rhXExamplerr}r(hXExampleh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jsh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #featuresUrefurij-h]h]h]h]h]Uinternaluh jh]rhXFeaturesrr}r(hXFeaturesh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jsh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#documentationUrefurij-h]h]h]h]h]Uinternaluh jh]rhX Documentationrr}r(hX Documentationh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jsh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #installationUrefurij-h]h]h]h]h]Uinternaluh jh]rhX Installationrr}r(hX Installationh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU'#downloading-and-installing-from-sourceUrefurij-h]h]h]h]h]Uinternaluh jh]rhX&Downloading and installing from sourcerr}r(hX&Downloading and installing from sourceh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#using-the-development-versionUrefurij-h]h]h]h]h]Uinternaluh jh]rhXUsing the development versionrr}r(hXUsing the development versionh jubah!jsubah!jtubah!jubeh!jubeh!jubeh!jubeh!jubah!jubj6j\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurij6h]h]h]h]h]Uinternaluh jh]rhX0Time and Date Utilities - celery.utils.timeutilsrr}r(hj>h jubah!jsubah!jtubah!jubah!jubj?j\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurij?h]h]h]h]h]Uinternaluh jh]rhXPeriodic Tasksrr}r (hjGh jubah!jsubah!jtubah!jubah!jubjHj\)r }r (hUh}r (h]h]h]h]h]uh]r ja)r}r(hUh}r(h]h]h]h]h]uh j h]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijHh]h]h]h]h]Uinternaluh jh]rhX User Guiderr}r(hjPh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r j)r!}r"(hUh}r#(UnumberedKUparentjHU titlesonlyUglobh]h]h]h]h]Uentries]r$(Nj)r%Nj*r&Nj+r'Nj,r(eUhiddenUmaxdepthKU includefiles]r)(j)j*j+j,eU includehiddenuh jh]h!jubah!jubeh!jubah!jubjQj\)r*}r+(hUh}r,(h]h]h]h]h]uh]r-ja)r.}r/(hUh}r0(h]h]h]h]h]uh j*h]r1jf)r2}r3(hUh}r4(h]h]h]h]h]uh j.h]r5jk)r6}r7(hUh}r8(U anchornameUUrefurijQh]h]h]h]h]Uinternaluh j2h]r9hX#Platform Specific - celery.platformr:r;}r<(hjYh j6ubah!jsubah!jtubah!jubah!jubjZj\)r=}r>(hUh}r?(h]h]h]h]h]uh]r@ja)rA}rB(hUh}rC(h]h]h]h]h]uh j=h]rD(jf)rE}rF(hUh}rG(h]h]h]h]h]uh jAh]rHjk)rI}rJ(hUh}rK(U anchornameUUrefurijZh]h]h]h]h]Uinternaluh jEh]rLhXList of Worker EventsrMrN}rO(hjbh jIubah!jsubah!jtubj\)rP}rQ(hUh}rR(h]h]h]h]h]uh jAh]rS(ja)rT}rU(hUh}rV(h]h]h]h]h]uh jPh]rWjf)rX}rY(hUh}rZ(h]h]h]h]h]uh jTh]r[jk)r\}r](hUh}r^(U anchornameU #task-eventsUrefurijZh]h]h]h]h]Uinternaluh jXh]r_hX Task Eventsr`ra}rb(hX Task Eventsh j\ubah!jsubah!jtubah!jubja)rc}rd(hUh}re(h]h]h]h]h]uh jPh]rfjf)rg}rh(hUh}ri(h]h]h]h]h]uh jch]rjjk)rk}rl(hUh}rm(U anchornameU#worker-eventsUrefurijZh]h]h]h]h]Uinternaluh jgh]rnhX Worker Eventsrorp}rq(hX Worker Eventsh jkubah!jsubah!jtubah!jubeh!jubeh!jubah!jubjcj\)rr}rs(hUh}rt(h]h]h]h]h]uh]ruja)rv}rw(hUh}rx(h]h]h]h]h]uh jrh]ry(jf)rz}r{(hUh}r|(h]h]h]h]h]uh jvh]r}jk)r~}r(hUh}r(U anchornameUUrefurijch]h]h]h]h]Uinternaluh jzh]rhXInternals: The workerrr}r(hjkh j~ubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jvh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#data-structuresUrefurijch]h]h]h]h]Uinternaluh jh]rhXData structuresrr}r(hXData structuresh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #ready-queueUrefurijch]h]h]h]h]Uinternaluh jh]rhX ready_queuerr}r(hX ready_queueh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #eta-scheduleUrefurijch]h]h]h]h]Uinternaluh jh]rhX eta_schedulerr}r(hX eta_scheduleh jubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #componentsUrefurijch]h]h]h]h]Uinternaluh jh]rhX Componentsrr}r(hX Componentsh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#carrotlistenerUrefurijch]h]h]h]h]Uinternaluh jh]rhXCarrotListenerrr}r(hXCarrotListenerh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#schedulecontrollerUrefurijch]h]h]h]h]Uinternaluh jh]rhXScheduleControllerrr}r(hXScheduleControllerh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #mediatorUrefurijch]h]h]h]h]Uinternaluh jh]rhXMediatorrr}r(hXMediatorh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #taskpoolUrefurijch]h]h]h]h]Uinternaluh jh]rhXTaskPoolrr}r(hXTaskPoolh jubah!jsubah!jtubah!jubeh!jubeh!jubeh!jubeh!jubah!jubjlj\)r }r (hUh}r (h]h]h]h]h]uh]r ja)r }r(hUh}r(h]h]h]h]h]uh j h]rjf)r}r(hUh}r(h]h]h]h]h]uh j h]rjk)r}r(hUh}r(U anchornameUUrefurijlh]h]h]h]h]Uinternaluh jh]rhX,Task Information and Utilities - celery.taskrr}r(hjth jubah!jsubah!jtubah!jubah!jubjuj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r }r!(hUh}r"(h]h]h]h]h]uh jh]r#jf)r$}r%(hUh}r&(h]h]h]h]h]uh j h]r'jk)r(}r)(hUh}r*(U anchornameUUrefurijuh]h]h]h]h]Uinternaluh j$h]r+hXTask Pool - celery.worker.poolr,r-}r.(hj}h j(ubah!jsubah!jtubah!jubah!jubj~j\)r/}r0(hUh}r1(h]h]h]h]h]uh]r2ja)r3}r4(hUh}r5(h]h]h]h]h]uh j/h]r6jf)r7}r8(hUh}r9(h]h]h]h]h]uh j3h]r:jk)r;}r<(hUh}r=(U anchornameUUrefurij~h]h]h]h]h]Uinternaluh j7h]r>hX&Backend: Cache - celery.backends.cacher?r@}rA(hjh j;ubah!jsubah!jtubah!jubah!jubjj\)rB}rC(hUh}rD(h]h]h]h]h]uh]rEja)rF}rG(hUh}rH(h]h]h]h]h]uh jBh]rIjf)rJ}rK(hUh}rL(h]h]h]h]h]uh jFh]rMjk)rN}rO(hUh}rP(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jJh]rQhXEvents - celery.eventsrRrS}rT(hjh jNubah!jsubah!jtubah!jubah!jubjj\)rU}rV(hUh}rW(h]h]h]h]h]uh]rXja)rY}rZ(hUh}r[(h]h]h]h]h]uh jUh]r\jf)r]}r^(hUh}r_(h]h]h]h]h]uh jYh]r`jk)ra}rb(hUh}rc(U anchornameUUrefurijh]h]h]h]h]Uinternaluh j]h]rdhX&Worker Control - celery.worker.controlrerf}rg(hjh jaubah!jsubah!jtubah!jubah!jubjj\)rh}ri(hUh}rj(h]h]h]h]h]uh]rkja)rl}rm(hUh}rn(h]h]h]h]h]uh jhh]ro(jf)rp}rq(hUh}rr(h]h]h]h]h]uh jlh]rsjk)rt}ru(hUh}rv(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jph]rwhXInteresting Linksrxry}rz(hjh jtubah!jsubah!jtubj\)r{}r|(hUh}r}(h]h]h]h]h]uh jlh]r~(ja)r}r(hUh}r(h]h]h]h]h]uh j{h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#celeryUrefurijh]h]h]h]h]Uinternaluh jh]rhXceleryrr}r(hXceleryh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j{h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#amqpUrefurijh]h]h]h]h]Uinternaluh jh]rhXAMQPrr}r(hXAMQPh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh j{h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #rabbitmqUrefurijh]h]h]h]h]Uinternaluh jh]rhXRabbitMQrr}r(hXRabbitMQh jubah!jsubah!jtubah!jubeh!jubeh!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]rhX,Backend: Database - celery.backends.databaserr}r(hjh jubah!jsubah!jtubah!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]rhXInternal Module Referencerr}r(hjh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]rj)r}r(hUh}r(UnumberedKUparentjU titlesonlyUglobh]h]h]h]h]Uentries]r(Nj2rNj3rNj4rNj5rNj6rNj7rNj8rNj9rNj:rNj;rNj<rNj=rNj>rNj?rNj@rNjArNjBrNjCrNjDrNjErNjFrNjGrNjHrNjIrNjJrNjKrNjLrNjMrNjNrNjOrNjPrNjQreUhiddenUmaxdepthKU includefiles]r(j2j3j4j5j6j7j8j9j:j;j<j=j>j?j@jAjBjCjDjEjFjGjHjIjJjKjLjMjNjOjPjQeU includehiddenuh jh]h!jubah!jubeh!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r (U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]r hX*Compatibility Patches - celery.utils.patchr r }r (hjh jubah!jsubah!jtubah!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]rhX Routing Tasksrr}r (hjh jubah!jsubah!jtubj\)r!}r"(hUh}r#(h]h]h]h]h]uh jh]r$ja)r%}r&(hUh}r'(h]h]h]h]h]uh j!h]r((jf)r)}r*(hUh}r+(h]h]h]h]h]uh j%h]r,jk)r-}r.(hUh}r/(U anchornameU #amqp-primerUrefurijh]h]h]h]h]Uinternaluh j)h]r0hX AMQP Primerr1r2}r3(hX AMQP Primerr4h j-ubah!jsubah!jtubj\)r5}r6(hUh}r7(h]h]h]h]h]uh j%h]r8(ja)r9}r:(hUh}r;(h]h]h]h]h]uh j5h]r<jf)r=}r>(hUh}r?(h]h]h]h]h]uh j9h]r@jk)rA}rB(hUh}rC(U anchornameU #messagesUrefurijh]h]h]h]h]Uinternaluh j=h]rDhXMessagesrErF}rG(hXMessagesrHh jAubah!jsubah!jtubah!jubja)rI}rJ(hUh}rK(h]h]h]h]h]uh j5h]rLjf)rM}rN(hUh}rO(h]h]h]h]h]uh jIh]rPjk)rQ}rR(hUh}rS(U anchornameU #producers-consumers-and-brokersUrefurijh]h]h]h]h]Uinternaluh jMh]rThX Producers, consumers and brokersrUrV}rW(hX Producers, consumers and brokersrXh jQubah!jsubah!jtubah!jubja)rY}rZ(hUh}r[(h]h]h]h]h]uh j5h]r\jf)r]}r^(hUh}r_(h]h]h]h]h]uh jYh]r`jk)ra}rb(hUh}rc(U anchornameU"#exchanges-queues-and-routing-keysUrefurijh]h]h]h]h]Uinternaluh j]h]rdhX#Exchanges, queues and routing keys.rerf}rg(hX#Exchanges, queues and routing keys.rhh jaubah!jsubah!jtubah!jubja)ri}rj(hUh}rk(h]h]h]h]h]uh j5h]rl(jf)rm}rn(hUh}ro(h]h]h]h]h]uh jih]rpjk)rq}rr(hUh}rs(U anchornameU#exchange-typesUrefurijh]h]h]h]h]Uinternaluh jmh]rthXExchange typesrurv}rw(hXExchange typesrxh jqubah!jsubah!jtubj\)ry}rz(hUh}r{(h]h]h]h]h]uh jih]r|(ja)r}}r~(hUh}r(h]h]h]h]h]uh jyh]rjf)r}r(hUh}r(h]h]h]h]h]uh j}h]rjk)r}r(hUh}r(U anchornameU#direct-exchangesUrefurijh]h]h]h]h]Uinternaluh jh]rhXDirect exchangesrr}r(hXDirect exchangesrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jyh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#topic-exchangesUrefurijh]h]h]h]h]Uinternaluh jh]rhXTopic exchangesrr}r(hXTopic exchangesrh jubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh j5h]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#related-api-commandsUrefurijh]h]h]h]h]Uinternaluh jh]rhXRelated API commandsrr}r(hXRelated API commandsrh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUI#exchange-declare-exchange-name-type-passive-durable-auto-delete-internalUrefurijh]h]h]h]h]Uinternaluh jh]rhXNexchange.declare(exchange_name, type, passive, durable, auto_delete, internal)rr}r(hXNexchange.declare(exchange_name, type, passive, durable, auto_delete, internal)rh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU?#queue-declare-queue-name-passive-durable-exclusive-auto-deleteUrefurijh]h]h]h]h]Uinternaluh jh]rhXCqueue.declare(queue_name, passive, durable, exclusive, auto_delete)rr}r(hXCqueue.declare(queue_name, passive, durable, exclusive, auto_delete)rh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU0#queue-bind-queue-name-exchange-name-routing-keyUrefurijh]h]h]h]h]Uinternaluh jh]rhX2queue.bind(queue_name, exchange_name, routing_key)rr}r(hX2queue.bind(queue_name, exchange_name, routing_key)rh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU%#queue-delete-name-if-unused-if-emptyUrefurijh]h]h]h]h]Uinternaluh jh]rhX'queue.delete(name, if_unused, if_empty)rr}r(hX'queue.delete(name, if_unused, if_empty)rh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#exchange-delete-name-if-unusedUrefurijh]h]h]h]h]Uinternaluh jh]rhX exchange.delete(name, if_unused)rr}r(hX exchange.delete(name, if_unused)rh jubah!jsubah!jtubah!jubeh!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh j5h]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r }r (hUh}r (U anchornameU#hands-on-with-the-apiUrefurijh]h]h]h]h]Uinternaluh jh]r hXHands-on with the APIr r}r(hXHands-on with the APIrh j ubah!jsubah!jtubah!jubeh!jubeh!jubah!jubeh!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]r hX$Backend: AMQP - celery.backends.amqpr!r"}r#(hjh jubah!jsubah!jtubah!jubah!jubjj\)r$}r%(hUh}r&(h]h]h]h]h]uh]r'ja)r(}r)(hUh}r*(h]h]h]h]h]uh j$h]r+jf)r,}r-(hUh}r.(h]h]h]h]h]uh j(h]r/jk)r0}r1(hUh}r2(U anchornameUUrefurijh]h]h]h]h]Uinternaluh j,h]r3hX.Backend: Tokyo Tyrant - celery.backends.tyrantr4r5}r6(hjh j0ubah!jsubah!jtubah!jubah!jubjj\)r7}r8(hUh}r9(h]h]h]h]h]uh]r:ja)r;}r<(hUh}r=(h]h]h]h]h]uh j7h]r>(jf)r?}r@(hUh}rA(h]h]h]h]h]uh j;h]rBjk)rC}rD(hUh}rE(U anchornameUUrefurijh]h]h]h]h]Uinternaluh j?h]rFhXGetting StartedrGrH}rI(hjh jCubah!jsubah!jtubj\)rJ}rK(hUh}rL(h]h]h]h]h]uh j;h]rMj)rN}rO(hUh}rP(UnumberedKUparentjU titlesonlyUglobh]h]h]h]h]Uentries]rQ(NjrRNjrSNj rTNj!rUNj"rVNj#rWeUhiddenUmaxdepthKU includefiles]rX(jjj j!j"j#eU includehiddenuh jJh]h!jubah!jubeh!jubah!jubjj\)rY}rZ(hUh}r[(h]h]h]h]h]uh]r\ja)r]}r^(hUh}r_(h]h]h]h]h]uh jYh]r`jf)ra}rb(hUh}rc(h]h]h]h]h]uh j]h]rdjk)re}rf(hUh}rg(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jah]rhhX@Remote Control Command Registry - celery.worker.control.registryrirj}rk(hjh jeubah!jsubah!jtubah!jubah!jubjj\)rl}rm(hUh}rn(h]h]h]h]h]uh]roja)rp}rq(hUh}rr(h]h]h]h]h]uh jlh]rs(jf)rt}ru(hUh}rv(h]h]h]h]h]uh jph]rwjk)rx}ry(hUh}rz(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jth]r{hX8Using Celery with Redis/Database as the messaging queue.r|r}}r~(hjh jxubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jph]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #installationUrefurijh]h]h]h]h]Uinternaluh jh]rhX Installationrr}r(hX Installationrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#redisUrefurijh]h]h]h]h]Uinternaluh jh]rhXRedisrr}r(hXRedisrh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#configurationUrefurijh]h]h]h]h]Uinternaluh jh]rhX Configurationrr}r(hX Configurationrh jubah!jsubah!jtubah!jubah!jubeh!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU #databaseUrefurijh]h]h]h]h]Uinternaluh jh]rhXDatabaserr}r(hXDatabaserh jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]r(ja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#id1Urefurijh]h]h]h]h]Uinternaluh jh]rhX Configurationrr}r(hX Configurationrh jubah!jsubah!jtubah!jubja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU#important-notesUrefurijh]h]h]h]h]Uinternaluh jh]rhXImportant notesrr}r(hXImportant notesrh jubah!jsubah!jtubah!jubeh!jubeh!jubeh!jubeh!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]rhX$Backend: Base - celery.backends.baserr}r(hjh jubah!jsubah!jtubah!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]r jk)r }r (hUh}r (U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]r hXClock Service - celery.beatrr}r(hjh j ubah!jsubah!jtubah!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]r hX Unit Testingr!r"}r#(hj h jubah!jsubah!jtubj\)r$}r%(hUh}r&(h]h]h]h]h]uh jh]r'(ja)r(}r)(hUh}r*(h]h]h]h]h]uh j$h]r+jf)r,}r-(hUh}r.(h]h]h]h]h]uh j(h]r/jk)r0}r1(hUh}r2(U anchornameU#testing-with-djangoUrefurijh]h]h]h]h]Uinternaluh j,h]r3hXTesting with Djangor4r5}r6(hXTesting with Djangoh j0ubah!jsubah!jtubah!jubja)r7}r8(hUh}r9(h]h]h]h]h]uh j$h]r:jf)r;}r<(hUh}r=(h]h]h]h]h]uh j7h]r>jk)r?}r@(hUh}rA(U anchornameU/#using-a-custom-test-runner-to-test-with-celeryUrefurijh]h]h]h]h]Uinternaluh j;h]rBhX.Using a custom test runner to test with celeryrCrD}rE(hX.Using a custom test runner to test with celeryh j?ubah!jsubah!jtubah!jubeh!jubeh!jubah!jubjj\)rF}rG(hUh}rH(h]h]h]h]h]uh]rIja)rJ}rK(hUh}rL(h]h]h]h]h]uh jFh]rM(jf)rN}rO(hUh}rP(h]h]h]h]h]uh jJh]rQjk)rR}rS(hUh}rT(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jNh]rUhXFirst steps with DjangorVrW}rX(hjh jRubah!jsubah!jtubj\)rY}rZ(hUh}r[(h]h]h]h]h]uh jJh]r\(ja)r]}r^(hUh}r_(h]h]h]h]h]uh jYh]r`jf)ra}rb(hUh}rc(h]h]h]h]h]uh j]h]rdjk)re}rf(hUh}rg(U anchornameU.#configuring-your-django-project-to-use-celeryUrefurijh]h]h]h]h]Uinternaluh jah]rhhX-Configuring your Django project to use Celeryrirj}rk(hX-Configuring your Django project to use Celeryh jeubah!jsubah!jtubah!jubja)rl}rm(hUh}rn(h]h]h]h]h]uh jYh]rojf)rp}rq(hUh}rr(h]h]h]h]h]uh jlh]rsjk)rt}ru(hUh}rv(U anchornameU!#running-the-celery-worker-serverUrefurijh]h]h]h]h]Uinternaluh jph]rwhX Running the celery worker serverrxry}rz(hX Running the celery worker serverh jtubah!jsubah!jtubah!jubja)r{}r|(hUh}r}(h]h]h]h]h]uh jYh]r~jf)r}r(hUh}r(h]h]h]h]h]uh j{h]rjk)r}r(hUh}r(U anchornameU#defining-and-executing-tasksUrefurijh]h]h]h]h]Uinternaluh jh]rhXDefining and executing tasksrr}r(hXDefining and executing tasksh jubah!jsubah!jtubah!jubeh!jubeh!jubah!jubjj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurijh]h]h]h]h]Uinternaluh jh]rhX*Backend: MongoDB - celery.backends.mongodbrr}r(hjh jubah!jsubah!jtubah!jubah!jubj j\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]r(jf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurij h]h]h]h]h]Uinternaluh jh]rhXCreating Tasksrr}r(hj(h jubah!jsubah!jtubj\)r}r(hUh}r(h]h]h]h]h]uh jh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameU/#ensuring-a-task-is-only-executed-one-at-a-timeUrefurij h]h]h]h]h]Uinternaluh jh]rhX.Ensuring a task is only executed one at a timerr}r(hX.Ensuring a task is only executed one at a timeh jubah!jsubah!jtubah!jubah!jubeh!jubah!jubj)j\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurij)h]h]h]h]h]Uinternaluh jh]rhX(Django Loader - celery.loaders.djangoapprr}r(hj1h jubah!jsubah!jtubah!jubah!jubj2j\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurij2h]h]h]h]h]Uinternaluh jh]rhX&Multiprocessing Worker - celery.workerrr}r(hj:h jubah!jsubah!jtubah!jubah!jubj;j\)r}r(hUh}r(h]h]h]h]h]uh]rja)r}r(hUh}r(h]h]h]h]h]uh jh]rjf)r}r(hUh}r(h]h]h]h]h]uh jh]rjk)r}r(hUh}r(U anchornameUUrefurij;h]h]h]h]h]Uinternaluh jh]rhX+Worker Heartbeats - celery.worker.heartbeatrr}r(hjCh jubah!jsubah!jtubah!jubah!jubjDj\)r}r(hUh}r(h]h]h]h]h]uh]rja)r }r (hUh}r (h]h]h]h]h]uh jh]r (jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameUUrefurijDh]h]h]h]h]Uinternaluh j h]r hXExecuting Tasksr r }r (hjLh j ubah!jsubah!jtubj\)r }r (hUh}r (h]h]h]h]h]uh j h]r (ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameU#eta-and-countdownUrefurijDh]h]h]h]h]Uinternaluh j h]r hXETA and countdownr r }r! (hXETA and countdownr" h j ubah!jsubah!jtubah!jubja)r# }r$ (hUh}r% (h]h]h]h]h]uh j h]r& jf)r' }r( (hUh}r) (h]h]h]h]h]uh j# h]r* jk)r+ }r, (hUh}r- (U anchornameU #serializersUrefurijDh]h]h]h]h]Uinternaluh j' h]r. hX Serializersr/ r0 }r1 (hX Serializersr2 h j+ ubah!jsubah!jtubah!jubja)r3 }r4 (hUh}r5 (h]h]h]h]h]uh j h]r6 jf)r7 }r8 (hUh}r9 (h]h]h]h]h]uh j3 h]r: jk)r; }r< (hUh}r= (U anchornameU$#connections-and-connection-timeoutsUrefurijDh]h]h]h]h]Uinternaluh j7 h]r> hX$Connections and connection timeouts.r? r@ }rA (hX$Connections and connection timeouts.rB h j; ubah!jsubah!jtubah!jubja)rC }rD (hUh}rE (h]h]h]h]h]uh j h]rF jf)rG }rH (hUh}rI (h]h]h]h]h]uh jC h]rJ jk)rK }rL (hUh}rM (U anchornameU#routing-optionsUrefurijDh]h]h]h]h]Uinternaluh jG h]rN hXRouting optionsrO rP }rQ (hXRouting optionsrR h jK ubah!jsubah!jtubah!jubja)rS }rT (hUh}rU (h]h]h]h]h]uh j h]rV jf)rW }rX (hUh}rY (h]h]h]h]h]uh jS h]rZ jk)r[ }r\ (hUh}r] (U anchornameU #amqp-optionsUrefurijDh]h]h]h]h]Uinternaluh jW h]r^ hX AMQP optionsr_ r` }ra (hX AMQP optionsrb h j[ ubah!jsubah!jtubah!jubeh!jubeh!jubah!jubjMj\)rc }rd (hUh}re (h]h]h]h]h]uh]rf ja)rg }rh (hUh}ri (h]h]h]h]h]uh jc h]rj jf)rk }rl (hUh}rm (h]h]h]h]h]uh jg h]rn jk)ro }rp (hUh}rq (U anchornameUUrefurijMh]h]h]h]h]Uinternaluh jk h]rr hXLoaders - celery.loadersrs rt }ru (hjUh jo ubah!jsubah!jtubah!jubah!jubjVj\)rv }rw (hUh}rx (h]h]h]h]h]uh]ry ja)rz }r{ (hUh}r| (h]h]h]h]h]uh jv h]r} jf)r~ }r (hUh}r (h]h]h]h]h]uh jz h]r jk)r }r (hUh}r (U anchornameUUrefurijVh]h]h]h]h]Uinternaluh j~ h]r hX9caqmadm: AMQP API Command-line Shell - celery.bin.camqadmr r }r (hj^h j ubah!jsubah!jtubah!jubah!jubj_j\)r }r (hUh}r (h]h]h]h]h]uh]r ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameUUrefurij_h]h]h]h]h]Uinternaluh j h]r hX8Periodic Task Schedule Behaviors - celery.task.schedulesr r }r (hjgh j ubah!jsubah!jtubah!jubah!jubjhj\)r }r (hUh}r (h]h]h]h]h]uh]r ja)r }r (hUh}r (h]h]h]h]h]uh j h]r jf)r }r (hUh}r (h]h]h]h]h]uh j h]r jk)r }r (hUh}r (U anchornameUUrefurijhh]h]h]h]h]Uinternaluh j h]r hX#Task Decorators - celery.decoratorsr r }r (hjph j ubah!jsubah!jtubah!jubah!jubuU indexentriesr }r (h ]h#]h,]r (Usingler Xcelery.task.base (module)Xmodule-celery.task.baseUtr ah5]h>]hG]hP]hY]r ((j Xcelery.states (module)Xmodule-celery.statesUtr (j X!PENDING (in module celery.states)jUtr (j X!STARTED (in module celery.states)jPUtr (j X!SUCCESS (in module celery.states)j Utr (j X!FAILURE (in module celery.states)jUtr (j XRETRY (in module celery.states)jUtr (j XRETRY (in module celery.states)Xcelery.states.RETRYUtr (j X&READY_STATES (in module celery.states)j,Utr (j X(UNREADY_STATES (in module celery.states)jUtr (j X*EXCEPTION_STATES (in module celery.states)jUtr (j X$ALL_STATES (in module celery.states)jUtr ehb]hk]ht]h}]h]h]h]h]r (j Xcelery.task.base (module)Xmodule-celery.task.baseUtr ah]r (j Xcelery.task.http (module)Xmodule-celery.task.httpUtr ah]h]h]h]r ((j Xtask_sent (built-in variable)jUtr (j Xtask_prerun (built-in variable)jUtr (j X task_postrun (built-in variable)j9Utr (j Xworker_init (built-in variable)j3Utr (j X worker_ready (built-in variable)jUtr (j X#worker_shutdown (built-in variable)jHUtr eh]h]r ((j Xcelery.managers (module)Xmodule-celery.managersUtr (j X&TaskManager (class in celery.managers)jUtr (j X/get_task() (celery.managers.TaskManager method)jUtr (j X3store_result() (celery.managers.TaskManager method)jJUtr (j X)TaskSetManager (class in celery.managers)jUtr (j X9restore_taskset() (celery.managers.TaskSetManager method)j$Utr (j X6store_result() (celery.managers.TaskSetManager method)jUtr (j X/transaction_retry() (in module celery.managers)j.Utr eh]r ((j X NOSE_VERBOSEr Uindex-0r Utr (j X"environment variable; NOSE_VERBOSEj Utr eh]h]j]r ((j XQUEUES (built-in variable)jUtr (j X!DEFAULT_QUEUE (built-in variable)jUtr (j X$DEFAULT_EXCHANGE (built-in variable)jUtr (j X)DEFAULT_EXCHANGE_TYPE (built-in variable)jUtr (j X)DEFAULT_DELIVERY_MODE (built-in variable)j?Utr (j X'DEFAULT_ROUTING_KEY (built-in variable)jUtr (j X-BROKER_CONNECTION_TIMEOUT (built-in variable)jUtr (j X#BROADCAST_QUEUE (built-in variable)j:Utr (j X&BROADCAST_EXCHANGE (built-in variable)jDUtr (j X+BROADCAST_EXCHANGE_TYPE (built-in variable)jUtr (j XEVENT_QUEUE (built-in variable)jBUtr (j X"EVENT_EXCHANGE (built-in variable)jUtr (j X'EVENT_EXCHANGE_TYPE (built-in variable)jUtr (j X%EVENT_ROUTING_KEY (built-in variable)jUtr (j X$EVENT_SERIALIZER (built-in variable)jLUtr (j X#RESULT_EXCHANGE (built-in variable)jUtr (j X1CELERY_SEND_TASK_ERROR_EMAILS (built-in variable)j4Utr (j X ALWAYS_EAGER (built-in variable)jUtr (j X'TASK_RESULT_EXPIRES (built-in variable)jUtr (j X!IGNORE_RESULT (built-in variable)jUtr (j X!TRACK_STARTED (built-in variable)jUtr (j XACKS_LATE (built-in variable)jUtr (j X0STORE_ERRORS_EVEN_IF_IGNORED (built-in variable)jUtr (j X&MAX_CACHED_RESULTS (built-in variable)j"Utr (j X+BROKER_CONNECTION_RETRY (built-in variable)jUtr (j X1BROKER_CONNECTION_MAX_RETRIES (built-in variable)jUtr (j X#TASK_SERIALIZER (built-in variable)jUtr (j X"RESULT_BACKEND (built-in variable)jUtr (j X(CELERY_CACHE_BACKEND (built-in variable)jUtr (j XSEND_EVENTS (built-in variable)jUtr (j X&DEFAULT_RATE_LIMIT (built-in variable)jKUtr (j X'DISABLE_RATE_LIMITS (built-in variable)jUtr (j X(CELERYBEAT_LOG_LEVEL (built-in variable)j6Utr (j X'CELERYBEAT_LOG_FILE (built-in variable)j Utr (j X0CELERYBEAT_SCHEDULE_FILENAME (built-in variable)jUtr (j X0CELERYBEAT_MAX_LOOP_INTERVAL (built-in variable)j&Utr (j X'CELERYMON_LOG_LEVEL (built-in variable)jUtr (j X&CELERYMON_LOG_FILE (built-in variable)jUtr (j XLOG_LEVELS (built-in variable)jUtr!(j X&CELERYD_LOG_FORMAT (built-in variable)j/Utr!(j X+CELERYD_TASK_LOG_FORMAT (built-in variable)jUtr!(j X$CELERYD_LOG_FILE (built-in variable)jUtr!(j X%CELERYD_LOG_LEVEL (built-in variable)j'Utr!(j X'CELERYD_CONCURRENCY (built-in variable)jUtr!(j X/CELERYD_PREFETCH_MULTIPLIER (built-in variable)j>Utr!(j X CELERYD_POOL (built-in variable)jUtr!(j X$CELERYD_LISTENER (built-in variable)j0Utr!(j X$CELERYD_MEDIATOR (built-in variable)jFUtr !(j X)CELERYD_ETA_SCHEDULER (built-in variable)jUtr !ej ]j]j]j(]r !((j X#celery.contrib.test_runner (module)X!module-celery.contrib.test_runnerUtr !(j X2run_tests() (in module celery.contrib.test_runner)jUtr !ej1]r!((j Xcelery.datastructures (module)Xmodule-celery.datastructuresUtr!(j X.ExceptionInfo (class in celery.datastructures)jUtr!(j X9exception (celery.datastructures.ExceptionInfo attribute)jUtr!(j X9traceback (celery.datastructures.ExceptionInfo attribute)jUtr!(j X+LimitedSet (class in celery.datastructures)jMUtr!(j X/add() (celery.datastructures.LimitedSet method)jOUtr!(j X2first (celery.datastructures.LimitedSet attribute)jUtr!(j X5pop_value() (celery.datastructures.LimitedSet method)jCUtr!(j X+LocalCache (class in celery.datastructures)jUtr!(j X.PositionQueue (class in celery.datastructures)jUtr!(j X6length (celery.datastructures.PositionQueue attribute)jUtr!(j X?PositionQueue.UnfilledPosition (class in celery.datastructures)jEUtr!(j X6filled (celery.datastructures.PositionQueue attribute)j(Utr!(j X3full() (celery.datastructures.PositionQueue method)jUtr!(j X.SharedCounter (class in celery.datastructures)jUtr!(j X8decrement() (celery.datastructures.SharedCounter method)j<Utr!(j X8increment() (celery.datastructures.SharedCounter method)jUtr!(j X1consume_queue() (in module celery.datastructures)j Utr !ej:]r!!(j Xcelery.bin.celeryinit (module)Xmodule-celery.bin.celeryinitUtr"!ajC]jL]jU]r#!((j Xcelery.exceptions (module)Xmodule-celery.exceptionsUtr$!(j XAlreadyRegisteredjUtr%!(j XImproperlyConfiguredjRUtr&!(j XMaxRetriesExceededErrorjUtr'!(j X NotRegisteredjUtr(!(j XRetryTaskErrorjUtr)!(j X TimeoutErrorjGUtr*!ej^]jg]r+!(j Xrevoked (built-in variable)jUtr,!ajp]jy]j]j]r-!((j X'TASK_STATUS_PENDING (built-in variable)j;Utr.!(j X%TASK_STATUS_RETRY (built-in variable)jUtr/!(j X'TASK_STATUS_FAILURE (built-in variable)j2Utr0!(j X$TASK_STATUS_DONE (built-in variable)j+Utr1!(j X!TASK_STATUSES (built-in variable)jUtr2!(j X)TASK_STATUSES_CHOICES (built-in variable)j%Utr3!(j XTaskMeta (built-in class)jUtr4!(j Xtask_id (TaskMeta attribute)jUtr5!(j Xstatus (TaskMeta attribute)j#Utr6!(j Xresult (TaskMeta attribute)jNUtr7!(j Xdate_done (TaskMeta attribute)jUtr8!(j X!PeriodicTaskMeta (built-in class)jUtr9!(j X!name (PeriodicTaskMeta attribute)jUtr:!(j X(last_run_at (PeriodicTaskMeta attribute)jUtr;!(j X,total_run_count (PeriodicTaskMeta attribute)jUtr!ej]j]j]j]j]r?!((j Xcelery.utils.compat (module)Xmodule-celery.utils.compatUtr@!(j X*OrderedDict (class in celery.utils.compat)jUtrA!(j X0clear() (celery.utils.compat.OrderedDict method)jIUtrB!(j X/copy() (celery.utils.compat.OrderedDict method)jUtrC!(j X9fromkeys() (celery.utils.compat.OrderedDict class method)jUtrD!(j X2popitem() (celery.utils.compat.OrderedDict method)jUtrE!ej]rF!((j Xcelery.registry (module)Xmodule-celery.registryUtrG!(j X'TaskRegistry (class in celery.registry)jUtrH!(j XTaskRegistry.NotRegisteredrI!jUtrJ!(j X4filter_types() (celery.registry.TaskRegistry method)jUtrK!(j X0periodic() (celery.registry.TaskRegistry method)j UtrL!(j X0register() (celery.registry.TaskRegistry method)jUtrM!(j X/regular() (celery.registry.TaskRegistry method)j)UtrN!(j X2unregister() (celery.registry.TaskRegistry method)jUtrO!ej]j]j]j]rP!((j Xcelery.loaders.base (module)Xmodule-celery.loaders.baseUtrQ!(j X)BaseLoader (class in celery.loaders.base)jUtrR!(j X/conf (celery.loaders.base.BaseLoader attribute)jUtrS!(j X6on_task_init() (celery.loaders.base.BaseLoader method)jUtrT!(j X8on_worker_init() (celery.loaders.base.BaseLoader method)jUtrU!ej]j]j]j ]rV!((j Xcelery.loaders.default (module)Xmodule-celery.loaders.defaultUtrW!(j X(Loader (class in celery.loaders.default)jUtrX!(j X7on_worker_init() (celery.loaders.default.Loader method)jUtrY!(j X;read_configuration() (celery.loaders.default.Loader method)jUtrZ!ej]j]j$]j-]j6]r[!((j Xcelery.utils.timeutils (module)Xmodule-celery.utils.timeutilsUtr\!(j X5delta_resolution() (in module celery.utils.timeutils)jUtr]!(j X)rate() (in module celery.utils.timeutils)jUtr^!(j X.remaining() (in module celery.utils.timeutils)jUtr_!(j X6timedelta_seconds() (in module celery.utils.timeutils)j5Utr`!(j X,weekday() (in module celery.utils.timeutils)jUtra!ej?]jH]jQ]rb!((j Xcelery.platform (module)Xmodule-celery.platformUtrc!(j X+ignore_signal() (in module celery.platform)jUtrd!(j X4install_signal_handler() (in module celery.platform)jUtre!(j X*reset_signal() (in module celery.platform)jAUtrf!(j X2set_mp_process_title() (in module celery.platform)jUtrg!(j X/set_process_title() (in module celery.platform)j=Utrh!ejZ]jc]jl]ju]j~]j]j]j]j]j]j]ri!(j Xcelery.utils.patch (module)Xmodule-celery.utils.patchUtrj!aj]j]j]j]j]j]j]j]j]j]j]j ]j)]rk!((j X!celery.loaders.djangoapp (module)Xmodule-celery.loaders.djangoappUtrl!(j X*Loader (class in celery.loaders.djangoapp)jUtrm!(j X7on_task_init() (celery.loaders.djangoapp.Loader method)jUtrn!(j X9on_worker_init() (celery.loaders.djangoapp.Loader method)jUtro!(j X=read_configuration() (celery.loaders.djangoapp.Loader method)jUtrp!(j X3autodiscover() (in module celery.loaders.djangoapp)jUtrq!(j X:find_related_module() (in module celery.loaders.djangoapp)jUtrr!ej2]rs!((j Xcelery.utils (module)Xmodule-celery.utilsUtrt!(j X!chunks() (in module celery.utils)jUtru!(j X first() (in module celery.utils)jUtrv!(j X+fun_takes_kwargs() (in module celery.utils)jUtrw!(j X(gen_unique_id() (in module celery.utils)jUtrx!(j X*get_cls_by_name() (in module celery.utils)j7Utry!(j X,get_full_cls_name() (in module celery.utils)jUtrz!(j X&instantiate() (in module celery.utils)jUtr{!(j X&mattrgetter() (in module celery.utils)jUtr|!(j X&mitemgetter() (in module celery.utils)jUtr}!(j Xnoop() (in module celery.utils)j Utr~!(j X"padlist() (in module celery.utils)j1Utr!(j X%repeatlast() (in module celery.utils)jUtr!(j X*retry_over_time() (in module celery.utils)jUtr!ej;]jD]jM]r!((j Xcelery.loaders (module)Xmodule-celery.loadersUtr!(j X+current_loader() (in module celery.loaders)j!Utr!(j X+get_loader_cls() (in module celery.loaders)jUtr!(j X*load_settings() (in module celery.loaders)jUtr!ejV]j_]jh]uUall_docsr!}r!(h GAԼG{kOh#GAԼGz|z h,GAԼG{h5GAԼGzh>GAԼGz:hGGAԼG{ehPGAԼG{ hYGAԼG{bhbGAԼGzhkGAԼGzhtGAԼGz>Kh}GAԼG{gghGAԼG{HhGAԼG{g+VhGAԼGz0hGAԼGzzhGAԼG{|PhGAԼG{phGAԼGz0hGAԼGzF́hGAԼG{_ͫhGAԼG{LhGAԼGzWhGAԼGzjhGAԼG{\^hGAԼG{n jGAԼG{.6j GAԼG{djGAԼGzUjGAԼG{c{j(GAԼG{>gj1GAԼGzfj:GAԼG{*'jCGAԼGzVjLGAԼGz$jUGAԼG{Kj^GAԼG{XejgGAԼG{ O+jpGAԼG{u-8jyGAԼGz3jGAԼGzjGAԼGz;\jGAԼG{/jGAԼG{(TjGAԼGz@jGAԼGzyΣjGAԼGztjGAԼG{[jGAԼGz{jGAԼG{tUjGAԼGzjjGAԼG{R!jGAԼGzGtjGAԼG{d8.jGAԼGzj GAԼG{TqPjGAԼGz:djGAԼG{)j$GAԼG{)&j-GAԼGzt`j6GAԼGz>j?GAԼGzjHGAԼG{{}jQGAԼGzmjZGAԼGz(pjcGAԼG{jlGAԼG{bjuGAԼG{j~GAԼGzHjGAԼG{IbjGAԼGzMjGAԼG{jGAԼGz,jGAԼG{ojGAԼGzJjGAԼG{jGAԼGzjGAԼGz[jGAԼGz 9jGAԼGzjGAԼG{vËjGAԼGzYjGAԼGz`kjGAԼGz~;CjGAԼGzjGAԼGz j GAԼGz}'$j)GAԼG{Wj2GAԼGz~j;GAԼG{jDGAԼG{zjMGAԼG{O[jVGAԼG{b j_GAԼG{fr~jhGAԼG{H uUsettingsr!}r!(Ucloak_email_addressesr!Utrim_footnote_reference_spacer!U halt_levelr!KUsectsubtitle_xformr!Uembed_stylesheetr!U pep_base_urlr!Uhttp://www.python.org/dev/peps/r!Udoctitle_xformr!Uwarning_streamr!csphinx.util.nodes WarningStream r!)r!}r!(U_rer!cre _compile r!U+\((DEBUG|INFO|WARNING|ERROR|SEVERE)/[0-4]\)r!KRr!Uwarnfuncr!NubUenvr!hU rfc_base_urlr!Uhttp://tools.ietf.org/html/r!Ufile_insertion_enabledr!Ugettext_compactr!Uinput_encodingr!U utf-8-sigr!uUfiles_to_rebuildr!}r!(jh]r!jCaRr!j)h]r!jHaRr!jh]r!jCaRr!jUh]r!h5aRr!j h]r!h}aRr!j7h]r!jaRr!jh]r!h}aRr!j;h]r!jaRr!jIh]r!jaRr!j2h]r!jaRr!jh]r!jCaRr!j3h]r!jaRr!jh]r!h}aRr!jGh]r!jaRr!jh]r!jCaRr!j+h]r!jHaRr!jAh]r!jaRr!jh]r!jaRr!j h]r!h}aRr!jh]r!h}aRr!jPh]r!jaRr!jh]r!jCaRr!jh]r!h}aRr!jQh]r!jaRr!j0h]r!jpaRr!jh]r!h}aRr!jh]r!h}aRr!j?h]r!jaRr!jh]r!h}aRr!jh]r!h}aRr!jHh]r!jaRr!jh]r!h}aRr!j!h]r!jaRr!j h]r!jaRr!j h]r!h}aRr!jh]r!h}aRr!j=h]r!jaRr!jh]r!jCaRr!jWh]r!h5aRr!jEh]r!jaRr!j4h]r!jaRr!jh]r!h}aRr!jh]r!h}aRr!j6h]r!jaRr!jh]r!jCaRr!jMh]r!jaRr"jh]r"h}aRr"j&h]r"h#aRr"j.h]r"jpaRr"jLh]r"jaRr"jh]r "h}aRr "j h]r "h}aRr "jSh]r "h5aRr"jh]r"h}aRr"j#h]r"jaRr"j5h]r"jaRr"jh]r"h}aRr"jh]r"jaRr"jKh]r"jaRr"j"h]r"jaRr"jh]r"jCaRr"jOh]r"jaRr "jVh]r!"h5aRr""jTh]r#"h5aRr$"jh]r%"h}aRr&"j8h]r'"jaRr("jCh]r)"jaRr*"jh]r+"h}aRr,"j:h]r-"jaRr."jh]r/"jCaRr0"jBh]r1"jaRr2"jXh]r3"h5aRr4"jNh]r5"jaRr6"j,h]r7"jHaRr8"jFh]r9"jaRr:"jh]r;"jCaRr<"j<h]r="jaRr>"j/h]r?"jpaRr@"j@h]rA"jaRrB"j>h]rC"jaRrD"j'h]rE"h#aRrF"jDh]rG"jaRrH"j%h]rI"h#aRrJ"jh]rK"h}aRrL"jJh]rM"jaRrN"j9h]rO"jaRrP"j*h]rQ"jHaRrR"jh]rS"h}aRrT"jh]rU"h}aRrV"j h]rW"h}aRrX"jh]rY"h}aRrZ"uUtoc_secnumbersr["}U_nitpick_ignorer\"h]Rr]"ub.PKXDD*s//+celery-1.0-archived/.doctrees/links.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xrabbitmq munin plug-insqXshovelqXamqpqNXinteresting linksq NXconyq Xrabbitmqq Xceleryq NXmuninq XtrixxqXrabbitmq-shovelquUsubstitution_defsq}qUparse_messagesq]qcdocutils.nodes system_message q)q}q(U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUU referencedqKhh)q}q(hUhhUsourceqcdocutils.nodes reprunicode q XC/var/build/user_builds/celery/checkouts/1.0-archived/docs/links.rstq!q"}q#bUtagnameq$Usectionq%U attributesq&}q'(Udupnamesq(]Uclassesq)]Ubackrefsq*]Uidsq+]q,Uinteresting-linksq-aUnamesq.]q/h auUlineq0KUdocumentq1hUchildrenq2]q3(cdocutils.nodes title q4)q5}q6(hXInteresting Linksq7hhhh"h$Utitleq8h&}q9(h(]h)]h*]h+]h.]uh0Kh1hh2]q:cdocutils.nodes Text q;XInteresting Linksq(hh7hh5ubaubh)q?}q@(hUhhhh"h$h%h&}qA(h(]h)]h*]h+]qBUceleryqCah.]qDh auh0Kh1hh2]qE(h4)qF}qG(hXceleryqHhh?hh"h$h8h&}qI(h(]h)]h*]h+]h.]uh0Kh1hh2]qJh;XceleryqKqL}qM(hhHhhFubaubcdocutils.nodes bullet_list qN)qO}qP(hUhh?hh"h$U bullet_listqQh&}qR(UbulletqSX*h+]h*]h(]h)]h.]uh0K h1hh2]qTcdocutils.nodes list_item qU)qV}qW(hXRIRC logs from ``#celery`` (Freenode): http://botland.oebfare.com/logger/celery/ hhOhNh$U list_itemqXh&}qY(h(]h)]h*]h+]h.]uh0Nh1hh2]qZcdocutils.nodes definition_list q[)q\}q](hUh&}q^(h(]h)]h*]h+]h.]uhhVh2]q_cdocutils.nodes definition_list_item q`)qa}qb(hXPIRC logs from ``#celery`` (Freenode): http://botland.oebfare.com/logger/celery/ hh\hh"h$Udefinition_list_itemqch&}qd(h(]h)]h*]h+]h.]uh0K h2]qe(cdocutils.nodes term qf)qg}qh(hX%IRC logs from ``#celery`` (Freenode):hhahh"h$Utermqih&}qj(h(]h)]h*]h+]h.]uh0K h2]qk(h;XIRC logs from qlqm}qn(hXIRC logs from hhgubcdocutils.nodes literal qo)qp}qq(hX ``#celery``h&}qr(h(]h)]h*]h+]h.]uhhgh2]qsh;X#celeryqtqu}qv(hUhhpubah$Uliteralqwubh;X (Freenode):qxqy}qz(hX (Freenode):hhgubeubcdocutils.nodes definition q{)q|}q}(hUh&}q~(h(]h)]h*]h+]h.]uhhah2]qcdocutils.nodes paragraph q)q}q(hX)http://botland.oebfare.com/logger/celery/qhh|hh"h$U paragraphqh&}q(h(]h)]h*]h+]h.]uh0K h2]qcdocutils.nodes reference q)q}q(hhh&}q(Urefurihh+]h*]h(]h)]h.]uhhh2]qh;X)http://botland.oebfare.com/logger/celery/qq}q(hUhhubah$U referencequbaubah$U definitionqubeubah$Udefinition_listqubaubaubeubh)q}q(hUhhhh"h$h%h&}q(h(]h)]h*]h+]qUamqpqah.]qhauh0K h1hh2]q(h4)q}q(hXAMQPqhhhh"h$h8h&}q(h(]h)]h*]h+]h.]uh0K h1hh2]qh;XAMQPqq}q(hhhhubaubhN)q}q(hUhhhh"h$hQh&}q(hSX*h+]h*]h(]h)]h.]uh0Kh1hh2]q(hU)q}q(hXK`RabbitMQ-shovel`: Message Relocation Equipment (as a plug-in to RabbitMQ) hhhh"h$hXh&}q(h(]h)]h*]h+]h.]uh0Nh1hh2]qh)q}q(hXJ`RabbitMQ-shovel`: Message Relocation Equipment (as a plug-in to RabbitMQ)hhhh"h$hh&}q(h(]h)]h*]h+]h.]uh0Kh2]q(cdocutils.nodes title_reference q)q}q(hX`RabbitMQ-shovel`h&}q(h(]h)]h*]h+]h.]uhhh2]qh;XRabbitMQ-shovelqq}q(hUhhubah$Utitle_referencequbh;X9: Message Relocation Equipment (as a plug-in to RabbitMQ)qq}q(hX9: Message Relocation Equipment (as a plug-in to RabbitMQ)hhubeubaubhU)q}q(hX/`Shovel`_: An AMQP Relay (generic AMQP shovel) hhhh"h$hXh&}q(h(]h)]h*]h+]h.]uh0Nh1hh2]qh)q}q(hX.`Shovel`_: An AMQP Relay (generic AMQP shovel)hhhh"h$hh&}q(h(]h)]h*]h+]h.]uh0Kh2]q(h)q}q(hX `Shovel`_UresolvedqKhhh$hh&}q(UnameXShovelUrefuriqXhttp://bit.ly/xFEdeqh+]h*]h(]h)]h.]uh2]qh;XShovelqȅq}q(hUhhubaubh;X%: An AMQP Relay (generic AMQP shovel)q˅q}q(hX%: An AMQP Relay (generic AMQP shovel)hhubeubaubeubcdocutils.nodes target q)q}q(hX+.. _`RabbitMQ-shovel`: http://bit.ly/b1hVW2hhhh"h$Utargetqh&}q(hXhttp://bit.ly/b1hVW2h+]qUrabbitmq-shovelqah*]h(]h)]h.]qhauh0Kh1hh2]ubh)q}q(hX!.. _`Shovel`: http://bit.ly/xFEdehKhhhh"h$hh&}q(hhh+]qUshovelqah*]h(]h)]h.]qhauh0Kh1hh2]ubeubheubhh"h$h%h&}q(h(]qXrabbitmqqah)]h*]h+]qUrabbitmqqah.]uh0Kh1hh2]q(h4)q}q(hXRabbitMQqhhhh"h$h8h&}q(h(]h)]h*]h+]h.]uh0Kh1hh2]qh;XRabbitMQq煁q}q(hhhhubaubhN)q}q(hUhhhh"h$hQh&}q(hSX*h+]h*]h(]h)]h.]uh0Kh1hh2]q(hU)q}q(hXQ`Trixx`_: Administration and Monitoring tool for `RabbitMQ`_ (in development). hhhNh$hXh&}q(h(]h)]h*]h+]h.]uh0Nh1hh2]qh[)q}q(hUh&}q(h(]h)]h*]h+]h.]uhhh2]qh`)q}q(hXO`Trixx`_: Administration and Monitoring tool for `RabbitMQ`_ (in development). hhhh"h$hch&}q(h(]h)]h*]h+]h.]uh0Kh2]q(hf)q}q(hX@`Trixx`_: Administration and Monitoring tool for `RabbitMQ`_ (inhhhh"h$hih&}q(h(]h)]h*]h+]h.]uh0Kh2]q(h)q}q(hX`Trixx`_hKhhh$hh&}r(UnameXTrixxhX-http://github.com/aaronfeng/trixx/tree/masterrh+]h*]h(]h)]h.]uh2]rh;XTrixxrr}r(hUhhubaubh;X): Administration and Monitoring tool for rr}r(hX): Administration and Monitoring tool for hhubh)r }r (hX `RabbitMQ`_hKhhh$hh&}r (UnameXRabbitMQhXhttp://rabbitmq.com/r h+]h*]h(]h)]h.]uh2]r h;XRabbitMQrr}r(hUhj ubaubh;X (inrr}r(hX (inhhubeubh{)r}r(hUh&}r(h(]h)]h*]h+]h.]uhhh2]rh)r}r(hX development).rhjhh"h$hh&}r(h(]h)]h*]h+]h.]uh0Kh2]rh;X development).rr}r(hjhjubaubah$hubeubah$hubaubhU)r }r!(hXX`Cony`_: HTTP based service for providing insight into running `RabbitMQ`_ processes. hhhNh$hXh&}r"(h(]h)]h*]h+]h.]uh0Nh1hh2]r#h[)r$}r%(hUh&}r&(h(]h)]h*]h+]h.]uhj h2]r'h`)r(}r)(hXV`Cony`_: HTTP based service for providing insight into running `RabbitMQ`_ processes. hj$hh"h$hch&}r*(h(]h)]h*]h+]h.]uh0Kh2]r+(hf)r,}r-(hX>`Cony`_: HTTP based service for providing insight into runninghj(hh"h$hih&}r.(h(]h)]h*]h+]h.]uh0Kh2]r/(h)r0}r1(hX`Cony`_hKhj,h$hh&}r2(UnameXConyhX&http://github.com/gmr/Cony/tree/masterr3h+]h*]h(]h)]h.]uh2]r4h;XConyr5r6}r7(hUhj0ubaubh;X7: HTTP based service for providing insight into runningr8r9}r:(hX7: HTTP based service for providing insight into runninghj,ubeubh{)r;}r<(hUh&}r=(h(]h)]h*]h+]h.]uhj(h2]r>h)r?}r@(hX`RabbitMQ`_ processes.hj;hh"h$hh&}rA(h(]h)]h*]h+]h.]uh0Kh2]rB(h)rC}rD(hX `RabbitMQ`_hKhj?h$hh&}rE(UnameXRabbitMQhj h+]h*]h(]h)]h.]uh2]rFh;XRabbitMQrGrH}rI(hUhjCubaubh;X processes.rJrK}rL(hX processes.hj?ubeubah$hubeubah$hubaubhU)rM}rN(hXa`RabbitMQ Munin Plug-ins`_: Use `Munin`_ to monitor `RabbitMQ`_, and alert on critical events. hhhNh$hXh&}rO(h(]h)]h*]h+]h.]uh0Nh1hh2]rPh[)rQ}rR(hUh&}rS(h(]h)]h*]h+]h.]uhjMh2]rTh`)rU}rV(hX_`RabbitMQ Munin Plug-ins`_: Use `Munin`_ to monitor `RabbitMQ`_, and alert on critical events. hjQhh"h$hch&}rW(h(]h)]h*]h+]h.]uh0K!h2]rX(hf)rY}rZ(hXJ`RabbitMQ Munin Plug-ins`_: Use `Munin`_ to monitor `RabbitMQ`_, and alertr[hjUhh"h$hih&}r\(h(]h)]h*]h+]h.]uh0K!h2]r](h)r^}r_(hX`RabbitMQ Munin Plug-ins`_hKhjYh$hh&}r`(UnameXRabbitMQ Munin Plug-inshX%http://github.com/ask/rabbitmq-munin/rah+]h*]h(]h)]h.]uh2]rbh;XRabbitMQ Munin Plug-insrcrd}re(hUhj^ubaubh;X: Use rfrg}rh(hX: Use hjYubh)ri}rj(hX`Munin`_hKhjYh$hh&}rk(UnameXMuninhX http://munin.projects.linpro.no/rlh+]h*]h(]h)]h.]uh2]rmh;XMuninrnro}rp(hUhjiubaubh;X to monitor rqrr}rs(hX to monitor hjYubh)rt}ru(hX `RabbitMQ`_hKhjYh$hh&}rv(UnameXRabbitMQhj h+]h*]h(]h)]h.]uh2]rwh;XRabbitMQrxry}rz(hUhjtubaubh;X , and alertr{r|}r}(hX , and alerthjYubeubh{)r~}r(hUh&}r(h(]h)]h*]h+]h.]uhjUh2]rh)r}r(hXon critical events.rhj~hh"h$hh&}r(h(]h)]h*]h+]h.]uh0K!h2]rh;Xon critical events.rr}r(hjhjubaubah$hubeubah$hubaubeubh)r}r(hX:.. _`Trixx`: http://github.com/aaronfeng/trixx/tree/masterhKhhhh"h$hh&}r(hjh+]rUtrixxrah*]h(]h)]h.]rhauh0K#h1hh2]ubh)r}r(hX2.. _`Cony`: http://github.com/gmr/Cony/tree/masterhKhhhh"h$hh&}r(hj3h+]rUconyrah*]h(]h)]h.]rh auh0K$h1hh2]ubh)r}r(hX$.. _`RabbitMQ`: http://rabbitmq.com/hKhhhh"h$hh&}r(hj h+]rUid1rah*]h(]h)]h.]rhauh0K%h1hh2]ubh)r}r(hXD.. _`RabbitMQ Munin Plug-ins`: http://github.com/ask/rabbitmq-munin/hKhhhh"h$hh&}r(hjah+]rUrabbitmq-munin-plug-insrah*]h(]h)]h.]rhauh0K&h1hh2]ubh)r}r(hX-.. _`Munin`: http://munin.projects.linpro.no/hKhhhh"h$hh&}r(hjlh+]rUmuninrah*]h(]h)]h.]rh auh0K'h1hh2]ubeubhh"h$Usystem_messagerh&}r(h(]UlevelKh+]h*]rjaUsourceh"h)]h.]UlineK%UtypeUINFOruh0K%h1hh2]rh)r}r(hUh&}r(h(]h)]h*]h+]h.]uhhh2]rh;X+Duplicate implicit target name: "rabbitmq".rr}r(hUhjubah$hubaubaUcurrent_sourcerNU decorationrNUautofootnote_startrKUnameidsr}r(hjhhhhh h-h jh jh hCh jhjhhuh2]rhahUU transformerrNU footnote_refsr}rUrefnamesr}r(Xrabbitmq munin plug-ins]rj^aXshovel]rhaXmunin]rjiaXcony]rj0aXrabbitmq]r(j jCjteXtrixx]rhauUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh1hU current_linerNUtransform_messagesr]rh)r}r(hUh&}r(h(]UlevelKh+]h*]Usourceh"h)]h.]UlineKUtypejuh2]rh)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh2]rh;X5Hyperlink target "rabbitmq-shovel" is not referenced.rr}r(hUhjubah$hubah$jubaUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh8NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlr NUexpose_internalsr NUsectsubtitle_xformr U source_linkr NUrfc_referencesr NUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUC/var/build/user_builds/celery/checkouts/1.0-archived/docs/links.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightr Ulongr!Uinput_encoding_error_handlerr"jUauto_id_prefixr#Uidr$Udoctitle_xformr%Ustrip_elements_with_classesr&NU _config_filesr']Ufile_insertion_enabledr(U raw_enabledr)KU dump_settingsr*NubUsymbol_footnote_startr+KUidsr,}r-(hhhhjjjjhhjjhCh?jjh-hjjhhuUsubstitution_namesr.}r/h$h1h&}r0(h(]h+]h*]Usourceh"h)]h.]uU footnotesr1]r2Urefidsr3}r4ub.PKXDD.(..)celery-1.0-archived/.doctrees/faq.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X the celery test-suite is failingqNX4how can i run a task once another task has finished?qNXtasksqNXfeaturesq NX%queue everything and delight everyoneq X5how do i run celeryd in the background on [platform]?q NX+can i send some tasks to only some servers?q NXresultsq NX8windows: the -b / --beat option to celeryd doesn't work?qNXgeneralqNX5i'm having integrityerror: duplicate key errors. why?qNXuser guide: remote tasksqXtroubleshootingqNX1what features are not supported when using stomp?qNX$does celery support task priorities?qNXdjangoqNX-what kinds of things should i use celery for?qNXis celery multi-lingual?qNX8how can i reuse the same connection when applying tasks?qNX3can i schedule tasks to execute at a specific time?qNXwhy won't my periodic task run?qNX+celeryd is not doing anything, just hangingqNX rabbitmq faqqXwhy is django a dependency?qNX should i use retry or acks_late?qNXFhow dow i get the result of a task if i have the id that points there?qNX>why aren't my remote control commands received by all workers?q NX8can i change the interval of a periodic task at runtime?q!NXis celery dependent on pickle?q"NX!why won't celeryd run on freebsd?q#NXrabbits and warrensq$Xmisconceptionsq%NXis celery for django only?q&NXusing other queuesq'Xwhy aren't my tasks processed?q(NX%can i use celery with activemq/stomp?q)NX%can i cancel the execution of a task?q*NX sqlalchemyq+XHi've discarded messages, but there are still messages left in the queue?q,NX#how do i discard all waiting tasks?q-NX can i use celery without django?q.NXdo i have to use amqp/rabbitmq?q/NX"how do i shut down celeryd safely?q0NXcan i execute a task by name?q1NXbrokersq2NXfrequently asked questionsq3NXstandard exchange typesq4XIgenerating a template in a task doesn't seem to respect my i18n settings?q5NX1mysql is throwing deadlock errors, what can i do?q6NXwhy is rabbitmq crashing?q7NXwhy won't my task run?q8NX.why is task.delay/apply*/celeryd just hanging?q9NXflexible routing modelq:Xlouieq;X0mysql - the innodb transaction model and lockingqUparse_messagesq?]q@Ucurrent_sourceqANU decorationqBNUautofootnote_startqCKUnameidsqD}qE(hU the-celery-test-suite-is-failingqFhU3how-can-i-run-a-task-once-another-task-has-finishedqGhUtasksqHh UfeaturesqIh U%queue-everything-and-delight-everyoneqJh U2how-do-i-run-celeryd-in-the-background-on-platformqKh U*can-i-send-some-tasks-to-only-some-serversqLh UresultsqMhU1windows-the-b-beat-option-to-celeryd-doesn-t-workqNhUgeneralqOhU2i-m-having-integrityerror-duplicate-key-errors-whyqPhUuser-guide-remote-tasksqQhUtroubleshootingqRhU0what-features-are-not-supported-when-using-stompqShU#does-celery-support-task-prioritiesqThUdjangoqUhU,what-kinds-of-things-should-i-use-celery-forqVhUis-celery-multi-lingualqWhU7how-can-i-reuse-the-same-connection-when-applying-tasksqXhU2can-i-schedule-tasks-to-execute-at-a-specific-timeqYhUwhy-won-t-my-periodic-task-runqZhU*celeryd-is-not-doing-anything-just-hangingq[hU rabbitmq-faqq\hUwhy-is-django-a-dependencyq]hUshould-i-use-retry-or-acks-lateq^hUEhow-dow-i-get-the-result-of-a-task-if-i-have-the-id-that-points-thereq_h U=why-aren-t-my-remote-control-commands-received-by-all-workersq`h!U7can-i-change-the-interval-of-a-periodic-task-at-runtimeqah"Uis-celery-dependent-on-pickleqbh#U why-won-t-celeryd-run-on-freebsdqch$Urabbits-and-warrensqdh%Umisconceptionsqeh&Uis-celery-for-django-onlyqfh'Uusing-other-queuesqgh(Uwhy-aren-t-my-tasks-processedqhh)U$can-i-use-celery-with-activemq-stompqih*U$can-i-cancel-the-execution-of-a-taskqjh+U sqlalchemyqkh,UFi-ve-discarded-messages-but-there-are-still-messages-left-in-the-queueqlh-U"how-do-i-discard-all-waiting-tasksqmh.Ucan-i-use-celery-without-djangoqnh/Udo-i-have-to-use-amqp-rabbitmqqoh0U!how-do-i-shut-down-celeryd-safelyqph1Ucan-i-execute-a-task-by-nameqqh2Ubrokersqrh3Ufrequently-asked-questionsqsh4Ustandard-exchange-typesqth5UHgenerating-a-template-in-a-task-doesn-t-seem-to-respect-my-i18n-settingsquh6U/mysql-is-throwing-deadlock-errors-what-can-i-doqvh7Uwhy-is-rabbitmq-crashingqwh8Uwhy-won-t-my-task-runqxh9U,why-is-task-delay-apply-celeryd-just-hangingqyh:Uflexible-routing-modelqzh;Ulouieq{h(hj9hj7ubaubaubh)r?}r@(hXParallel execution. hj/hhhhh}rA(h]h]h]h]h]uhNhhh}]rBh)rC}rD(hXParallel execution.rEhj?hhhhh}rF(h]h]h]h]h]uhK#h}]rGhXParallel execution.rHrI}rJ(hjEhjCubaubaubeubeubeubh)rK}rL(hUhhhhhhh}rM(h]h]h]h]rNheah]rOh%auhK'hhh}]rP(h)rQ}rR(hXMisconceptionsrShjKhhhhh}rT(h]h]h]h]h]uhK'hhh}]rUhXMisconceptionsrVrW}rX(hjShjQubaubh)rY}rZ(hUhjKhhhhh}r[(h]h]h]h]r\hbah]r]h"auhK*hhh}]r^(h)r_}r`(hXIs celery dependent on pickle?rahjYhhhhh}rb(h]h]h]h]h]uhK*hhh}]rchXIs celery dependent on pickle?rdre}rf(hjahj_ubaubh)rg}rh(hX**Answer:** No.rihjYhhhhh}rj(h]h]h]h]h]uhK,hhh}]rk(h)rl}rm(hX **Answer:**h}rn(h]h]h]h]h]uhjgh}]rohXAnswer:rprq}rr(hUhjlubahhubhX No.rsrt}ru(hX No.hjgubeubh)rv}rw(hXvCelery can support any serialization scheme and has support for JSON/YAML and Pickle by default. You can even send one task using pickle, and another one with JSON seamlessly, this is because every task is associated with a content-type. The default serialization scheme is pickle because it's the most used, and it has support for sending complex objects as task arguments.rxhjYhhhhh}ry(h]h]h]h]h]uhK.hhh}]rzhXvCelery can support any serialization scheme and has support for JSON/YAML and Pickle by default. You can even send one task using pickle, and another one with JSON seamlessly, this is because every task is associated with a content-type. The default serialization scheme is pickle because it's the most used, and it has support for sending complex objects as task arguments.r{r|}r}(hjxhjvubaubh)r~}r(hXYou can set a global default serializer, the default serializer for a particular Task, or even what serializer to use when sending a single task instance.rhjYhhhhh}r(h]h]h]h]h]uhK4hhh}]rhXYou can set a global default serializer, the default serializer for a particular Task, or even what serializer to use when sending a single task instance.rr}r(hjhj~ubaubeubh)r}r(hUhjKhhhhh}r(h]h]h]h]rhfah]rh&auhK9hhh}]r(h)r}r(hXIs celery for Django only?rhjhhhhh}r(h]h]h]h]h]uhK9hhh}]rhXIs celery for Django only?rr}r(hjhjubaubh)r}r(hX**Answer:** No.rhjhhhhh}r(h]h]h]h]h]uhK;hhh}]r(h)r}r(hX **Answer:**h}r(h]h]h]h]h]uhjh}]rhXAnswer:rr}r(hUhjubahhubhX No.rr}r(hX No.hjubeubh)r}r(hX5You can use all of the features without using Django.rhjhhhhh}r(h]h]h]h]h]uhK=hhh}]rhX5You can use all of the features without using Django.rr}r(hjhjubaubeubh)r}r(hUhjKhhhhh}r(h]h]h]h]rh]ah]rhauhKAhhh}]r(h)r}r(hXWhy is Django a dependency?rhjhhhhh}r(h]h]h]h]h]uhKAhhh}]rhXWhy is Django a dependency?rr}r(hjhjubaubh)r}r(hXCelery uses the Django ORM for database access when using the database result backend, the Django cache framework when using the cache result backend, and the Django signal dispatch mechanisms for signaling.rhjhhhhh}r(h]h]h]h]h]uhKChhh}]rhXCelery uses the Django ORM for database access when using the database result backend, the Django cache framework when using the cache result backend, and the Django signal dispatch mechanisms for signaling.rr}r(hjhjubaubh)r}r(hXThis doesn't mean you need to have a Django project to use celery, it just means that sometimes we use internal Django components.rhjhhhhh}r(h]h]h]h]h]uhKGhhh}]rhXThis doesn't mean you need to have a Django project to use celery, it just means that sometimes we use internal Django components.rr}r(hjhjubaubh)r}r(hXThe long term plan is to replace these with other solutions, (e.g. `SQLAlchemy`_ as the ORM, and `louie`_, for signaling). The celery distribution will be split into two:hjhhhhh}r(h]h]h]h]h]uhKJhhh}]r(hXCThe long term plan is to replace these with other solutions, (e.g. rr}r(hXCThe long term plan is to replace these with other solutions, (e.g. hjubh)r}r(hX `SQLAlchemy`_hKhjhhh}r(UnameX SQLAlchemyhXhttp://www.sqlalchemy.org/rh]h]h]h]h]uh}]rhX SQLAlchemyrr}r(hUhjubaubhX as the ORM, and rr}r(hX as the ORM, and hjubh)r}r(hX`louie`_hKhjhhh}r(UnameXlouierhX"http://pypi.python.org/pypi/Louie/rh]h]h]h]h]uh}]rhXlouierr}r(hUhjubaubhXA, for signaling). The celery distribution will be split into two:rr}r(hXA, for signaling). The celery distribution will be split into two:hjubeubh)r}r(hUhjhNhhh}r(hX*h]h]h]h]h]uhNhhh}]r(h)r}r(hX?celery The core. Using SQLAlchemy for the database backend. h}r(h]h]h]h]h]uhjh}]r(h)r}r(hXceleryrhjhhhhh}r(h]h]h]h]h]uhKMh}]rhXceleryrr}r(hjhjubaubcdocutils.nodes block_quote r)r}r(hUh}r(h]h]h]h]h]uhjh}]rh)r}r(hX4The core. Using SQLAlchemy for the database backend.rhjhhhhh}r(h]h]h]h]h]uhKOh}]rhX4The core. Using SQLAlchemy for the database backend.rr}r(hjhjubaubahU block_quoterubehhubh)r}r(hXadjango-celery Celery integration for Django, using the Django ORM for the database backend. h}r(h]h]h]h]h]uhjh}]r(h)r }r (hX django-celeryr hjhhhhh}r (h]h]h]h]h]uhKQh}]r hX django-celeryrr}r(hj hj ubaubj)r}r(hUh}r(h]h]h]h]h]uhjh}]rh)r}r(hXMCelery integration for Django, using the Django ORM for the database backend.rhjhhhhh}r(h]h]h]h]h]uhKSh}]rhXMCelery integration for Django, using the Django ORM for the database backend.rr}r(hjhjubaubahjubehhubeubh)r}r(hXyWe're currently seeking people with `SQLAlchemy`_ experience, so please contact the project if you want this done sooner.hjhhhhh}r(h]h]h]h]h]uhKVhhh}]r (hX$We're currently seeking people with r!r"}r#(hX$We're currently seeking people with hjubh)r$}r%(hX `SQLAlchemy`_hKhjhhh}r&(UnameX SQLAlchemyhjh]h]h]h]h]uh}]r'hX SQLAlchemyr(r)}r*(hUhj$ubaubhXH experience, so please contact the project if you want this done sooner.r+r,}r-(hXH experience, so please contact the project if you want this done sooner.hjubeubh)r.}r/(hXThe reason for the split is for purity only. It shouldn't affect you much as a user, so please don't worry about the Django dependency, just have a good time using celery.r0hjhhhhh}r1(h]h]h]h]h]uhKYhhh}]r2hXThe reason for the split is for purity only. It shouldn't affect you much as a user, so please don't worry about the Django dependency, just have a good time using celery.r3r4}r5(hj0hj.ubaubh)r6}r7(hX,.. _`SQLAlchemy`: http://www.sqlalchemy.org/hKhjhhhhh}r8(hjh]r9hkah]h]h]h]r:h+auhK]hhh}]ubh)r;}r<(hX/.. _`louie`: http://pypi.python.org/pypi/Louie/hKhjhhhhh}r=(hjh]r>h{ah]h]h]h]r?h;auhK^hhh}]ubeubh)r@}rA(hUhjKhhhhh}rB(h]h]h]h]rChoah]rDh/auhKbhhh}]rE(h)rF}rG(hXDo I have to use AMQP/RabbitMQ?rHhj@hhhhh}rI(h]h]h]h]h]uhKbhhh}]rJhXDo I have to use AMQP/RabbitMQ?rKrL}rM(hjHhjFubaubh)rN}rO(hX**Answer**: No.rPhj@hhhhh}rQ(h]h]h]h]h]uhKdhhh}]rR(h)rS}rT(hX **Answer**h}rU(h]h]h]h]h]uhjNh}]rVhXAnswerrWrX}rY(hUhjSubahhubhX: No.rZr[}r\(hX: No.hjNubeubh)r]}r^(hXEYou can also use Redis or an SQL database, see `Using other queues`_.hj@hhhhh}r_(h]h]h]h]h]uhKfhhh}]r`(hX/You can also use Redis or an SQL database, see rarb}rc(hX/You can also use Redis or an SQL database, see hj]ubh)rd}re(hX`Using other queues`_hKhj]hhh}rf(UnameXUsing other queueshX7http://ask.github.com/celery/tutorials/otherqueues.htmlrgh]h]h]h]h]uh}]rhhXUsing other queuesrirj}rk(hUhjdubaubhX.rl}rm(hX.hj]ubeubh)rn}ro(hXU.. _`Using other queues`: http://ask.github.com/celery/tutorials/otherqueues.htmlhKhj@hhhhh}rp(hjgh]rqhgah]h]h]h]rrh'auhKihhh}]ubh)rs}rt(hX?Redis or a database won't perform as well as an AMQP broker. If you have strict reliability requirements you are encouraged to use RabbitMQ or another AMQP broker. Redis/database also use polling, so they are likely to consume more resources. However, if you for some reason are not able to use AMQP, feel free to use these alternatives. They will probably work fine for most use cases, and note that the above points are not specific to celery; If using Redis/database as a queue worked fine for you before, it probably will now. You can always upgrade later if you need to.ruhj@hhhhh}rv(h]h]h]h]h]uhKlhhh}]rwhX?Redis or a database won't perform as well as an AMQP broker. If you have strict reliability requirements you are encouraged to use RabbitMQ or another AMQP broker. Redis/database also use polling, so they are likely to consume more resources. However, if you for some reason are not able to use AMQP, feel free to use these alternatives. They will probably work fine for most use cases, and note that the above points are not specific to celery; If using Redis/database as a queue worked fine for you before, it probably will now. You can always upgrade later if you need to.rxry}rz(hjuhjsubaubeubh)r{}r|(hUhjKhhhhh}r}(h]h]h]h]r~hWah]rhauhKwhhh}]r(h)r}r(hXIs celery multi-lingual?rhj{hhhhh}r(h]h]h]h]h]uhKwhhh}]rhXIs celery multi-lingual?rr}r(hjhjubaubh)r}r(hX**Answer:** Yes.rhj{hhhhh}r(h]h]h]h]h]uhKyhhh}]r(h)r}r(hX **Answer:**h}r(h]h]h]h]h]uhjh}]rhXAnswer:rr}r(hUhjubahhubhX Yes.rr}r(hX Yes.hjubeubh)r}r(hXceleryd is an implementation of celery in python. If the language has an AMQP client, there shouldn't be much work to create a worker in your language. A celery worker is just a program connecting to the broker to consume messages. There's no other communication involved.rhj{hhhhh}r(h]h]h]h]h]uhK{hhh}]rhXceleryd is an implementation of celery in python. If the language has an AMQP client, there shouldn't be much work to create a worker in your language. A celery worker is just a program connecting to the broker to consume messages. There's no other communication involved.rr}r(hjhjubaubh)r}r(hXAlso, there's another way to be language indepedent, and that is to use REST tasks, instead of your tasks being functions, they're URLs. With this information you can even create simple web servers that enable preloading of code. See: `User Guide: Remote Tasks`_.hj{hhhhh}r(h]h]h]h]h]uhKhhh}]r(hXAlso, there's another way to be language indepedent, and that is to use REST tasks, instead of your tasks being functions, they're URLs. With this information you can even create simple web servers that enable preloading of code. See: rr}r(hXAlso, there's another way to be language indepedent, and that is to use REST tasks, instead of your tasks being functions, they're URLs. With this information you can even create simple web servers that enable preloading of code. See: hjubh)r}r(hX`User Guide: Remote Tasks`_hKhjhhh}r(UnameXUser Guide: Remote TaskshX8http://ask.github.com/celery/userguide/remote-tasks.htmlrh]h]h]h]h]uh}]rhXUser Guide: Remote Tasksrr}r(hUhjubaubhX.r}r(hX.hjubeubh)r}r(hX\.. _`User Guide: Remote Tasks`: http://ask.github.com/celery/userguide/remote-tasks.htmlhKhj{hhhhh}r(hjh]rhQah]h]h]h]rhauhKhhh}]ubeubeubh)r}r(hUhhhhhhh}r(h]h]h]h]rhRah]rhauhKhhh}]r(h)r}r(hXTroubleshootingrhjhhhhh}r(h]h]h]h]h]uhKhhh}]rhXTroubleshootingrr}r(hjhjubaubh)r}r(hUhKhjhhhhh}r(h]h]h]h]rhvah]rh6auhKhhh}]r(h)r}r(hX1MySQL is throwing deadlock errors, what can I do?rhjhhhhh}r(h]h]h]h]h]uhKhhh}]rhX1MySQL is throwing deadlock errors, what can I do?rr}r(hjhjubaubh)r}r(hX**Answer:** MySQL has default isolation level set to ``REPEATABLE-READ``, if you don't really need that, set it to ``READ-COMMITTED``. You can do that by adding the following to your ``my.cnf``::hjhhhhh}r(h]h]h]h]h]uhKhhh}]r(h)r}r(hX **Answer:**h}r(h]h]h]h]h]uhjh}]rhXAnswer:rr}r(hUhjubahhubhX* MySQL has default isolation level set to rr}r(hX* MySQL has default isolation level set to hjubcdocutils.nodes literal r)r}r(hX``REPEATABLE-READ``h}r(h]h]h]h]h]uhjh}]rhXREPEATABLE-READrr}r(hUhjubahUliteralrubhX+, if you don't really need that, set it to rr}r(hX+, if you don't really need that, set it to hjubj)r}r(hX``READ-COMMITTED``h}r(h]h]h]h]h]uhjh}]rhXREAD-COMMITTEDrr}r(hUhjubahjubhX2. You can do that by adding the following to your rr}r(hX2. You can do that by adding the following to your hjubj)r}r(hX ``my.cnf``h}r(h]h]h]h]h]uhjh}]rhXmy.cnfrr}r(hUhjubahjubhX:r}r(hX:hjubeubcdocutils.nodes literal_block r)r}r(hX/[mysqld] transaction-isolation = READ-COMMITTEDhjhhhU literal_blockrh}r(U xml:spacerUpreserverh]h]h]h]h]uhKhhh}]rhX/[mysqld] transaction-isolation = READ-COMMITTEDrr}r (hUhjubaubh)r }r (hXFor more information about InnoDBs transaction model see `MySQL - The InnoDB Transaction Model and Locking`_ in the MySQL user manual.hjhhhhh}r (h]h]h]h]h]uhKhhh}]r (hX9For more information about InnoDBs transaction model see rr}r(hX9For more information about InnoDBs transaction model see hj ubh)r}r(hX3`MySQL - The InnoDB Transaction Model and Locking`_hKhj hhh}r(UnameX0MySQL - The InnoDB Transaction Model and LockinghXDhttp://dev.mysql.com/doc/refman/5.1/en/innodb-transaction-model.htmlrh]h]h]h]h]uh}]rhX0MySQL - The InnoDB Transaction Model and Lockingrr}r(hUhjubaubhX in the MySQL user manual.rr}r(hX in the MySQL user manual.hj ubeubh)r}r(hX=(Thanks to Honza Kral and Anton Tsigularov for this solution)rhjhhhhh}r(h]h]h]h]h]uhKhhh}]r hX=(Thanks to Honza Kral and Anton Tsigularov for this solution)r!r"}r#(hjhjubaubh)r$}r%(hX|.. _`MySQL - The InnoDB Transaction Model and Locking`: http://dev.mysql.com/doc/refman/5.1/en/innodb-transaction-model.htmlhKhjhhhhh}r&(hjh]r'h|ah]h]h]h]r(h}r?(hXt**Answer:** See `MySQL is throwing deadlock errors, what can I do?`_. or `Why is Task.delay/apply\* just hanging?`. hj8hhhUdefinition_list_itemr@h}rA(h]h]h]h]h]uhKh}]rB(cdocutils.nodes term rC)rD}rE(hXE**Answer:** See `MySQL is throwing deadlock errors, what can I do?`_.rFhj>hhhUtermrGh}rH(h]h]h]h]h]uhKh}]rI(h)rJ}rK(hX **Answer:**h}rL(h]h]h]h]h]uhjDh}]rMhXAnswer:rNrO}rP(hUhjJubahhubhX See rQrR}rS(hX See hjDubh)rT}rU(hX4`MySQL is throwing deadlock errors, what can I do?`_hKhjDhhh}rV(UnameX1MySQL is throwing deadlock errors, what can I do?h]h]h]h]h]UrefidrWhvuh}]rXhX1MySQL is throwing deadlock errors, what can I do?rYrZ}r[(hUhjTubaubhX.r\}r](hX.hjDubeubcdocutils.nodes definition r^)r_}r`(hUh}ra(h]h]h]h]h]uhj>h}]rbh)rc}rd(hX-or `Why is Task.delay/apply\* just hanging?`.hj_hhhhh}re(h]h]h]h]h]uhKh}]rf(hXor rgrh}ri(hXor hjcubcdocutils.nodes title_reference rj)rk}rl(hX)`Why is Task.delay/apply\* just hanging?`h}rm(h]h]h]h]h]uhjch}]rnhX&Why is Task.delay/apply* just hanging?rorp}rq(hUhjkubahUtitle_referencerrubhX.rs}rt(hX.hjcubeubahU definitionruubeubaubeubh)rv}rw(hUhjhhhhh}rx(h]h]h]h]ryhyah]rzh9auhKhhh}]r{(h)r|}r}(hX/Why is Task.delay/apply\*/celeryd just hanging?r~hjvhhhhh}r(h]h]h]h]h]uhKhhh}]rhX.Why is Task.delay/apply*/celeryd just hanging?rr}r(hX/Why is Task.delay/apply\*/celeryd just hanging?rhj|ubaubh)r}r(hXt**Answer:** There is a bug in some AMQP clients that will make it hang if it's not able to authenticate the current user, the password doesn't match or the user does not have access to the virtual host specified. Be sure to check your broker logs (for RabbitMQ that is ``/var/log/rabbitmq/rabbit.log`` on most systems), it usually contains a message describing the reason.hjvhhhhh}r(h]h]h]h]h]uhKhhh}]r(h)r}r(hX **Answer:**h}r(h]h]h]h]h]uhjh}]rhXAnswer:rr}r(hUhjubahhubhX There is a bug in some AMQP clients that will make it hang if it's not able to authenticate the current user, the password doesn't match or the user does not have access to the virtual host specified. Be sure to check your broker logs (for RabbitMQ that is rr}r(hX There is a bug in some AMQP clients that will make it hang if it's not able to authenticate the current user, the password doesn't match or the user does not have access to the virtual host specified. Be sure to check your broker logs (for RabbitMQ that is hjubj)r}r(hX ``/var/log/rabbitmq/rabbit.log``h}r(h]h]h]h]h]uhjh}]rhX/var/log/rabbitmq/rabbit.logrr}r(hUhjubahjubhXG on most systems), it usually contains a message describing the reason.rr}r(hXG on most systems), it usually contains a message describing the reason.hjubeubeubh)r}r(hUhjhhhhh}r(h]h]h]h]rhcah]rh#auhKhhh}]r(h)r}r(hX!Why won't celeryd run on FreeBSD?rhjhhhhh}r(h]h]h]h]h]uhKhhh}]rhX!Why won't celeryd run on FreeBSD?rr}r(hjhjubaubh)r}r(hX**Answer:** multiprocessing.Pool requires a working POSIX semaphore implementation which isn't enabled in FreeBSD by default. You have to enable POSIX semaphores in the kernel and manually recompile multiprocessing.hjhhhhh}r(h]h]h]h]h]uhKhhh}]r(h)r}r(hX **Answer:**h}r(h]h]h]h]h]uhjh}]rhXAnswer:rr}r(hUhjubahhubhX multiprocessing.Pool requires a working POSIX semaphore implementation which isn't enabled in FreeBSD by default. You have to enable POSIX semaphores in the kernel and manually recompile multiprocessing.rr}r(hX multiprocessing.Pool requires a working POSIX semaphore implementation which isn't enabled in FreeBSD by default. You have to enable POSIX semaphores in the kernel and manually recompile multiprocessing.hjubeubh)r}r(hXLuckily, Viktor Petersson has written a tutorial to get you started with Celery on FreeBSD here: http://www.playingwithwire.com/2009/10/how-to-get-celeryd-to-work-on-freebsd/hjhhhhh}r(h]h]h]h]h]uhKhhh}]r(hXaLuckily, Viktor Petersson has written a tutorial to get you started with Celery on FreeBSD here: rr}r(hXaLuckily, Viktor Petersson has written a tutorial to get you started with Celery on FreeBSD here: hjubh)r}r(hXMhttp://www.playingwithwire.com/2009/10/how-to-get-celeryd-to-work-on-freebsd/rh}r(Urefurijh]h]h]h]h]uhjh}]rhXMhttp://www.playingwithwire.com/2009/10/how-to-get-celeryd-to-work-on-freebsd/rr}r(hUhjubahhubeubeubh)r}r(hUhjhhhhh}r(h]h]h]h]rhPah]rhauhKhhh}]r(h)r}r(hX9I'm having ``IntegrityError: Duplicate Key`` errors. Why?rhjhhhhh}r(h]h]h]h]h]uhKhhh}]r(hX I'm having rr}r(hX I'm having rhjubj)r}r(hX!``IntegrityError: Duplicate Key``rh}r(h]h]h]h]h]uhjh}]rhXIntegrityError: Duplicate Keyrr}r(hUhjubahjubhX errors. Why?rr}r(hX errors. Why?rhjubeubh)r}r(hX^**Answer:** See `MySQL is throwing deadlock errors, what can I do?`_. Thanks to howsthedotcom.hjhhhhh}r(h]h]h]h]h]uhKhhh}]r(h)r}r(hX **Answer:**h}r(h]h]h]h]h]uhjh}]rhXAnswer:rr}r(hUhjubahhubhX See rr}r(hX See hjubh)r}r(hX4`MySQL is throwing deadlock errors, what can I do?`_hKhjhhh}r(UnameX1MySQL is throwing deadlock errors, what can I do?h]h]h]h]h]jWhvuh}]rhX1MySQL is throwing deadlock errors, what can I do?rr}r(hUhjubaubhX. Thanks to howsthedotcom.rr}r(hX. Thanks to howsthedotcom.hjubeubeubh)r}r(hUhjhhhhh}r(h]h]h]h]rhhah]rh(auhKhhh}]r(h)r}r(hXWhy aren't my tasks processed?rhjhhhhh}r(h]h]h]h]h]uhKhhh}]rhXWhy aren't my tasks processed?rr}r(hjhjubaubh)r }r (hXy**Answer:** With RabbitMQ you can see how many consumers are currently receiving tasks by running the following command::hjhhhhh}r (h]h]h]h]h]uhKhhh}]r (h)r }r(hX **Answer:**h}r(h]h]h]h]h]uhj h}]rhXAnswer:rr}r(hUhj ubahhubhXm With RabbitMQ you can see how many consumers are currently receiving tasks by running the following command:rr}r(hXm With RabbitMQ you can see how many consumers are currently receiving tasks by running the following command:hj ubeubj)r}r(hXf$ rabbitmqctl list_queues -p name messages consumers Listing queues ... celery 2891 2hjhhhjh}r(jjh]h]h]h]h]uhKhhh}]rhXf$ rabbitmqctl list_queues -p name messages consumers Listing queues ... celery 2891 2rr}r(hUhjubaubh)r}r(hX}This shows that there's 2891 messages waiting to be processed in the task queue, and there are two consumers processing them.r hjhhhhh}r!(h]h]h]h]h]uhKhhh}]r"hX}This shows that there's 2891 messages waiting to be processed in the task queue, and there are two consumers processing them.r#r$}r%(hj hjubaubh)r&}r'(hXOne reason that the queue is never emptied could be that you have a stale celery process taking the messages hostage. This could happen if celeryd wasn't properly shut down.r(hjhhhhh}r)(h]h]h]h]h]uhKhhh}]r*hXOne reason that the queue is never emptied could be that you have a stale celery process taking the messages hostage. This could happen if celeryd wasn't properly shut down.r+r,}r-(hj(hj&ubaubh)r.}r/(hXWhen a message is recieved by a worker the broker waits for it to be acknowledged before marking the message as processed. The broker will not re-send that message to another consumer until the consumer is shut down properly.r0hjhhhhh}r1(h]h]h]h]h]uhKhhh}]r2hXWhen a message is recieved by a worker the broker waits for it to be acknowledged before marking the message as processed. The broker will not re-send that message to another consumer until the consumer is shut down properly.r3r4}r5(hj0hj.ubaubh)r6}r7(hXPIf you hit this problem you have to kill all workers manually and restart them::hjhhhhh}r8(h]h]h]h]h]uhKhhh}]r9hXOIf you hit this problem you have to kill all workers manually and restart them:r:r;}r<(hXOIf you hit this problem you have to kill all workers manually and restart them:hj6ubaubj)r=}r>(hX7ps auxww | grep celeryd | awk '{print $2}' | xargs killhjhhhjh}r?(jjh]h]h]h]h]uhKhhh}]r@hX7ps auxww | grep celeryd | awk '{print $2}' | xargs killrArB}rC(hUhj=ubaubh)rD}rE(hXYou might have to wait a while until all workers have finished the work they're doing. If it's still hanging after a long time you can kill them by force with::hjhhhhh}rF(h]h]h]h]h]uhKhhh}]rGhXYou might have to wait a while until all workers have finished the work they're doing. If it's still hanging after a long time you can kill them by force with:rHrI}rJ(hXYou might have to wait a while until all workers have finished the work they're doing. If it's still hanging after a long time you can kill them by force with:hjDubaubj)rK}rL(hX:ps auxww | grep celeryd | awk '{print $2}' | xargs kill -9hjhhhjh}rM(jjh]h]h]h]h]uhKhhh}]rNhX:ps auxww | grep celeryd | awk '{print $2}' | xargs kill -9rOrP}rQ(hUhjKubaubeubh)rR}rS(hUhKhjhhhhh}rT(h]h]h]h]rUhxah]rVh8auhKhhh}]rW(h)rX}rY(hXWhy won't my Task run?rZhjRhhhhh}r[(h]h]h]h]h]uhKhhh}]r\hXWhy won't my Task run?r]r^}r_(hjZhjXubaubh)r`}ra(hX**Answer:** Did you register the task in the applications ``tasks.py`` module? (or in some other module Django loads by default, like ``models.py``?). Also there might be syntax errors preventing the tasks module being imported.hjRhhhhh}rb(h]h]h]h]h]uhKhhh}]rc(h)rd}re(hX **Answer:**h}rf(h]h]h]h]h]uhj`h}]rghXAnswer:rhri}rj(hUhjdubahhubhX/ Did you register the task in the applications rkrl}rm(hX/ Did you register the task in the applications hj`ubj)rn}ro(hX ``tasks.py``h}rp(h]h]h]h]h]uhj`h}]rqhXtasks.pyrrrs}rt(hUhjnubahjubhX@ module? (or in some other module Django loads by default, like rurv}rw(hX@ module? (or in some other module Django loads by default, like hj`ubj)rx}ry(hX ``models.py``h}rz(h]h]h]h]h]uhj`h}]r{hX models.pyr|r}}r~(hUhjxubahjubhXQ?). Also there might be syntax errors preventing the tasks module being imported.rr}r(hXQ?). Also there might be syntax errors preventing the tasks module being imported.hj`ubeubh)r}r(hXRYou can find out if celery is able to run the task by executing the task manually:rhjRhhhhh}r(h]h]h]h]h]uhKhhh}]rhXRYou can find out if celery is able to run the task by executing the task manually:rr}r(hjhjubaubcdocutils.nodes doctest_block r)r}r(hXE>>> from myapp.tasks import MyPeriodicTask >>> MyPeriodicTask.delay()hjRhNhU doctest_blockrh}r(jjh]h]h]h]h]uhNhhh}]rhXE>>> from myapp.tasks import MyPeriodicTask >>> MyPeriodicTask.delay()rr}r(hUhjubaubh)r}r(hXaWatch celeryds logfile to see if it's able to find the task, or if some other error is happening.rhjRhhhhh}r(h]h]h]h]h]uhKhhh}]rhXaWatch celeryds logfile to see if it's able to find the task, or if some other error is happening.rr}r(hjhjubaubeubh)r}r(hUhjhhhhh}r(h]h]h]h]rhZah]rhauhKhhh}]r(h)r}r(hXWhy won't my Periodic Task run?rhjhhhhh}r(h]h]h]h]h]uhKhhh}]rhXWhy won't my Periodic Task run?rr}r(hjhjubaubh)r}r(hX***Answer:** See `Why won't my Task run?`_.rhjhhhhh}r(h]h]h]h]h]uhKhhh}]r(h)r}r(hX **Answer:**h}r(h]h]h]h]h]uhjh}]rhXAnswer:rr}r(hUhjubahhubhX See rr}r(hX See hjubh)r}r(hX`Why won't my Task run?`_hKhjhhh}r(UnameXWhy won't my Task run?h]h]h]h]h]jWhxuh}]rhXWhy won't my Task run?rr}r(hUhjubaubhX.r}r(hX.hjubeubeubh)r}r(hUhjhhhhh}r(h]h]h]h]rhmah]rh-auhKhhh}]r(h)r}r(hX#How do I discard all waiting tasks?rhjhhhhh}r(h]h]h]h]h]uhKhhh}]rhX#How do I discard all waiting tasks?rr}r(hjhjubaubh)r}r(hX9**Answer:** Use ``celery.task.discard_all()``, like this:rhjhhhhh}r(h]h]h]h]h]uhKhhh}]r(h)r}r(hX **Answer:**h}r(h]h]h]h]h]uhjh}]rhXAnswer:rr}r(hUhjubahhubhX Use rr}r(hX Use hjubj)r}r(hX``celery.task.discard_all()``h}r(h]h]h]h]h]uhjh}]rhXcelery.task.discard_all()rr}r(hUhjubahjubhX , like this:rr}r(hX , like this:hjubeubj)r}r(hX>>>> from celery.task import discard_all >>> discard_all() 1753hjhNhjh}r(jjh]h]h]h]h]uhNhhh}]rhX>>>> from celery.task import discard_all >>> discard_all() 1753rr}r(hUhjubaubh)r}r(hX6The number ``1753`` is the number of messages deleted.rhjhhhhh}r(h]h]h]h]h]uhKhhh}]r(hX The number rr}r(hX The number hjubj)r}r(hX``1753``h}r(h]h]h]h]h]uhjh}]rhX1753rr}r(hUhjubahjubhX# is the number of messages deleted.rr}r(hX# is the number of messages deleted.hjubeubh)r}r(hX`You can also start celeryd with the ``--discard`` argument which will accomplish the same thing.hjhhhhh}r(h]h]h]h]h]uhKhhh}]r(hX$You can also start celeryd with the rr}r(hX$You can also start celeryd with the hjubj)r}r (hX ``--discard``h}r (h]h]h]h]h]uhjh}]r hX --discardr r }r(hUhjubahjubhX/ argument which will accomplish the same thing.rr}r(hX/ argument which will accomplish the same thing.hjubeubeubh)r}r(hUhjhhhhh}r(h]h]h]h]rhlah]rh,auhMhhh}]r(h)r}r(hXHI've discarded messages, but there are still messages left in the queue?rhjhhhhh}r(h]h]h]h]h]uhMhhh}]rhXHI've discarded messages, but there are still messages left in the queue?rr}r(hjhjubaubh)r }r!(hX**Answer:** Tasks are acknowledged (removed from the queue) as soon as they are actually executed. After the worker has received a task, it will take some time until it is actually executed, especially if there are a lot of tasks already waiting for execution. Messages that are not acknowledged are hold on to by the worker until it closes the connection to the broker (AMQP server). When that connection is closed (e.g because the worker was stopped) the tasks will be re-sent by the broker to the next available worker (or the same worker when it has been restarted), so to properly purge the queue of waiting tasks you have to stop all the workers, and then discard the tasks using ``discard_all``.hjhhhhh}r"(h]h]h]h]h]uhMhhh}]r#(h)r$}r%(hX **Answer:**h}r&(h]h]h]h]h]uhj h}]r'hXAnswer:r(r)}r*(hUhj$ubahhubhX Tasks are acknowledged (removed from the queue) as soon as they are actually executed. After the worker has received a task, it will take some time until it is actually executed, especially if there are a lot of tasks already waiting for execution. Messages that are not acknowledged are hold on to by the worker until it closes the connection to the broker (AMQP server). When that connection is closed (e.g because the worker was stopped) the tasks will be re-sent by the broker to the next available worker (or the same worker when it has been restarted), so to properly purge the queue of waiting tasks you have to stop all the workers, and then discard the tasks using r+r,}r-(hX Tasks are acknowledged (removed from the queue) as soon as they are actually executed. After the worker has received a task, it will take some time until it is actually executed, especially if there are a lot of tasks already waiting for execution. Messages that are not acknowledged are hold on to by the worker until it closes the connection to the broker (AMQP server). When that connection is closed (e.g because the worker was stopped) the tasks will be re-sent by the broker to the next available worker (or the same worker when it has been restarted), so to properly purge the queue of waiting tasks you have to stop all the workers, and then discard the tasks using hj ubj)r.}r/(hX``discard_all``h}r0(h]h]h]h]h]uhj h}]r1hX discard_allr2r3}r4(hUhj.ubahjubhX.r5}r6(hX.hj ubeubeubh)r7}r8(hUhjhhhhh}r9(h]h]h]h]r:hNah]r;hauhMhhh}]r<(h)r=}r>(hX@Windows: The ``-B`` / ``--beat`` option to celeryd doesn't work?r?hj7hhhhh}r@(h]h]h]h]h]uhMhhh}]rA(hX Windows: The rBrC}rD(hX Windows: The rEhj=ubj)rF}rG(hX``-B``rHh}rI(h]h]h]h]h]uhj=h}]rJhX-BrKrL}rM(hUhjFubahjubhX / rNrO}rP(hX / rQhj=ubj)rR}rS(hX ``--beat``rTh}rU(h]h]h]h]h]uhj=h}]rVhX--beatrWrX}rY(hUhjRubahjubhX option to celeryd doesn't work?rZr[}r\(hX option to celeryd doesn't work?r]hj=ubeubh)r^}r_(hXZ**Answer**: That's right. Run ``celerybeat`` and ``celeryd`` as separate services instead.hj7hhhhh}r`(h]h]h]h]h]uhMhhh}]ra(h)rb}rc(hX **Answer**h}rd(h]h]h]h]h]uhj^h}]rehXAnswerrfrg}rh(hUhjbubahhubhX: That's right. Run rirj}rk(hX: That's right. Run hj^ubj)rl}rm(hX``celerybeat``h}rn(h]h]h]h]h]uhj^h}]rohX celerybeatrprq}rr(hUhjlubahjubhX and rsrt}ru(hX and hj^ubj)rv}rw(hX ``celeryd``h}rx(h]h]h]h]h]uhj^h}]ryhXcelerydrzr{}r|(hUhjvubahjubhX as separate services instead.r}r~}r(hX as separate services instead.hj^ubeubeubeubh)r}r(hUhhhhhhh}r(h]h]h]h]rhHah]rhauhMhhh}]r(h)r}r(hXTasksrhjhhhhh}r(h]h]h]h]h]uhMhhh}]rhXTasksrr}r(hjhjubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhXah]rhauhMhhh}]r(h)r}r(hX8How can I reuse the same connection when applying tasks?rhjhhhhh}r(h]h]h]h]h]uhMhhh}]rhX8How can I reuse the same connection when applying tasks?rr}r(hjhjubaubh)r}r(hX+**Answer**: See :doc:`userguide/executing`.rhjhhhhh}r(h]h]h]h]h]uhMhhh}]r(h)r}r(hX **Answer**h}r(h]h]h]h]h]uhjh}]rhXAnswerrr}r(hUhjubahhubhX: See rr}r(hX: See hjubcsphinx.addnodes pending_xref r)r}r(hX:doc:`userguide/executing`rhjhhhU pending_xrefrh}r(UreftypeXdocrUrefwarnrU reftargetrXuserguide/executingU refdomainUh]h]U refexplicith]h]h]UrefdocrXfaqruhMh}]rj)r}r(hjh}r(h]h]r(Uxrefrjeh]h]h]uhjh}]rhXuserguide/executingrr}r(hUhjubahjubaubhX.r}r(hX.hjubeubeubh)r}r(hUhjhhhhh}r(h]h]h]h]rhqah]rh1auhMhhh}]r(h)r}r(hXCan I execute a task by name?rhjhhhhh}r(h]h]h]h]h]uhMhhh}]rhXCan I execute a task by name?rr}r(hjhjubaubh)r}r(hX**Answer**: Yes. Use :func:`celery.execute.send_task`. You can also execute a task by name from any language that has an AMQP client.hjhhhhh}r(h]h]h]h]h]uhM hhh}]r(h)r}r(hX **Answer**h}r(h]h]h]h]h]uhjh}]rhXAnswerrr}r(hUhjubahhubhX : Yes. Use rr}r(hX : Yes. Use hjubj)r}r(hX :func:`celery.execute.send_task`rhjhhhjh}r(UreftypeXfuncjjXcelery.execute.send_taskU refdomainXpyrh]h]U refexplicith]h]h]jjUpy:classrNU py:modulerNuhM h}]rj)r}r(hjh}r(h]h]r(jjXpy-funcreh]h]h]uhjh}]rhXcelery.execute.send_task()rr}r(hUhjubahjubaubhXP. You can also execute a task by name from any language that has an AMQP client.rr}r(hXP. You can also execute a task by name from any language that has an AMQP client.hjubeubj)r}r(hX>>> from celery.execute import send_task >>> send_task("tasks.add", args=[2, 2], kwargs={}) hjhNhjh}r(jjh]h]h]h]h]uhNhhh}]rhX>>> from celery.execute import send_task >>> send_task("tasks.add", args=[2, 2], kwargs={}) rr}r(hUhjubaubeubeubh)r}r(hUhhhhhhh}r(h]h]h]h]rhMah]rh auhM)hhh}]r(h)r}r(hXResultsrhjhhhhh}r(h]h]h]h]h]uhM)hhh}]rhXResultsrr}r(hjhjubaubh)r}r(hUhjhhhhh}r (h]h]h]h]r h_ah]r hauhM,hhh}]r (h)r }r(hXFHow dow I get the result of a task if I have the ID that points there?rhjhhhhh}r(h]h]h]h]h]uhM,hhh}]rhXFHow dow I get the result of a task if I have the ID that points there?rr}r(hjhj ubaubh)r}r(hX&**Answer**: Use ``Task.AsyncResult``::rhjhhhhh}r(h]h]h]h]h]uhM.hhh}]r(h)r}r(hX **Answer**h}r(h]h]h]h]h]uhjh}]rhXAnswerrr}r (hUhjubahhubhX: Use r!r"}r#(hX: Use hjubj)r$}r%(hX``Task.AsyncResult``h}r&(h]h]h]h]h]uhjh}]r'hXTask.AsyncResultr(r)}r*(hUhj$ubahjubhX:r+}r,(hX:hjubeubj)r-}r.(hX9>>> result = MyTask.AsyncResult(task_id) >>> result.get()hjhhhjh}r/(jjh]h]h]h]h]uhM0hhh}]r0hX9>>> result = MyTask.AsyncResult(task_id) >>> result.get()r1r2}r3(hUhj-ubaubh)r4}r5(hXlThis will give you a :class:`celery.result.BaseAsyncResult` instance using the tasks current result backend.hjhhhhh}r6(h]h]h]h]h]uhM3hhh}]r7(hXThis will give you a r8r9}r:(hXThis will give you a hj4ubj)r;}r<(hX&:class:`celery.result.BaseAsyncResult`r=hj4hhhjh}r>(UreftypeXclassjjXcelery.result.BaseAsyncResultU refdomainXpyr?h]h]U refexplicith]h]h]jjjNjNuhM3h}]r@j)rA}rB(hj=h}rC(h]h]rD(jj?Xpy-classrEeh]h]h]uhj;h}]rFhXcelery.result.BaseAsyncResultrGrH}rI(hUhjAubahjubaubhX1 instance using the tasks current result backend.rJrK}rL(hX1 instance using the tasks current result backend.hj4ubeubh)rM}rN(hXoIf you need to specify a custom result backend you should use :class:`celery.result.BaseAsyncResult` directly::hjhhhhh}rO(h]h]h]h]h]uhM6hhh}]rP(hX>If you need to specify a custom result backend you should use rQrR}rS(hX>If you need to specify a custom result backend you should use hjMubj)rT}rU(hX&:class:`celery.result.BaseAsyncResult`rVhjMhhhjh}rW(UreftypeXclassjjXcelery.result.BaseAsyncResultU refdomainXpyrXh]h]U refexplicith]h]h]jjjNjNuhM6h}]rYj)rZ}r[(hjVh}r\(h]h]r](jjXXpy-classr^eh]h]h]uhjTh}]r_hXcelery.result.BaseAsyncResultr`ra}rb(hUhjZubahjubaubhX directly:rcrd}re(hX directly:hjMubeubj)rf}rg(hXq>>> from celery.result import BaseAsyncResult >>> result = BaseAsyncResult(task_id, backend=...) >>> result.get()hjhhhjh}rh(jjh]h]h]h]h]uhM9hhh}]rihXq>>> from celery.result import BaseAsyncResult >>> result = BaseAsyncResult(task_id, backend=...) >>> result.get()rjrk}rl(hUhjfubaubeubeubh)rm}rn(hUhhhhhhh}ro(h]h]h]h]rphrah]rqh2auhM>hhh}]rr(h)rs}rt(hXBrokersruhjmhhhhh}rv(h]h]h]h]h]uhM>hhh}]rwhXBrokersrxry}rz(hjuhjsubaubh)r{}r|(hUhjmhhhhh}r}(h]h]h]h]r~hwah]rh7auhMAhhh}]r(h)r}r(hXWhy is RabbitMQ crashing?rhj{hhhhh}r(h]h]h]h]h]uhMAhhh}]rhXWhy is RabbitMQ crashing?rr}r(hjhjubaubh)r}r(hXRabbitMQ will crash if it runs out of memory. This will be fixed in a future release of RabbitMQ. please refer to the RabbitMQ FAQ: http://www.rabbitmq.com/faq.html#node-runs-out-of-memoryhj{hhhhh}r(h]h]h]h]h]uhMChhh}]r(hXRabbitMQ will crash if it runs out of memory. This will be fixed in a future release of RabbitMQ. please refer to the RabbitMQ FAQ: rr}r(hXRabbitMQ will crash if it runs out of memory. This will be fixed in a future release of RabbitMQ. please refer to the RabbitMQ FAQ: hjubh)r}r(hX8http://www.rabbitmq.com/faq.html#node-runs-out-of-memoryrh}r(Urefurijh]h]h]h]h]uhjh}]rhX8http://www.rabbitmq.com/faq.html#node-runs-out-of-memoryrr}r(hUhjubahhubeubh)r}r(hX8Some common Celery misconfigurations can crash RabbitMQ:rhj{hhhhh}r(h]h]h]h]h]uhMGhhh}]rhX8Some common Celery misconfigurations can crash RabbitMQ:rr}r(hjhjubaubh)r}r(hUhj{hhhhh}r(hX*h]h]h]h]h]uhMIhhh}]rh)r}r(hXEvents. hjhhhhh}r(h]h]h]h]h]uhNhhh}]rh)r}r(hXEvents.rhjhhhhh}r(h]h]h]h]h]uhMIh}]rhXEvents.rr}r(hjhjubaubaubaubh)r}r(hXRunning ``celeryd`` with the ``-E``/``--events`` option will send messages for events happening inside of the worker. If these event messages are not consumed, you will eventually run out of memory.hj{hhhhh}r(h]h]h]h]h]uhMKhhh}]r(hXRunning rr}r(hXRunning hjubj)r}r(hX ``celeryd``h}r(h]h]h]h]h]uhjh}]rhXcelerydrr}r(hUhjubahjubhX with the rr}r(hX with the hjubj)r}r(hX``-E``h}r(h]h]h]h]h]uhjh}]rhX-Err}r(hUhjubahjubhX/r}r(hX/hjubj)r}r(hX ``--events``h}r(h]h]h]h]h]uhjh}]rhX--eventsrr}r(hUhjubahjubhX option will send messages for events happening inside of the worker. If these event messages are not consumed, you will eventually run out of memory.rr}r(hX option will send messages for events happening inside of the worker. If these event messages are not consumed, you will eventually run out of memory.hjubeubh)r}r(hXKEvents should only be enabled if you have an active monitor consuming them.rhj{hhhhh}r(h]h]h]h]h]uhMOhhh}]rhXKEvents should only be enabled if you have an active monitor consuming them.rr}r(hjhjubaubh)r}r(hUhj{hhhhh}r(hX*h]h]h]h]h]uhMQhhh}]rh)r}r(hXAMQP backend results. hjhhhhh}r(h]h]h]h]h]uhNhhh}]rh)r}r(hXAMQP backend results.rhjhhhhh}r(h]h]h]h]h]uhMQh}]rhXAMQP backend results.rr}r(hjhjubaubaubaubh)r}r(hXWhen running with the AMQP result backend, every task result will be sent as a message. If you don't collect these results, they will build up and RabbitMQ will eventually run out of memory.rhj{hhhhh}r(h]h]h]h]h]uhMShhh}]rhXWhen running with the AMQP result backend, every task result will be sent as a message. If you don't collect these results, they will build up and RabbitMQ will eventually run out of memory.rr}r(hjhjubaubh)r}r(hXXIf you don't use the results for a task, make sure you set the ``ignore_result`` option:hj{hhhhh}r(h]h]h]h]h]uhMWhhh}]r(hX?If you don't use the results for a task, make sure you set the rr}r(hX?If you don't use the results for a task, make sure you set the hjubj)r}r(hX``ignore_result``h}r(h]h]h]h]h]uhjh}]rhX ignore_resultrr}r(hUhjubahjubhX option:rr}r(hX option:hjubeubcdocutils.nodes comment r)r}r(hXpcode-block python @task(ignore_result=True) def mytask(): ... class MyTask(Task): ignore_result = Truehj{hhhUcommentrh}r (jjh]h]h]h]h]uhMbhhh}]r hXpcode-block python @task(ignore_result=True) def mytask(): ... class MyTask(Task): ignore_result = Truer r }r (hUhjubaubh)r}r(hXQResults can also be disabled globally using the ``CELERY_IGNORE_RESULT`` setting.hj{hhhhh}r(h]h]h]h]h]uhMchhh}]r(hX0Results can also be disabled globally using the rr}r(hX0Results can also be disabled globally using the hjubj)r}r(hX``CELERY_IGNORE_RESULT``h}r(h]h]h]h]h]uhjh}]rhXCELERY_IGNORE_RESULTrr}r(hUhjubahjubhX setting.rr}r(hX setting.hjubeubeubh)r}r (hUhjmhhhhh}r!(h]h]h]h]r"hiah]r#h)auhMghhh}]r$(h)r%}r&(hX%Can I use celery with ActiveMQ/STOMP?r'hjhhhhh}r((h]h]h]h]h]uhMghhh}]r)hX%Can I use celery with ActiveMQ/STOMP?r*r+}r,(hj'hj%ubaubh)r-}r.(hX**Answer**: Yes, but this is somewhat experimental for now. It is working ok in a test configuration, but it has not been tested in production like RabbitMQ has. If you have any problems with using STOMP and celery, please report the bugs to the issue tracker:hjhhhhh}r/(h]h]h]h]h]uhMihhh}]r0(h)r1}r2(hX **Answer**h}r3(h]h]h]h]h]uhj-h}]r4hXAnswerr5r6}r7(hUhj1ubahhubhX: Yes, but this is somewhat experimental for now. It is working ok in a test configuration, but it has not been tested in production like RabbitMQ has. If you have any problems with using STOMP and celery, please report the bugs to the issue tracker:r8r9}r:(hX: Yes, but this is somewhat experimental for now. It is working ok in a test configuration, but it has not been tested in production like RabbitMQ has. If you have any problems with using STOMP and celery, please report the bugs to the issue tracker:hj-ubeubj)r;}r<(hUhjhhhjh}r=(h]h]h]h]h]uhNhhh}]r>h)r?}r@(hX$http://github.com/ask/celery/issues/rAhj;hhhhh}rB(h]h]h]h]h]uhMnh}]rCh)rD}rE(hjAh}rF(UrefurijAh]h]h]h]h]uhj?h}]rGhX$http://github.com/ask/celery/issues/rHrI}rJ(hUhjDubahhubaubaubh)rK}rL(hX;First you have to use the ``master`` branch of ``celery``::rMhjhhhhh}rN(h]h]h]h]h]uhMphhh}]rO(hXFirst you have to use the rPrQ}rR(hXFirst you have to use the hjKubj)rS}rT(hX ``master``h}rU(h]h]h]h]h]uhjKh}]rVhXmasterrWrX}rY(hUhjSubahjubhX branch of rZr[}r\(hX branch of hjKubj)r]}r^(hX ``celery``h}r_(h]h]h]h]h]uhjKh}]r`hXceleryrarb}rc(hUhj]ubahjubhX:rd}re(hX:hjKubeubj)rf}rg(hX^$ git clone git://github.com/ask/celery.git $ cd celery $ sudo python setup.py install $ cd ..hjhhhjh}rh(jjh]h]h]h]h]uhMrhhh}]rihX^$ git clone git://github.com/ask/celery.git $ cd celery $ sudo python setup.py install $ cd ..rjrk}rl(hUhjfubaubh)rm}rn(hXDThen you need to install the ``stompbackend`` branch of ``carrot``::rohjhhhhh}rp(h]h]h]h]h]uhMwhhh}]rq(hXThen you need to install the rrrs}rt(hXThen you need to install the hjmubj)ru}rv(hX``stompbackend``h}rw(h]h]h]h]h]uhjmh}]rxhX stompbackendryrz}r{(hUhjuubahjubhX branch of r|r}}r~(hX branch of hjmubj)r}r(hX ``carrot``h}r(h]h]h]h]h]uhjmh}]rhXcarrotrr}r(hUhjubahjubhX:r}r(hX:hjmubeubj)r}r(hXz$ git clone git://github.com/ask/carrot.git $ cd carrot $ git checkout stompbackend $ sudo python setup.py install $ cd ..hjhhhjh}r(jjh]h]h]h]h]uhMyhhh}]rhXz$ git clone git://github.com/ask/carrot.git $ cd carrot $ git checkout stompbackend $ sudo python setup.py install $ cd ..rr}r(hUhjubaubh)r}r(hXAAnd my fork of ``python-stomp`` which adds non-blocking support::rhjhhhhh}r(h]h]h]h]h]uhMhhh}]r(hXAnd my fork of rr}r(hXAnd my fork of hjubj)r}r(hX``python-stomp``h}r(h]h]h]h]h]uhjh}]rhX python-stomprr}r(hUhjubahjubhX! which adds non-blocking support:rr}r(hX! which adds non-blocking support:hjubeubj)r}r(hXm$ hg clone http://bitbucket.org/asksol/python-stomp/ $ cd python-stomp $ sudo python setup.py install $ cd ..hjhhhjh}r(jjh]h]h]h]h]uhMhhh}]rhXm$ hg clone http://bitbucket.org/asksol/python-stomp/ $ cd python-stomp $ sudo python setup.py install $ cd ..rr}r(hUhjubaubh)r}r(hXkIn this example we will use a queue called ``celery`` which we created in the ActiveMQ web admin interface.hjhhhhh}r(h]h]h]h]h]uhMhhh}]r(hX+In this example we will use a queue called rr}r(hX+In this example we will use a queue called hjubj)r}r(hX ``celery``h}r(h]h]h]h]h]uhjh}]rhXceleryrr}r(hUhjubahjubhX6 which we created in the ActiveMQ web admin interface.rr}r(hX6 which we created in the ActiveMQ web admin interface.hjubeubh)r}r(hX**Note**: For ActiveMQ the queue name has to have ``"/queue/"`` prepended to it. i.e. the queue ``celery`` becomes ``/queue/celery``.hjhhhhh}r(h]h]h]h]h]uhMhhh}]r(h)r}r(hX**Note**h}r(h]h]h]h]h]uhjh}]rhXNoterr}r(hUhjubahhubhX*: For ActiveMQ the queue name has to have rr}r(hX*: For ActiveMQ the queue name has to have hjubj)r}r(hX ``"/queue/"``h}r(h]h]h]h]h]uhjh}]rhX "/queue/"rr}r(hUhjubahjubhX! prepended to it. i.e. the queue rr}r(hX! prepended to it. i.e. the queue hjubj)r}r(hX ``celery``h}r(h]h]h]h]h]uhjh}]rhXceleryrr}r(hUhjubahjubhX becomes rr}r(hX becomes hjubj)r}r(hX``/queue/celery``h}r(h]h]h]h]h]uhjh}]rhX /queue/celeryrr}r(hUhjubahjubhX.r}r(hX.hjubeubh)r}r(hXOSince a STOMP queue is a single named entity and it doesn't have the routing capabilities of AMQP you need to set both the ``queue``, and ``exchange`` settings to your queue name. This is a minor inconvenience since carrot needs to maintain the same interface for both AMQP and STOMP (obviously the one with the most capabilities won).hjhhhhh}r(h]h]h]h]h]uhMhhh}]r(hX{Since a STOMP queue is a single named entity and it doesn't have the routing capabilities of AMQP you need to set both the rr}r(hX{Since a STOMP queue is a single named entity and it doesn't have the routing capabilities of AMQP you need to set both the hjubj)r}r(hX ``queue``h}r(h]h]h]h]h]uhjh}]rhXqueuerr}r(hUhjubahjubhX, and rr}r(hX, and hjubj)r}r(hX ``exchange``h}r(h]h]h]h]h]uhjh}]rhXexchangerr}r(hUhjubahjubhX settings to your queue name. This is a minor inconvenience since carrot needs to maintain the same interface for both AMQP and STOMP (obviously the one with the most capabilities won).rr}r(hX settings to your queue name. This is a minor inconvenience since carrot needs to maintain the same interface for both AMQP and STOMP (obviously the one with the most capabilities won).hjubeubh)r}r(hX<Use the following specific settings in your ``settings.py``:rhjhhhhh}r(h]h]h]h]h]uhMhhh}]r(hX,Use the following specific settings in your rr}r(hX,Use the following specific settings in your hjubj)r}r(hX``settings.py``h}r (h]h]h]h]h]uhjh}]r hX settings.pyr r }r (hUhjubahjubhX:r}r(hX:hjubeubj)r}r(hX# Makes python-stomp the default backend for carrot. CARROT_BACKEND = "stomp" # STOMP hostname and port settings. BROKER_HOST = "localhost" BROKER_PORT = 61613 # The queue name to use (both queue and exchange must be set to the # same queue name when using STOMP) CELERY_DEFAULT_QUEUE = "/queue/celery" CELERY_DEFAULT_EXCHANGE = "/queue/celery" CELERY_QUEUES = { "/queue/celery": {"exchange": "/queue/celery"} }hjhhhjh}r(UlinenosrUlanguagerXpythonjjh]h]h]h]h]uhMhhh}]rhX# Makes python-stomp the default backend for carrot. CARROT_BACKEND = "stomp" # STOMP hostname and port settings. BROKER_HOST = "localhost" BROKER_PORT = 61613 # The queue name to use (both queue and exchange must be set to the # same queue name when using STOMP) CELERY_DEFAULT_QUEUE = "/queue/celery" CELERY_DEFAULT_EXCHANGE = "/queue/celery" CELERY_QUEUES = { "/queue/celery": {"exchange": "/queue/celery"} }rr}r(hUhjubaubh)r}r(hXYNow you can go on reading the tutorial in the README, ignoring any AMQP specific options.rhjhhhhh}r(h]h]h]h]h]uhMhhh}]rhXYNow you can go on reading the tutorial in the README, ignoring any AMQP specific options.rr}r (hjhjubaubeubh)r!}r"(hUhjmhhhhh}r#(h]h]h]h]r$hSah]r%hauhMhhh}]r&(h)r'}r((hX1What features are not supported when using STOMP?r)hj!hhhhh}r*(h]h]h]h]h]uhMhhh}]r+hX1What features are not supported when using STOMP?r,r-}r.(hj)hj'ubaubh)r/}r0(hX\This is a (possible incomplete) list of features not available when using the STOMP backend:r1hj!hhhhh}r2(h]h]h]h]h]uhMhhh}]r3hX\This is a (possible incomplete) list of features not available when using the STOMP backend:r4r5}r6(hj1hj/ubaubh)r7}r8(hUhj!hNhhh}r9(hX*h]h]h]h]h]uhNhhh}]r:(h)r;}r<(hX routing keys h}r=(h]h]h]h]h]uhj7h}]r>h)r?}r@(hX routing keysrAhj;hhhhh}rB(h]h]h]h]h]uhMh}]rChX routing keysrDrE}rF(hjAhj?ubaubahhubh)rG}rH(hX-exchange types (direct, topic, headers, etc) h}rI(h]h]h]h]h]uhj7h}]rJh)rK}rL(hX,exchange types (direct, topic, headers, etc)rMhjGhhhhh}rN(h]h]h]h]h]uhMh}]rOhX,exchange types (direct, topic, headers, etc)rPrQ}rR(hjMhjKubaubahhubh)rS}rT(hX immediate h}rU(h]h]h]h]h]uhj7h}]rVh)rW}rX(hX immediaterYhjShhhhh}rZ(h]h]h]h]h]uhMh}]r[hX immediater\r]}r^(hjYhjWubaubahhubh)r_}r`(hX mandatory h}ra(h]h]h]h]h]uhj7h}]rbh)rc}rd(hX mandatoryrehj_hhhhh}rf(h]h]h]h]h]uhMh}]rghX mandatoryrhri}rj(hjehjcubaubahhubeubeubeubh)rk}rl(hUhhhhhhh}rm(h]h]h]h]rnhIah]roh auhMhhh}]rp(h)rq}rr(hXFeaturesrshjkhhhhh}rt(h]h]h]h]h]uhMhhh}]ruhXFeaturesrvrw}rx(hjshjqubaubh)ry}rz(hUhjkhhhhh}r{(h]h]h]h]r|hGah]r}hauhMhhh}]r~(h)r}r(hX4How can I run a task once another task has finished?rhjyhhhhh}r(h]h]h]h]h]uhMhhh}]rhX4How can I run a task once another task has finished?rr}r(hjhjubaubh)r}r(hXh**Answer**: You can safely launch a task inside a task. Also, a common pattern is to use callback tasks:hjyhhhhh}r(h]h]h]h]h]uhMhhh}]r(h)r}r(hX **Answer**h}r(h]h]h]h]h]uhjh}]rhXAnswerrr}r(hUhjubahhubhX^: You can safely launch a task inside a task. Also, a common pattern is to use callback tasks:rr}r(hX^: You can safely launch a task inside a task. Also, a common pattern is to use callback tasks:hjubeubj)r}r(hXC@task() def add(x, y, callback=None): result = x + y if callback: callback.delay(result) return result @task(ignore_result=True) def log_result(result, **kwargs): logger = log_result.get_logger(**kwargs) logger.info("log_result got: %s" % (result, )) >>> add.delay(2, 2, callback=log_result)hjyhhhjh}r(jjXpythonjjh]h]h]h]h]uhMhhh}]rhXC@task() def add(x, y, callback=None): result = x + y if callback: callback.delay(result) return result @task(ignore_result=True) def log_result(result, **kwargs): logger = log_result.get_logger(**kwargs) logger.info("log_result got: %s" % (result, )) >>> add.delay(2, 2, callback=log_result)rr}r(hUhjubaubeubh)r}r(hUhjkhhhhh}r(h]h]h]h]rhjah]rh*auhMhhh}]r(h)r}r(hX%Can I cancel the execution of a task?rhjhhhhh}r(h]h]h]h]h]uhMhhh}]rhX%Can I cancel the execution of a task?rr}r(hjhjubaubh)r}r(hX(**Answer**: Yes. Use ``result.revoke``::rhjhhhhh}r(h]h]h]h]h]uhMhhh}]r(h)r}r(hX **Answer**h}r(h]h]h]h]h]uhjh}]rhXAnswerrr}r(hUhjubahhubhX : Yes. Use rr}r(hX : Yes. Use hjubj)r}r(hX``result.revoke``h}r(h]h]h]h]h]uhjh}]rhX result.revokerr}r(hUhjubahjubhX:r}r(hX:hjubeubj)r}r(hXL>>> result = add.apply_async(args=[2, 2], countdown=120) >>> result.revoke()hjhhhjh}r(jjh]h]h]h]h]uhMhhh}]rhXL>>> result = add.apply_async(args=[2, 2], countdown=120) >>> result.revoke()rr}r(hUhjubaubh)r}r(hX!or if you only have the task id::rhjhhhhh}r(h]h]h]h]h]uhMhhh}]rhX or if you only have the task id:rr}r(hX or if you only have the task id:hjubaubj)r}r(hX>>>> from celery.task.control import revoke >>> revoke(task_id)hjhhhjh}r(jjh]h]h]h]h]uhMhhh}]rhX>>>> from celery.task.control import revoke >>> revoke(task_id)rr}r(hUhjubaubeubh)r}r(hUhjkhhhhh}r(h]h]h]h]rh`ah]rh auhMhhh}]r(h)r}r(hX>Why aren't my remote control commands received by all workers?rhjhhhhh}r(h]h]h]h]h]uhMhhh}]rhX>Why aren't my remote control commands received by all workers?rr}r(hjhjubaubh)r}r(hX**Answer**: To receive broadcast remote control commands, every ``celeryd`` uses its hostname to create a unique queue name to listen to, so if you have more than one worker with the same hostname, the control commands will be recieved in round-robin between them.hjhhhhh}r(h]h]h]h]h]uhMhhh}]r(h)r}r(hX **Answer**h}r(h]h]h]h]h]uhjh}]rhXAnswerrr}r(hUhjubahhubhX6: To receive broadcast remote control commands, every rr}r(hX6: To receive broadcast remote control commands, every hjubj)r}r(hX ``celeryd``h}r(h]h]h]h]h]uhjh}]rhXcelerydrr}r(hUhjubahjubhX uses its hostname to create a unique queue name to listen to, so if you have more than one worker with the same hostname, the control commands will be recieved in round-robin between them.rr}r(hX uses its hostname to create a unique queue name to listen to, so if you have more than one worker with the same hostname, the control commands will be recieved in round-robin between them.hjubeubh)r}r(hX{To work around this you can explicitly set the hostname for every worker using the ``--hostname`` argument to ``celeryd``::hjhhhhh}r (h]h]h]h]h]uhMhhh}]r (hXSTo work around this you can explicitly set the hostname for every worker using the r r }r (hXSTo work around this you can explicitly set the hostname for every worker using the hjubj)r }r (hX``--hostname``h}r (h]h]h]h]h]uhjh}]r hX --hostnamer r }r (hUhj ubahjubhX argument to r r }r (hX argument to hjubj)r }r (hX ``celeryd``h}r (h]h]h]h]h]uhjh}]r hXcelerydr r }r (hUhj ubahjubhX:r }r (hX:hjubeubj)r }r (hXE$ celeryd --hostname=$(hostname).1 $ celeryd --hostname=$(hostname).2hjhhhjh}r (jjh]h]h]h]h]uhMhhh}]r hXE$ celeryd --hostname=$(hostname).1 $ celeryd --hostname=$(hostname).2r r }r (hUhj ubaubh)r }r (hX etc, etc.r! hjhhhhh}r" (h]h]h]h]h]uhMhhh}]r# hX etc, etc.r$ r% }r& (hj! hj ubaubeubh)r' }r( (hUhjkhhhhh}r) (h]h]h]h]r* hLah]r+ h auhMhhh}]r, (h)r- }r. (hX+Can I send some tasks to only some servers?r/ hj' hhhhh}r0 (h]h]h]h]h]uhMhhh}]r1 hX+Can I send some tasks to only some servers?r2 r3 }r4 (hj/ hj- ubaubh)r5 }r6 (hX|**Answer:** Yes. You can route tasks to an arbitrary server using AMQP, and a worker can bind to as many queues as it wants.hj' hhhhh}r7 (h]h]h]h]h]uhMhhh}]r8 (h)r9 }r: (hX **Answer:**h}r; (h]h]h]h]h]uhj5 h}]r< hXAnswer:r= r> }r? (hUhj9 ubahhubhXq Yes. You can route tasks to an arbitrary server using AMQP, and a worker can bind to as many queues as it wants.r@ rA }rB (hXq Yes. You can route tasks to an arbitrary server using AMQP, and a worker can bind to as many queues as it wants.hj5 ubeubh)rC }rD (hXSay you have two servers, ``x``, and ``y`` that handles regular tasks, and one server ``z``, that only handles feed related tasks, you can use this configuration:hj' hhhhh}rE (h]h]h]h]h]uhMhhh}]rF (hXSay you have two servers, rG rH }rI (hXSay you have two servers, hjC ubj)rJ }rK (hX``x``h}rL (h]h]h]h]h]uhjC h}]rM hXxrN }rO (hUhjJ ubahjubhX, and rP rQ }rR (hX, and hjC ubj)rS }rT (hX``y``h}rU (h]h]h]h]h]uhjC h}]rV hXyrW }rX (hUhjS ubahjubhX, that handles regular tasks, and one server rY rZ }r[ (hX, that handles regular tasks, and one server hjC ubj)r\ }r] (hX``z``h}r^ (h]h]h]h]h]uhjC h}]r_ hXzr` }ra (hUhj\ ubahjubhXG, that only handles feed related tasks, you can use this configuration:rb rc }rd (hXG, that only handles feed related tasks, you can use this configuration:hjC ubeubh)re }rf (hUhj' hhhhh}rg (hX*h]h]h]h]h]uhMhhh}]rh h)ri }rj (hX&Servers ``x`` and ``y``: settings.py: hje hhhhh}rk (h]h]h]h]h]uhNhhh}]rl h)rm }rn (hX%Servers ``x`` and ``y``: settings.py:hji hhhhh}ro (h]h]h]h]h]uhMh}]rp (hXServers rq rr }rs (hXServers hjm ubj)rt }ru (hX``x``h}rv (h]h]h]h]h]uhjm h}]rw hXxrx }ry (hUhjt ubahjubhX and rz r{ }r| (hX and hjm ubj)r} }r~ (hX``y``h}r (h]h]h]h]h]uhjm h}]r hXyr }r (hUhj} ubahjubhX: settings.py:r r }r (hX: settings.py:hjm ubeubaubaubj)r }r (hXCELERY_DEFAULT_QUEUE = "regular_tasks" CELERY_QUEUES = { "regular_tasks": { "binding_key": "task.#", }, } CELERY_DEFAULT_EXCHANGE = "tasks" CELERY_DEFAULT_EXCHANGE_TYPE = "topic" CELERY_DEFAULT_ROUTING_KEY = "task.regular"hj' hhhjh}r (jjXpythonjjh]h]h]h]h]uhMhhh}]r hXCELERY_DEFAULT_QUEUE = "regular_tasks" CELERY_QUEUES = { "regular_tasks": { "binding_key": "task.#", }, } CELERY_DEFAULT_EXCHANGE = "tasks" CELERY_DEFAULT_EXCHANGE_TYPE = "topic" CELERY_DEFAULT_ROUTING_KEY = "task.regular"r r }r (hUhj ubaubh)r }r (hUhj' hhhhh}r (hX*h]h]h]h]h]uhMhhh}]r h)r }r (hXServer ``z``: settings.py: hj hhhhh}r (h]h]h]h]h]uhNhhh}]r h)r }r (hXServer ``z``: settings.py:hj hhhhh}r (h]h]h]h]h]uhMh}]r (hXServer r r }r (hXServer hj ubj)r }r (hX``z``h}r (h]h]h]h]h]uhj h}]r hXzr }r (hUhj ubahjubhX: settings.py:r r }r (hX: settings.py:hj ubeubaubaubj)r }r (hXCELERY_DEFAULT_QUEUE = "feed_tasks" CELERY_QUEUES = { "feed_tasks": { "binding_key": "feed.#", }, } CELERY_DEFAULT_EXCHANGE = "tasks" CELERY_DEFAULT_ROUTING_KEY = "task.regular" CELERY_DEFAULT_EXCHANGE_TYPE = "topic"hj' hhhjh}r (jjXpythonjjh]h]h]h]h]uhMhhh}]r hXCELERY_DEFAULT_QUEUE = "feed_tasks" CELERY_QUEUES = { "feed_tasks": { "binding_key": "feed.#", }, } CELERY_DEFAULT_EXCHANGE = "tasks" CELERY_DEFAULT_ROUTING_KEY = "task.regular" CELERY_DEFAULT_EXCHANGE_TYPE = "topic"r r }r (hUhj ubaubh)r }r (hX``CELERY_QUEUES`` is a map of queue names and their exchange/type/binding_key, if you don't set exchange or exchange type, they will be taken from the ``CELERY_DEFAULT_EXCHANGE``/``CELERY_DEFAULT_EXCHANGE_TYPE`` settings.hj' hhhhh}r (h]h]h]h]h]uhMhhh}]r (j)r }r (hX``CELERY_QUEUES``h}r (h]h]h]h]h]uhj h}]r hX CELERY_QUEUESr r }r (hUhj ubahjubhX is a map of queue names and their exchange/type/binding_key, if you don't set exchange or exchange type, they will be taken from the r r }r (hX is a map of queue names and their exchange/type/binding_key, if you don't set exchange or exchange type, they will be taken from the hj ubj)r }r (hX``CELERY_DEFAULT_EXCHANGE``h}r (h]h]h]h]h]uhj h}]r hXCELERY_DEFAULT_EXCHANGEr r }r (hUhj ubahjubhX/r }r (hX/hj ubj)r }r (hX ``CELERY_DEFAULT_EXCHANGE_TYPE``h}r (h]h]h]h]h]uhj h}]r hXCELERY_DEFAULT_EXCHANGE_TYPEr r }r (hUhj ubahjubhX settings.r r }r (hX settings.hj ubeubh)r }r (hXNow to make a Task run on the ``z`` server you need to set its ``routing_key`` attribute so it starts with the words ``"task.feed."``:hj' hhhhh}r (h]h]h]h]h]uhMhhh}]r (hXNow to make a Task run on the r r }r (hXNow to make a Task run on the hj ubj)r }r (hX``z``h}r (h]h]h]h]h]uhj h}]r hXzr }r (hUhj ubahjubhX server you need to set its r r }r (hX server you need to set its hj ubj)r }r (hX``routing_key``h}r (h]h]h]h]h]uhj h}]r hX routing_keyr r }r (hUhj ubahjubhX' attribute so it starts with the words r r }r (hX' attribute so it starts with the words hj ubj)r }r (hX``"task.feed."``h}r (h]h]h]h]h]uhj h}]r hX "task.feed."r r }r (hUhj ubahjubhX:r }r (hX:hj ubeubj)r }r (hXfrom feedaggregator.models import Feed from celery.decorators import task @task(routing_key="feed.importer") def import_feed(feed_url): Feed.objects.import_feed(feed_url)hj' hhhjh}r (jjXpythonjjh]h]h]h]h]uhMhhh}]r hXfrom feedaggregator.models import Feed from celery.decorators import task @task(routing_key="feed.importer") def import_feed(feed_url): Feed.objects.import_feed(feed_url)r r }r (hUhj ubaubh)r }r (hX.or if subclassing the ``Task`` class directly:r hj' hhhhh}r (h]h]h]h]h]uhM$hhh}]r (hXor if subclassing the r r }r (hXor if subclassing the hj ubj)r }r (hX``Task``h}r (h]h]h]h]h]uhj h}]r hXTaskr r }r (hUhj ubahjubhX class directly:r r }r (hX class directly:hj ubeubj)r }r (hXclass FeedImportTask(Task): routing_key = "feed.importer" def run(self, feed_url): Feed.objects.import_feed(feed_url)hj' hhhjh}r (jjXpythonjjh]h]h]h]h]uhM&hhh}]r hXclass FeedImportTask(Task): routing_key = "feed.importer" def run(self, feed_url): Feed.objects.import_feed(feed_url)r r }r (hUhj ubaubh)r }r (hXaYou can also override this using the ``routing_key`` argument to :func:`celery.task.apply_async`:hj' hhhhh}r (h]h]h]h]h]uhM/hhh}]r (hX%You can also override this using the r r }r (hX%You can also override this using the hj ubj)r }r (hX``routing_key``h}r (h]h]h]h]h]uhj h}]r hX routing_keyr r }r (hUhj ubahjubhX argument to r r }r (hX argument to hj ubj)r! }r" (hX:func:`celery.task.apply_async`r# hj hhhjh}r$ (UreftypeXfuncjjXcelery.task.apply_asyncU refdomainXpyr% h]h]U refexplicith]h]h]jjjNjNuhM/h}]r& j)r' }r( (hj# h}r) (h]h]r* (jj% Xpy-funcr+ eh]h]h]uhj! h}]r, hXcelery.task.apply_async()r- r. }r/ (hUhj' ubahjubaubhX:r0 }r1 (hX:hj ubeubj)r2 }r3 (hUhj' hNhjh}r4 (h]h]h]h]h]uhNhhh}]r5 (j)r6 }r7 (hX>>> from myapp.tasks import RefreshFeedTask >>> RefreshFeedTask.apply_async(args=["http://cnn.com/rss"], ... routing_key="feed.importer")hj2 hNhjh}r8 (jjh]h]h]h]h]uhNhhh}]r9 hX>>> from myapp.tasks import RefreshFeedTask >>> RefreshFeedTask.apply_async(args=["http://cnn.com/rss"], ... routing_key="feed.importer")r: r; }r< (hUhj6 ubaubh)r= }r> (hXIf you want, you can even have your feed processing worker handle regular tasks as well, maybe in times when there's a lot of work to do. Just add a new queue to server ``z``'s ``CELERY_QUEUES``:hj2 hhhhh}r? (h]h]h]h]h]uhM7h}]r@ (hXIf you want, you can even have your feed processing worker handle regular tasks as well, maybe in times when there's a lot of work to do. Just add a new queue to server rA rB }rC (hXIf you want, you can even have your feed processing worker handle regular tasks as well, maybe in times when there's a lot of work to do. Just add a new queue to server hj= ubj)rD }rE (hX``z``h}rF (h]h]h]h]h]uhj= h}]rG hXzrH }rI (hUhjD ubahjubhX's rJ rK }rL (hX's hj= ubj)rM }rN (hX``CELERY_QUEUES``h}rO (h]h]h]h]h]uhj= h}]rP hX CELERY_QUEUESrQ rR }rS (hUhjM ubahjubhX:rT }rU (hX:hj= ubeubj)rV }rW (hXCELERY_QUEUES = { "feed_tasks": { "binding_key": "feed.#", }, "regular_tasks": { "binding_key": "task.#", }, }hj2 hhhjh}rX (jjXpythonjjh]h]h]h]h]uhM;h}]rY hXCELERY_QUEUES = { "feed_tasks": { "binding_key": "feed.#", }, "regular_tasks": { "binding_key": "task.#", }, }rZ r[ }r\ (hUhjV ubaubeubh)r] }r^ (hXNSince the default exchange is ``tasks``, they will both use the same exchange.hj' hhhhh}r_ (h]h]h]h]h]uhMFhhh}]r` (hXSince the default exchange is ra rb }rc (hXSince the default exchange is hj] ubj)rd }re (hX ``tasks``h}rf (h]h]h]h]h]uhj] h}]rg hXtasksrh ri }rj (hUhjd ubahjubhX', they will both use the same exchange.rk rl }rm (hX', they will both use the same exchange.hj] ubeubh)rn }ro (hXtIf you have another queue but on another exchange you want to add, just specify a custom exchange and exchange type:rp hj' hhhhh}rq (h]h]h]h]h]uhMIhhh}]rr hXtIf you have another queue but on another exchange you want to add, just specify a custom exchange and exchange type:rs rt }ru (hjp hjn ubaubj)rv }rw (hXGCELERY_QUEUES = { "feed_tasks": { "binding_key": "feed.#", }, "regular_tasks": { "binding_key": "task.#", } "image_tasks": { "binding_key": "image.compress", "exchange": "mediatasks", "exchange_type": "direct", }, }hj' hhhjh}rx (jjXpythonjjh]h]h]h]h]uhMLhhh}]ry hXGCELERY_QUEUES = { "feed_tasks": { "binding_key": "feed.#", }, "regular_tasks": { "binding_key": "task.#", } "image_tasks": { "binding_key": "image.compress", "exchange": "mediatasks", "exchange_type": "direct", }, }rz r{ }r| (hUhjv ubaubh)r} }r~ (hXXIf you're confused about these terms, you should read up on AMQP and RabbitMQ. `Rabbits and Warrens`_ is an excellent blog post describing queues and exchanges. There's also AMQP in 10 minutes*: `Flexible Routing Model`_, and `Standard Exchange Types`_. For users of RabbitMQ the `RabbitMQ FAQ`_ could also be useful as a source of information.hj' hhhhh}r (h]h]h]h]h]uhM\hhh}]r (hXOIf you're confused about these terms, you should read up on AMQP and RabbitMQ. r r }r (hXOIf you're confused about these terms, you should read up on AMQP and RabbitMQ. hj} ubh)r }r (hX`Rabbits and Warrens`_hKhj} hhh}r (UnameXRabbits and WarrenshX:http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/r h]h]h]h]h]uh}]r hXRabbits and Warrensr r }r (hUhj ubaubhX^ is an excellent blog post describing queues and exchanges. There's also AMQP in 10 minutes*: r r }r (hX^ is an excellent blog post describing queues and exchanges. There's also AMQP in 10 minutes*: hj} ubh)r }r (hX`Flexible Routing Model`_hKhj} hhh}r (UnameXFlexible Routing ModelhXhttp://bit.ly/95XFO1r h]h]h]h]h]uh}]r hXFlexible Routing Modelr r }r (hUhj ubaubhX, and r r }r (hX, and hj} ubh)r }r (hX`Standard Exchange Types`_hKhj} hhh}r (UnameXStandard Exchange TypeshXhttp://bit.ly/EEWcar h]h]h]h]h]uh}]r hXStandard Exchange Typesr r }r (hUhj ubaubhX. For users of RabbitMQ the r r }r (hX. For users of RabbitMQ the hj} ubh)r }r (hX`RabbitMQ FAQ`_hKhj} hhh}r (UnameX RabbitMQ FAQhX http://www.rabbitmq.com/faq.htmlr h]h]h]h]h]uh}]r hX RabbitMQ FAQr r }r (hUhj ubaubhX1 could also be useful as a source of information.r r }r (hX1 could also be useful as a source of information.hj} ubeubh)r }r (hXU.. _`Rabbits and Warrens`: http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/hKhj' hhhhh}r (hj h]r hdah]h]h]h]r h$auhMbhhh}]ubh)r }r (hX2.. _`Flexible Routing Model`: http://bit.ly/95XFO1hKhj' hhhhh}r (hj h]r hzah]h]h]h]r h:auhMchhh}]ubh)r }r (hX2.. _`Standard Exchange Types`: http://bit.ly/EEWcahKhj' hhhhh}r (hj h]r htah]h]h]h]r h4auhMdhhh}]ubh)r }r (hX4.. _`RabbitMQ FAQ`: http://www.rabbitmq.com/faq.htmlhKhj' hhhhh}r (hj h]r h\ah]h]h]h]r hauhMehhh}]ubeubh)r }r (hUhjkhhhhh}r (h]h]h]h]r hnah]r h.auhMhhhh}]r (h)r }r (hX Can I use celery without Django?r hj hhhhh}r (h]h]h]h]h]uhMhhhh}]r hX Can I use celery without Django?r r }r (hj hj ubaubh)r }r (hX**Answer:** Yes.r hj hhhhh}r (h]h]h]h]h]uhMjhhh}]r (h)r }r (hX **Answer:**h}r (h]h]h]h]h]uhj h}]r hXAnswer:r r }r (hUhj ubahhubhX Yes.r r }r (hX Yes.hj ubeubh)r }r (hXaCelery uses something called loaders to read/setup configuration, import modules that register tasks and to decide what happens when a task is executed. Currently there are two loaders, the default loader and the Django loader. If you want to use celery without a Django project, you either have to use the default loader, or write a loader of your own.r hj hhhhh}r (h]h]h]h]h]uhMlhhh}]r hXaCelery uses something called loaders to read/setup configuration, import modules that register tasks and to decide what happens when a task is executed. Currently there are two loaders, the default loader and the Django loader. If you want to use celery without a Django project, you either have to use the default loader, or write a loader of your own.r r }r (hj hj ubaubh)r }r (hX@The rest of this answer describes how to use the default loader.r hj hhhhh}r (h]h]h]h]h]uhMrhhh}]r hX@The rest of this answer describes how to use the default loader.r r }r (hj hj ubaubh)r }r (hXWhile it is possible to use Celery from outside of Django, we still need Django itself to run, this is to use the ORM and cache-framework. Duplicating these features would be time consuming and mostly pointless, so while me might rewrite these in the future, this is a good solution in the mean time. Install Django using your favorite install tool, ``easy_install``, ``pip``, or whatever::hj hhhhh}r (h]h]h]h]h]uhMthhh}]r (hX^While it is possible to use Celery from outside of Django, we still need Django itself to run, this is to use the ORM and cache-framework. Duplicating these features would be time consuming and mostly pointless, so while me might rewrite these in the future, this is a good solution in the mean time. Install Django using your favorite install tool, r r }r (hX^While it is possible to use Celery from outside of Django, we still need Django itself to run, this is to use the ORM and cache-framework. Duplicating these features would be time consuming and mostly pointless, so while me might rewrite these in the future, this is a good solution in the mean time. Install Django using your favorite install tool, hj ubj)r }r (hX``easy_install``h}r (h]h]h]h]h]uhj h}]r hX easy_installr r }r (hUhj ubahjubhX, r r }r (hX, hj ubj)r }r (hX``pip``h}r (h]h]h]h]h]uhj h}]r hXpipr r }r (hUhj ubahjubhX, or whatever:r r }r (hX, or whatever:hj ubeubj)r }r (hX# easy_install django # as roothj hhhjh}r (jjh]h]h]h]h]uhM|hhh}]r hX# easy_install django # as rootr r }r (hUhj ubaubh)r }r (hXYou need a configuration file named ``celeryconfig.py``, either in the directory you run ``celeryd`` in, or in a Python library path where it is able to find it. The configuration file can contain any of the settings described in :mod:`celery.conf`. In addition; if you're using the database backend you have to configure the database. Here is an example configuration using the database backend with MySQL:hj hhhhh}r (h]h]h]h]h]uhM~hhh}]r (hX$You need a configuration file named r r }r (hX$You need a configuration file named hj ubj)r }r (hX``celeryconfig.py``h}r (h]h]h]h]h]uhj h}]r hXceleryconfig.pyr r }r (hUhj ubahjubhX", either in the directory you run r! r" }r# (hX", either in the directory you run hj ubj)r$ }r% (hX ``celeryd``h}r& (h]h]h]h]h]uhj h}]r' hXcelerydr( r) }r* (hUhj$ ubahjubhX in, or in a Python library path where it is able to find it. The configuration file can contain any of the settings described in r+ r, }r- (hX in, or in a Python library path where it is able to find it. The configuration file can contain any of the settings described in hj ubj)r. }r/ (hX:mod:`celery.conf`r0 hj hhhjh}r1 (UreftypeXmodjjX celery.confU refdomainXpyr2 h]h]U refexplicith]h]h]jjjNjNuhM~h}]r3 j)r4 }r5 (hj0 h}r6 (h]h]r7 (jj2 Xpy-modr8 eh]h]h]uhj. h}]r9 hX celery.confr: r; }r< (hUhj4 ubahjubaubhX. In addition; if you're using the database backend you have to configure the database. Here is an example configuration using the database backend with MySQL:r= r> }r? (hX. In addition; if you're using the database backend you have to configure the database. Here is an example configuration using the database backend with MySQL:hj ubeubj)r@ }rA (hX# Broker configuration BROKER_HOST = "localhost" BROKER_PORT = "5672" BROKER_VHOST = "celery" BROKER_USER = "celery" BROKER_PASSWORD = "celerysecret" CARROT_BACKEND="amqp" # Using the database backend. CELERY_RESULT_BACKEND = "database" DATABASE_ENGINE = "mysql" # see Django docs for a description of these. DATABASE_NAME = "mydb" DATABASE_HOST = "mydb.example.org" DATABASE_USER = "myuser" DATABASE_PASSWORD = "mysecret" # Number of processes that processes tasks simultaneously. CELERYD_CONCURRENCY = 8 # Modules to import when celeryd starts. # This must import every module where you register tasks so celeryd # is able to find and run them. CELERY_IMPORTS = ("mytaskmodule1", "mytaskmodule2")hj hhhjh}rB (jjXpythonjjh]h]h]h]h]uhMhhh}]rC hX# Broker configuration BROKER_HOST = "localhost" BROKER_PORT = "5672" BROKER_VHOST = "celery" BROKER_USER = "celery" BROKER_PASSWORD = "celerysecret" CARROT_BACKEND="amqp" # Using the database backend. CELERY_RESULT_BACKEND = "database" DATABASE_ENGINE = "mysql" # see Django docs for a description of these. DATABASE_NAME = "mydb" DATABASE_HOST = "mydb.example.org" DATABASE_USER = "myuser" DATABASE_PASSWORD = "mysecret" # Number of processes that processes tasks simultaneously. CELERYD_CONCURRENCY = 8 # Modules to import when celeryd starts. # This must import every module where you register tasks so celeryd # is able to find and run them. CELERY_IMPORTS = ("mytaskmodule1", "mytaskmodule2")rD rE }rF (hUhj@ ubaubh)rG }rH (hXtWith this configuration file in the current directory you have to run ``celeryinit`` to create the database tables::hj hhhhh}rI (h]h]h]h]h]uhMhhh}]rJ (hXFWith this configuration file in the current directory you have to run rK rL }rM (hXFWith this configuration file in the current directory you have to run hjG ubj)rN }rO (hX``celeryinit``h}rP (h]h]h]h]h]uhjG h}]rQ hX celeryinitrR rS }rT (hUhjN ubahjubhX to create the database tables:rU rV }rW (hX to create the database tables:hjG ubeubj)rX }rY (hX $ celeryinithj hhhjh}rZ (jjh]h]h]h]h]uhMhhh}]r[ hX $ celeryinitr\ r] }r^ (hUhjX ubaubh)r_ }r` (hXBAt this point you should be able to successfully run ``celeryd``::ra hj hhhhh}rb (h]h]h]h]h]uhMhhh}]rc (hX5At this point you should be able to successfully run rd re }rf (hX5At this point you should be able to successfully run hj_ ubj)rg }rh (hX ``celeryd``h}ri (h]h]h]h]h]uhj_ h}]rj hXcelerydrk rl }rm (hUhjg ubahjubhX:rn }ro (hX:hj_ ubeubj)rp }rq (hX$ celeryd --loglevel=INFOhj hhhjh}rr (jjh]h]h]h]h]uhMhhh}]rs hX$ celeryd --loglevel=INFOrt ru }rv (hUhjp ubaubh)rw }rx (hX^and send a task from a python shell (note that it must be able to import ``celeryconfig.py``):hj hhhhh}ry (h]h]h]h]h]uhMhhh}]rz (hXIand send a task from a python shell (note that it must be able to import r{ r| }r} (hXIand send a task from a python shell (note that it must be able to import hjw ubj)r~ }r (hX``celeryconfig.py``h}r (h]h]h]h]h]uhjw h}]r hXceleryconfig.pyr r }r (hUhj~ ubahjubhX):r r }r (hX):hjw ubeubj)r }r (hXi>>> from celery.task.builtins import PingTask >>> result = PingTask.apply_async() >>> result.get() 'pong'hj hNhjh}r (jjh]h]h]h]h]uhNhhh}]r hXi>>> from celery.task.builtins import PingTask >>> result = PingTask.apply_async() >>> result.get() 'pong'r r }r (hUhj ubaubeubh)r }r (hUhjkhhhhh}r (h]h]h]h]r hFah]r hauhMhhh}]r (h)r }r (hX The celery test-suite is failingr hj hhhhh}r (h]h]h]h]h]uhMhhh}]r hX The celery test-suite is failingr r }r (hj hj ubaubh)r }r (hX**Answer**: If you're running tests from your Django project, and the celery test suite is failing in that context, then follow the steps below. If the celery tests are failing in another context, please report an issue to our issue tracker at GitHub:hj hhhhh}r (h]h]h]h]h]uhMhhh}]r (h)r }r (hX **Answer**h}r (h]h]h]h]h]uhj h}]r hXAnswerr r }r (hUhj ubahhubhX: If you're running tests from your Django project, and the celery test suite is failing in that context, then follow the steps below. If the celery tests are failing in another context, please report an issue to our issue tracker at GitHub:r r }r (hX: If you're running tests from your Django project, and the celery test suite is failing in that context, then follow the steps below. If the celery tests are failing in another context, please report an issue to our issue tracker at GitHub:hj ubeubj)r }r (hUhj hhhjh}r (h]h]h]h]h]uhNhhh}]r h)r }r (hX$http://github.com/ask/celery/issues/r hj hhhhh}r (h]h]h]h]h]uhMh}]r h)r }r (hj h}r (Urefurij h]h]h]h]h]uhj h}]r hX$http://github.com/ask/celery/issues/r r }r (hUhj ubahhubaubaubh)r }r (hXThat Django is running tests for all applications in ``INSTALLED_APPS`` by default is a pet peeve for many. You should use a test runner that eitherhj hhhhh}r (h]h]h]h]h]uhMhhh}]r (hX5That Django is running tests for all applications in r r }r (hX5That Django is running tests for all applications in hj ubj)r }r (hX``INSTALLED_APPS``h}r (h]h]h]h]h]uhj h}]r hXINSTALLED_APPSr r }r (hUhj ubahjubhXM by default is a pet peeve for many. You should use a test runner that eitherr r }r (hXM by default is a pet peeve for many. You should use a test runner that eitherhj ubeubcdocutils.nodes enumerated_list r )r }r (hUhj hNhUenumerated_listr h}r (Usuffixr U)h]h]h]Uprefixr Uh]h]Uenumtyper Uarabicr uhNhhh}]r (h)r }r (hX8Explicitly lists the apps you want to run tests for, or h}r (h]h]h]h]h]uhj h}]r h)r }r (hX7Explicitly lists the apps you want to run tests for, orr hj hhhhh}r (h]h]h]h]h]uhMh}]r hX7Explicitly lists the apps you want to run tests for, orr r }r (hj hj ubaubahhubh)r }r (hXDMake a test runner that skips tests for apps you don't want to run. h}r (h]h]h]h]h]uhj h}]r h)r }r (hXCMake a test runner that skips tests for apps you don't want to run.r hj hhhhh}r (h]h]h]h]h]uhMh}]r hXCMake a test runner that skips tests for apps you don't want to run.r r }r (hj hj ubaubahhubeubh)r }r (hX1For example the test runner that celery is using:r hj hhhhh}r (h]h]h]h]h]uhMhhh}]r hX1For example the test runner that celery is using:r r }r (hj hj ubaubj)r }r (hUhj hhhjh}r (h]h]h]h]h]uhNhhh}]r h)r }r (hXhttp://bit.ly/NVKepr hj hhhhh}r (h]h]h]h]h]uhMh}]r h)r }r (hj h}r (Urefurij h]h]h]h]h]uhj h}]r hXhttp://bit.ly/NVKepr r }r (hUhj ubahhubaubaubh)r }r (hXCTo use this test runner, add the following to your ``settings.py``:r hj hhhhh}r (h]h]h]h]h]uhMhhh}]r (hX3To use this test runner, add the following to your r r }r (hX3To use this test runner, add the following to your hj ubj)r }r (hX``settings.py``h}r (h]h]h]h]h]uhj h}]r hX settings.pyr r }r (hUhj ubahjubhX:r }r (hX:hj ubeubj)r }r (hXnTEST_RUNNER = "celery.tests.runners.run_tests" TEST_APPS = ( "app1", "app2", "app3", "app4", )hj hhhjh}r (jjXpythonjjh]h]h]h]h]uhMhhh}]r hXnTEST_RUNNER = "celery.tests.runners.run_tests" TEST_APPS = ( "app1", "app2", "app3", "app4", )r r }r (hUhj ubaubh)r }r (hX.Or, if you just want to skip the celery tests:r hj hhhhh}r! (h]h]h]h]h]uhMhhh}]r" hX.Or, if you just want to skip the celery tests:r# r$ }r% (hj hj ubaubj)r& }r' (hXINSTALLED_APPS = (.....) TEST_RUNNER = "celery.tests.runners.run_tests" TEST_APPS = filter(lambda k: k != "celery", INSTALLED_APPS)hj hhhjh}r( (jjXpythonjjh]h]h]h]h]uhMhhh}]r) hXINSTALLED_APPS = (.....) TEST_RUNNER = "celery.tests.runners.run_tests" TEST_APPS = filter(lambda k: k != "celery", INSTALLED_APPS)r* r+ }r, (hUhj& ubaubeubh)r- }r. (hUhjkhhhhh}r/ (h]h]h]h]r0 haah]r1 h!auhMhhh}]r2 (h)r3 }r4 (hX8Can I change the interval of a periodic task at runtime?r5 hj- hhhhh}r6 (h]h]h]h]h]uhMhhh}]r7 hX8Can I change the interval of a periodic task at runtime?r8 r9 }r: (hj5 hj3 ubaubh)r; }r< (hXm**Answer**: Yes. You can override ``PeriodicTask.is_due`` or turn ``PeriodicTask.run_every`` into a property:hj- hhhhh}r= (h]h]h]h]h]uhMhhh}]r> (h)r? }r@ (hX **Answer**h}rA (h]h]h]h]h]uhj; h}]rB hXAnswerrC rD }rE (hUhj? ubahhubhX: Yes. You can override rF rG }rH (hX: Yes. You can override hj; ubj)rI }rJ (hX``PeriodicTask.is_due``h}rK (h]h]h]h]h]uhj; h}]rL hXPeriodicTask.is_duerM rN }rO (hUhjI ubahjubhX or turn rP rQ }rR (hX or turn hj; ubj)rS }rT (hX``PeriodicTask.run_every``h}rU (h]h]h]h]h]uhj; h}]rV hXPeriodicTask.run_everyrW rX }rY (hUhjS ubahjubhX into a property:rZ r[ }r\ (hX into a property:hj; ubeubj)r] }r^ (hXclass MyPeriodic(PeriodicTask): def run(self): # ... @property def run_every(self): return get_interval_from_database(...)hj- hhhjh}r_ (jjXpythonjjh]h]h]h]h]uhMhhh}]r` hXclass MyPeriodic(PeriodicTask): def run(self): # ... @property def run_every(self): return get_interval_from_database(...)ra rb }rc (hUhj] ubaubeubh)rd }re (hUhjkhhhhh}rf (h]h]h]h]rg hTah]rh hauhMhhh}]ri (h)rj }rk (hX$Does celery support task priorities?rl hjd hhhhh}rm (h]h]h]h]h]uhMhhh}]rn hX$Does celery support task priorities?ro rp }rq (hjl hjj ubaubh)rr }rs (hXi**Answer**: No. In theory, yes, as AMQP supports priorities. However RabbitMQ doesn't implement them yet.hjd hhhhh}rt (h]h]h]h]h]uhMhhh}]ru (h)rv }rw (hX **Answer**h}rx (h]h]h]h]h]uhjr h}]ry hXAnswerrz r{ }r| (hUhjv ubahhubhX_: No. In theory, yes, as AMQP supports priorities. However RabbitMQ doesn't implement them yet.r} r~ }r (hX_: No. In theory, yes, as AMQP supports priorities. However RabbitMQ doesn't implement them yet.hjr ubeubh)r }r (hXThe usual way to prioritize work in celery, is to route high priority tasks to different servers. In the real world this may actually work better than per message priorities. You can use this in combination with rate limiting to achieve a highly performant system.r hjd hhhhh}r (h]h]h]h]h]uhMhhh}]r hXThe usual way to prioritize work in celery, is to route high priority tasks to different servers. In the real world this may actually work better than per message priorities. You can use this in combination with rate limiting to achieve a highly performant system.r r }r (hj hj ubaubeubh)r }r (hUhjkhhhhh}r (h]h]h]h]r h^ah]r hauhMhhh}]r (h)r }r (hX Should I use retry or acks_late?r hj hhhhh}r (h]h]h]h]h]uhMhhh}]r hX Should I use retry or acks_late?r r }r (hj hj ubaubh)r }r (hXU**Answer**: Depends. It's not necessarily one or the other, you may want to use both.hj hhhhh}r (h]h]h]h]h]uhMhhh}]r (h)r }r (hX **Answer**h}r (h]h]h]h]h]uhj h}]r hXAnswerr r }r (hUhj ubahhubhXK: Depends. It's not necessarily one or the other, you may want to use both.r r }r (hXK: Depends. It's not necessarily one or the other, you may want to use both.hj ubeubh)r }r (hX``Task.retry`` is used to retry tasks, notably for expected errors that is catchable with the ``try:`` block. The AMQP transaction is not used for these errors: **if the task raises an exception it is still acked!**.hj hhhhh}r (h]h]h]h]h]uhMhhh}]r (j)r }r (hX``Task.retry``h}r (h]h]h]h]h]uhj h}]r hX Task.retryr r }r (hUhj ubahjubhXP is used to retry tasks, notably for expected errors that is catchable with the r r }r (hXP is used to retry tasks, notably for expected errors that is catchable with the hj ubj)r }r (hX``try:``h}r (h]h]h]h]h]uhj h}]r hXtry:r r }r (hUhj ubahjubhX; block. The AMQP transaction is not used for these errors: r r }r (hX; block. The AMQP transaction is not used for these errors: hj ubh)r }r (hX6**if the task raises an exception it is still acked!**h}r (h]h]h]h]h]uhj h}]r hX2if the task raises an exception it is still acked!r r }r (hUhj ubahhubhX.r }r (hX.hj ubeubh)r }r (hX@The ``acks_late`` setting would be used when you need the task to be executed again if the worker (for some reason) crashes mid-execution. It's important to note that the worker is not known to crash, and if it does it is usually an unrecoverable error that requires human intervention (bug in the worker, or task code).hj hhhhh}r (h]h]h]h]h]uhMhhh}]r (hXThe r r }r (hXThe hj ubj)r }r (hX ``acks_late``h}r (h]h]h]h]h]uhj h}]r hX acks_later r }r (hUhj ubahjubhX/ setting would be used when you need the task to be executed again if the worker (for some reason) crashes mid-execution. It's important to note that the worker is not known to crash, and if it does it is usually an unrecoverable error that requires human intervention (bug in the worker, or task code).r r }r (hX/ setting would be used when you need the task to be executed again if the worker (for some reason) crashes mid-execution. It's important to note that the worker is not known to crash, and if it does it is usually an unrecoverable error that requires human intervention (bug in the worker, or task code).hj ubeubh)r }r (hX{In an ideal world you could safely retry any task that has failed, but this is rarely the case. Imagine the following task:r hj hhhhh}r (h]h]h]h]h]uhMhhh}]r hX{In an ideal world you could safely retry any task that has failed, but this is rarely the case. Imagine the following task:r r }r (hj hj ubaubj)r }r (hX@task() def process_upload(filename, tmpfile): # Increment a file count stored in a database increment_file_counter() add_file_metadata_to_db(filename, tmpfile) copy_file_to_destination(filename, tmpfile)hj hhhjh}r (jjXpythonjjh]h]h]h]h]uhM hhh}]r hX@task() def process_upload(filename, tmpfile): # Increment a file count stored in a database increment_file_counter() add_file_metadata_to_db(filename, tmpfile) copy_file_to_destination(filename, tmpfile)r r }r (hUhj ubaubh)r }r (hXIf this crashed in the middle of copying the file to its destination the world would contain incomplete state. This is not a critical scenario of course, but you can probably imagine something far more sinister. So for ease of programming we have less reliability; It's a good default, users who require it and know what they are doing can still enable acks_late (and in the future hopefully use manual acknowledgement)r hj hhhhh}r (h]h]h]h]h]uhMhhh}]r hXIf this crashed in the middle of copying the file to its destination the world would contain incomplete state. This is not a critical scenario of course, but you can probably imagine something far more sinister. So for ease of programming we have less reliability; It's a good default, users who require it and know what they are doing can still enable acks_late (and in the future hopefully use manual acknowledgement)r r }r (hj hj ubaubh)r }r (hXtIn addition ``Task.retry`` has features not available in AMQP transactions: delay between retries, max retries, etc.hj hhhhh}r (h]h]h]h]h]uhMhhh}]r (hX In addition r r }r (hX In addition hj ubj)r }r (hX``Task.retry``h}r (h]h]h]h]h]uhj h}]r hX Task.retryr r }r (hUhj ubahjubhXZ has features not available in AMQP transactions: delay between retries, max retries, etc.r r }r (hXZ has features not available in AMQP transactions: delay between retries, max retries, etc.hj ubeubh)r }r (hXSo use retry for Python errors, and if your task is reentrant combine that with ``acks_late`` if that level of reliability is required.hj hhhhh}r (h]h]h]h]h]uhMhhh}]r (hXPSo use retry for Python errors, and if your task is reentrant combine that with r r }r (hXPSo use retry for Python errors, and if your task is reentrant combine that with hj ubj)r }r (hX ``acks_late``h}r (h]h]h]h]h]uhj h}]r hX acks_later r }r (hUhj ubahjubhX* if that level of reliability is required.r r }r (hX* if that level of reliability is required.hj ubeubeubh)r }r (hUhjkhhhhh}r (h]h]h]h]r (Xmodule-celery.task.baser hYeh]r hauhM$hhh}]r (h)r }r (hX3Can I schedule tasks to execute at a specific time?r hj hhhhh}r (h]h]h]h]h]uhM$hhh}]r hX3Can I schedule tasks to execute at a specific time?r r }r (hj hj ubaubcsphinx.addnodes index r )r }r (hUhj hhhUindexr! h}r" (h]h]h]h]h]Uentries]r# (Usingler$ Xcelery.task.base (module)Xmodule-celery.task.baseUtr% auhM'hhh}]ubh)r& }r' (hXN**Answer**: Yes. You can use the ``eta`` argument of :meth:`Task.apply_async`.r( hj hhhhh}r) (h]h]h]h]h]uhM(hhh}]r* (h)r+ }r, (hX **Answer**h}r- (h]h]h]h]h]uhj& h}]r. hXAnswerr/ r0 }r1 (hUhj+ ubahhubhX: Yes. You can use the r2 r3 }r4 (hX: Yes. You can use the hj& ubj)r5 }r6 (hX``eta``h}r7 (h]h]h]h]h]uhj& h}]r8 hXetar9 r: }r; (hUhj5 ubahjubhX argument of r< r= }r> (hX argument of hj& ubj)r? }r@ (hX:meth:`Task.apply_async`rA hj& hhhjh}rB (UreftypeXmethjjXTask.apply_asyncU refdomainXpyrC h]h]U refexplicith]h]h]jjjNjXcelery.task.baserD uhM(h}]rE j)rF }rG (hjA h}rH (h]h]rI (jjC Xpy-methrJ eh]h]h]uhj? h}]rK hXTask.apply_async()rL rM }rN (hUhjF ubahjubaubhX.rO }rP (hX.hj& ubeubh)rQ }rR (hXtOr to schedule a periodic task at a specific time, use the :class:`celery.task.schedules.crontab` schedule behavior:hj hhhhh}rS (h]h]h]h]h]uhM*hhh}]rT (hX;Or to schedule a periodic task at a specific time, use the rU rV }rW (hX;Or to schedule a periodic task at a specific time, use the hjQ ubj)rX }rY (hX&:class:`celery.task.schedules.crontab`rZ hjQ hhhjh}r[ (UreftypeXclassjjXcelery.task.schedules.crontabU refdomainXpyr\ h]h]U refexplicith]h]h]jjjNjjD uhM*h}]r] j)r^ }r_ (hjZ h}r` (h]h]ra (jj\ Xpy-classrb eh]h]h]uhjX h}]rc hXcelery.task.schedules.crontabrd re }rf (hUhj^ ubahjubaubhX schedule behavior:rg rh }ri (hX schedule behavior:hjQ ubeubj)rj }rk (hXfrom celery.task.schedules import crontab from celery.decorators import periodic_task @periodic_task(run_every=crontab(hours=7, minute=30, day_of_week="mon")) def every_monday_morning(): print("This is run every monday morning at 7:30")hj hhhjh}rl (jjXpythonjjh]h]h]h]h]uhM.hhh}]rm hXfrom celery.task.schedules import crontab from celery.decorators import periodic_task @periodic_task(run_every=crontab(hours=7, minute=30, day_of_week="mon")) def every_monday_morning(): print("This is run every monday morning at 7:30")rn ro }rp (hUhjj ubaubeubh)rq }rr (hUhjkhhhhh}rs (h]h]h]h]rt hpah]ru h0auhM8hhh}]rv (h)rw }rx (hX&How do I shut down ``celeryd`` safely?ry hjq hhhhh}rz (h]h]h]h]h]uhM8hhh}]r{ (hXHow do I shut down r| r} }r~ (hXHow do I shut down r hjw ubj)r }r (hX ``celeryd``r h}r (h]h]h]h]h]uhjw h}]r hXcelerydr r }r (hUhj ubahjubhX safely?r r }r (hX safely?r hjw ubeubh)r }r (hX**Answer**: Use the ``TERM`` signal, and celery will finish all currently executing jobs and shut down as soon as possible. No tasks should be lost.hjq hhhhh}r (h]h]h]h]h]uhM:hhh}]r (h)r }r (hX **Answer**h}r (h]h]h]h]h]uhj h}]r hXAnswerr r }r (hUhj ubahhubhX : Use the r r }r (hX : Use the hj ubj)r }r (hX``TERM``h}r (h]h]h]h]h]uhj h}]r hXTERMr r }r (hUhj ubahjubhXx signal, and celery will finish all currently executing jobs and shut down as soon as possible. No tasks should be lost.r r }r (hXx signal, and celery will finish all currently executing jobs and shut down as soon as possible. No tasks should be lost.hj ubeubh)r }r (hXVYou should never stop ``celeryd`` with the ``KILL`` signal (``-9``), unless you've tried ``TERM`` a few times and waited a few minutes to let it get a chance to shut down. As if you do tasks may be terminated mid-execution, and they will not be re-run unless you have the ``acks_late`` option set. (``Task.acks_late`` / ``CELERY_ACKS_LATE``).hjq hhhhh}r (h]h]h]h]h]uhM=hhh}]r (hXYou should never stop r r }r (hXYou should never stop hj ubj)r }r (hX ``celeryd``h}r (h]h]h]h]h]uhj h}]r hXcelerydr r }r (hUhj ubahjubhX with the r r }r (hX with the hj ubj)r }r (hX``KILL``h}r (h]h]h]h]h]uhj h}]r hXKILLr r }r (hUhj ubahjubhX signal (r r }r (hX signal (hj ubj)r }r (hX``-9``h}r (h]h]h]h]h]uhj h}]r hX-9r r }r (hUhj ubahjubhX), unless you've tried r r }r (hX), unless you've tried hj ubj)r }r (hX``TERM``h}r (h]h]h]h]h]uhj h}]r hXTERMr r }r (hUhj ubahjubhX a few times and waited a few minutes to let it get a chance to shut down. As if you do tasks may be terminated mid-execution, and they will not be re-run unless you have the r r }r (hX a few times and waited a few minutes to let it get a chance to shut down. As if you do tasks may be terminated mid-execution, and they will not be re-run unless you have the hj ubj)r }r (hX ``acks_late``h}r (h]h]h]h]h]uhj h}]r hX acks_later r }r (hUhj ubahjubhX option set. (r r }r (hX option set. (hj ubj)r }r (hX``Task.acks_late``h}r (h]h]h]h]h]uhj h}]r hXTask.acks_later r }r (hUhj ubahjubhX / r r }r (hX / hj ubj)r }r (hX``CELERY_ACKS_LATE``h}r (h]h]h]h]h]uhj h}]r hXCELERY_ACKS_LATEr r }r (hUhj ubahjubhX).r r }r (hX).hj ubeubeubh)r }r (hUhjkhhhhh}r (h]h]h]h]r hKah]r h auhMDhhh}]r (h)r }r (hX5How do I run celeryd in the background on [platform]?r hj hhhhh}r (h]h]h]h]h]uhMDhhh}]r hX5How do I run celeryd in the background on [platform]?r r }r (hj hj ubaubh)r }r(hX3**Answer**: Please see :doc:`cookbook/daemonizing`.rhj hhhhh}r(h]h]h]h]h]uhMEhhh}]r(h)r}r(hX **Answer**h}r(h]h]h]h]h]uhj h}]rhXAnswerrr }r (hUhjubahhubhX : Please see r r }r (hX : Please see hj ubj)r}r(hX:doc:`cookbook/daemonizing`rhj hhhjh}r(UreftypeXdocrjjXcookbook/daemonizingU refdomainUh]h]U refexplicith]h]h]jjuhMEh}]rj)r}r(hjh}r(h]h]r(jjeh]h]h]uhjh}]rhXcookbook/daemonizingrr}r(hUhjubahjubaubhX.r}r(hX.hj ubeubeubeubh)r}r(hUhhhhhhh}r (h]h]h]h]r!hUah]r"hauhMHhhh}]r#(h)r$}r%(hXDjangor&hjhhhhh}r'(h]h]h]h]h]uhMHhhh}]r(hXDjangor)r*}r+(hj&hj$ubaubh)r,}r-(hUhjhhhhh}r.(h]h]h]h]r/huah]r0h5auhMKhhh}]r1(h)r2}r3(hXIGenerating a template in a task doesn't seem to respect my i18n settings?r4hj,hhhhh}r5(h]h]h]h]h]uhMKhhh}]r6hXIGenerating a template in a task doesn't seem to respect my i18n settings?r7r8}r9(hj4hj2ubaubh)r:}r;(hX**Answer**: To enable the Django translation machinery you need to activate it with a language. **Note**: Be sure to reset to the previous language when done.hj,hhhhh}r<(h]h]h]h]h]uhMMhhh}]r=(h)r>}r?(hX **Answer**h}r@(h]h]h]h]h]uhj:h}]rAhXAnswerrBrC}rD(hUhj>ubahhubhXV: To enable the Django translation machinery you need to activate it with a language. rErF}rG(hXV: To enable the Django translation machinery you need to activate it with a language. hj:ubh)rH}rI(hX**Note**h}rJ(h]h]h]h]h]uhj:h}]rKhXNoterLrM}rN(hUhjHubahhubhX6: Be sure to reset to the previous language when done.rOrP}rQ(hX6: Be sure to reset to the previous language when done.hj:ubeubj)rR}rS(hX(>>> from django.utils import translationrThj,hNhjh}rU(jjh]h]h]h]h]uhNhhh}]rVhX(>>> from django.utils import translationrWrX}rY(hUhjRubaubj)rZ}r[(hX>>> prev_language = translation.get_language() >>> translation.activate(language) >>> try: ... render_template() ... finally: translation.activate(prev_language)hj,hNhjh}r\(jjh]h]h]h]h]uhNhhh}]r]hX>>> prev_language = translation.get_language() >>> translation.activate(language) >>> try: ... render_template() ... finally: translation.activate(prev_language)r^r_}r`(hUhjZubaubh)ra}rb(hXNThe common pattern here would be for the task to take a ``language`` argument:hj,hhhhh}rc(h]h]h]h]h]uhMZhhh}]rd(hX8The common pattern here would be for the task to take a rerf}rg(hX8The common pattern here would be for the task to take a hjaubj)rh}ri(hX ``language``h}rj(h]h]h]h]h]uhjah}]rkhXlanguagerlrm}rn(hUhjhubahjubhX argument:rorp}rq(hX argument:hjaubeubj)rr}rs(hXfrom celery.decorators import task from django.utils import translation from django.template.loader import render_to_string @task() def generate_report(template="report.html", language=None): prev_language = translation.get_language() language and translation.activate(language) try: report = render_to_string(template) finally: translation.activate(prev_language) save_report_somewhere(report)hj,hhhjh}rt(jjXpythonjjh]h]h]h]h]uhM]hhh}]ruhXfrom celery.decorators import task from django.utils import translation from django.template.loader import render_to_string @task() def generate_report(template="report.html", language=None): prev_language = translation.get_language() language and translation.activate(language) try: report = render_to_string(template) finally: translation.activate(prev_language) save_report_somewhere(report)rvrw}rx(hUhjrubaubeubeubeubahUU transformerryNU footnote_refsrz}r{Urefnamesr|}r}(X sqlalchemy]r~(jj$eXstandard exchange types]rj aX%queue everything and delight everyone]rhaX1mysql is throwing deadlock errors, what can i do?]r(jTjeX rabbitmq faq]rj aXwhy won't my task run?]rjaXuser guide: remote tasks]rjaXrabbits and warrens]rj aXflexible routing model]rj aj]rjaXusing other queues]rjdaX0mysql - the innodb transaction model and locking]rjauUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rhhU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNhNUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUA/var/build/user_builds/celery/checkouts/1.0-archived/docs/faq.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]rUfile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hHjhJhhIjkhwj{j h)r}r(hUhj hhhhh}r(h]h]rj ah]Uismodh]h]uhM'hhh}]ubhVhhOhhYj hvjhRjhljhXjhWj{hKj hQjhoj@hrjmhGjyhxjRhyjvh`jhejKhcjhdj haj- hkj6hzj h_jhuj,h^j hMjhtj h]jhhjhnj hpjq hTjd h|j$hZjhFj h[j)hgjnhjjh\j hUjhSj!hqjhfjhmjhNj7hPjhijhLj' h{j;hshhbjYuUsubstitution_namesr}rhhh}r(h]h]h]Usourcehh]h]uU footnotesr]rUrefidsr}rub.PKXDD_<<3celery-1.0-archived/.doctrees/configuration.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xworker: celerydqNXmongodb backend settingsqNXdatabase backend settingsqNXtask result backend settingsq NXtask execution settingsq NXredisq Xroutingq NX memcachedq Xexample configuration fileqNXtokyo tyrant backend settingsqNXmongodbqX tokyo tyrantqXconcurrency settingsqNXmessaging settingsqNXredis backend settingsqNXamqp backend settingsqNXmonitor server: celerymonqNX periodic task server: celerybeatqNXloggingqNXcache backend settingsqNXexample configurationqNX connectionqNXconfiguration and defaultsqNuUsubstitution_defsq}qUparse_messagesq]q (cdocutils.nodes system_message q!)q"}q#(U rawsourceq$UUparentq%cdocutils.nodes section q&)q'}q((h$UU referencedq)Kh%h&)q*}q+(h$Uh%h&)q,}q-(h$Uh%hUsourceq.cdocutils.nodes reprunicode q/XK/var/build/user_builds/celery/checkouts/1.0-archived/docs/configuration.rstq0q1}q2bUtagnameq3Usectionq4U attributesq5}q6(Udupnamesq7]Uclassesq8]Ubackrefsq9]Uidsq:]q;Uconfiguration-and-defaultsqhauUlineq?KUdocumentq@hUchildrenqA]qB(cdocutils.nodes title qC)qD}qE(h$XConfiguration and defaultsqFh%h,h.h1h3UtitleqGh5}qH(h7]h8]h9]h:]h=]uh?Kh@hhA]qIcdocutils.nodes Text qJXConfiguration and defaultsqKqL}qM(h$hFh%hDubaubcdocutils.nodes paragraph qN)qO}qP(h$X<This document describes the configuration options available.qQh%h,h.h1h3U paragraphqRh5}qS(h7]h8]h9]h:]h=]uh?Kh@hhA]qThJX<This document describes the configuration options available.qUqV}qW(h$hQh%hOubaubhN)qX}qY(h$XrIf you're using celery in a Django project these settings should be defined in the project's ``settings.py`` file.h%h,h.h1h3hRh5}qZ(h7]h8]h9]h:]h=]uh?Kh@hhA]q[(hJX]If you're using celery in a Django project these settings should be defined in the project's q\q]}q^(h$X]If you're using celery in a Django project these settings should be defined in the project's h%hXubcdocutils.nodes literal q_)q`}qa(h$X``settings.py``h5}qb(h7]h8]h9]h:]h=]uh%hXhA]qchJX settings.pyqdqe}qf(h$Uh%h`ubah3UliteralqgubhJX file.qhqi}qj(h$X file.h%hXubeubhN)qk}ql(h$XIn a regular Python environment, that is using the default loader, you must create the ``celeryconfig.py`` module and make sure it is available on the Python path.h%h,h.h1h3hRh5}qm(h7]h8]h9]h:]h=]uh?K h@hhA]qn(hJXWIn a regular Python environment, that is using the default loader, you must create the qoqp}qq(h$XWIn a regular Python environment, that is using the default loader, you must create the h%hkubh_)qr}qs(h$X``celeryconfig.py``h5}qt(h7]h8]h9]h:]h=]uh%hkhA]quhJXceleryconfig.pyqvqw}qx(h$Uh%hrubah3hgubhJX9 module and make sure it is available on the Python path.qyqz}q{(h$X9 module and make sure it is available on the Python path.h%hkubeubh&)q|}q}(h$Uh%h,h.h1h3h4h5}q~(h7]h8]h9]h:]qUexample-configuration-fileqah=]qhauh?Kh@hhA]q(hC)q}q(h$XExample configuration fileqh%h|h.h1h3hGh5}q(h7]h8]h9]h:]h=]uh?Kh@hhA]qhJXExample configuration fileqq}q(h$hh%hubaubhN)q}q(h$XvThis is an example configuration file to get you started. It should contain all you need to run a basic celery set-up.qh%h|h.h1h3hRh5}q(h7]h8]h9]h:]h=]uh?Kh@hhA]qhJXvThis is an example configuration file to get you started. It should contain all you need to run a basic celery set-up.qq}q(h$hh%hubaubcdocutils.nodes literal_block q)q}q(h$XCELERY_RESULT_BACKEND = "database" DATABASE_ENGINE = "sqlite3" DATABASE_NAME = "mydatabase.db" BROKER_HOST = "localhost" BROKER_PORT = 5672 BROKER_VHOST = "/" BROKER_USER = "guest" BROKER_PASSWORD = "guest" ## If you're doing mostly I/O you can have more processes, ## but if mostly spending CPU, try to keep it close to the ## number of CPUs on your machine. If not set, the number of CPUs/cores ## available will be used. # CELERYD_CONCURRENCY = 8 # CELERYD_LOG_FILE = "celeryd.log" # CELERYD_LOG_LEVEL = "INFO"h%h|h.h1h3U literal_blockqh5}q(UlinenosqUlanguageqXpythonU xml:spaceqUpreserveqh:]h9]h7]h8]h=]uh?Kh@hhA]qhJXCELERY_RESULT_BACKEND = "database" DATABASE_ENGINE = "sqlite3" DATABASE_NAME = "mydatabase.db" BROKER_HOST = "localhost" BROKER_PORT = 5672 BROKER_VHOST = "/" BROKER_USER = "guest" BROKER_PASSWORD = "guest" ## If you're doing mostly I/O you can have more processes, ## but if mostly spending CPU, try to keep it close to the ## number of CPUs on your machine. If not set, the number of CPUs/cores ## available will be used. # CELERYD_CONCURRENCY = 8 # CELERYD_LOG_FILE = "celeryd.log" # CELERYD_LOG_LEVEL = "INFO"qq}q(h$Uh%hubaubeubh&)q}q(h$Uh%h,h.h1h3h4h5}q(h7]h8]h9]h:]qUconcurrency-settingsqah=]qhauh?K+h@hhA]q(hC)q}q(h$XConcurrency settingsqh%hh.h1h3hGh5}q(h7]h8]h9]h:]h=]uh?K+h@hhA]qhJXConcurrency settingsqq}q(h$hh%hubaubcdocutils.nodes bullet_list q)q}q(h$Uh%hh.h1h3U bullet_listqh5}q(UbulletqX*h:]h9]h7]h8]h=]uh?K-h@hhA]q(cdocutils.nodes list_item q)q}q(h$XCELERYD_CONCURRENCY The number of concurrent worker processes, executing tasks simultaneously. Defaults to the number of CPUs/cores available. h%hh.Nh3U list_itemqh5}q(h7]h8]h9]h:]h=]uh?Nh@hhA]qcdocutils.nodes definition_list q)q}q(h$Uh5}q(h7]h8]h9]h:]h=]uh%hhA]qcdocutils.nodes definition_list_item q)q}q(h$XCELERYD_CONCURRENCY The number of concurrent worker processes, executing tasks simultaneously. Defaults to the number of CPUs/cores available. h%hh.h1h3Udefinition_list_itemqh5}q(h7]h8]h9]h:]h=]uh?K1hA]q(cdocutils.nodes term q)q}q(h$XCELERYD_CONCURRENCYqh%hh.h1h3Utermqh5}q(h7]h8]h9]h:]h=]uh?K1hA]qhJXCELERYD_CONCURRENCYq΅q}q(h$hh%hubaubcdocutils.nodes definition q)q}q(h$Uh5}q(h7]h8]h9]h:]h=]uh%hhA]q(hN)q}q(h$XJThe number of concurrent worker processes, executing tasks simultaneously.qh%hh.h1h3hRh5}q(h7]h8]h9]h:]h=]uh?K.hA]qhJXJThe number of concurrent worker processes, executing tasks simultaneously.qۅq}q(h$hh%hubaubhN)q}q(h$X/Defaults to the number of CPUs/cores available.qh%hh.h1h3hRh5}q(h7]h8]h9]h:]h=]uh?K0hA]qhJX/Defaults to the number of CPUs/cores available.qㅁq}q(h$hh%hubaubeh3U definitionqubeubah3Udefinition_listqubaubh)q}q(h$XCELERYD_PREFETCH_MULTIPLIER How many messages to prefetch at a time multiplied by the number of concurrent processes. The default is 4 (four messages for each process). The default setting seems pretty good here. However, if you have very long running tasks waiting in the queue and you have to start the workers, note that the first worker to start will receive four times the number of messages initially. Thus the tasks may not be fairly balanced among the workers. h%hh.Nh3hh5}q(h7]h8]h9]h:]h=]uh?Nh@hhA]qh)q}q(h$Uh5}q(h7]h8]h9]h:]h=]uh%hhA]qh)q}q(h$XCELERYD_PREFETCH_MULTIPLIER How many messages to prefetch at a time multiplied by the number of concurrent processes. The default is 4 (four messages for each process). The default setting seems pretty good here. However, if you have very long running tasks waiting in the queue and you have to start the workers, note that the first worker to start will receive four times the number of messages initially. Thus the tasks may not be fairly balanced among the workers. h%hh.h1h3hh5}q(h7]h8]h9]h:]h=]uh?K;hA]q(h)q}q(h$XCELERYD_PREFETCH_MULTIPLIERqh%hh.h1h3hh5}q(h7]h8]h9]h:]h=]uh?K;hA]qhJXCELERYD_PREFETCH_MULTIPLIERqq}q(h$hh%hubaubh)q}q(h$Uh5}q(h7]h8]h9]h:]h=]uh%hhA]qhN)r}r(h$XHow many messages to prefetch at a time multiplied by the number of concurrent processes. The default is 4 (four messages for each process). The default setting seems pretty good here. However, if you have very long running tasks waiting in the queue and you have to start the workers, note that the first worker to start will receive four times the number of messages initially. Thus the tasks may not be fairly balanced among the workers.rh%hh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?K4hA]rhJXHow many messages to prefetch at a time multiplied by the number of concurrent processes. The default is 4 (four messages for each process). The default setting seems pretty good here. However, if you have very long running tasks waiting in the queue and you have to start the workers, note that the first worker to start will receive four times the number of messages initially. Thus the tasks may not be fairly balanced among the workers.rr}r(h$jh%jubaubah3hubeubah3hubaubeubeubh&)r}r (h$Uh%h,h.h1h3h4h5}r (h7]h8]h9]h:]r Utask-result-backend-settingsr ah=]r h auh?K>h@hhA]r(hC)r}r(h$XTask result backend settingsrh%jh.h1h3hGh5}r(h7]h8]h9]h:]h=]uh?K>h@hhA]rhJXTask result backend settingsrr}r(h$jh%jubaubh)r}r(h$Uh%jh.h1h3hh5}r(hX*h:]h9]h7]h8]h=]uh?K@h@hhA]rh)r}r(h$XUCELERY_RESULT_BACKEND The backend used to store task results (tombstones). Can be one of the following: * database (default) Use a relational database supported by the Django ORM. * cache Use `memcached`_ to store the results. * mongodb Use `MongoDB`_ to store the results. * redis Use `Redis`_ to store the results. * tyrant Use `Tokyo Tyrant`_ to store the results. * amqp Send results back as AMQP messages (**WARNING** While very fast, you must make sure you only receive the result once. See :doc:`userguide/executing`). h%jh.Nh3hh5}r(h7]h8]h9]h:]h=]uh?Nh@hhA]rh)r}r (h$Uh5}r!(h7]h8]h9]h:]h=]uh%jhA]r"h)r#}r$(h$X5CELERY_RESULT_BACKEND The backend used to store task results (tombstones). Can be one of the following: * database (default) Use a relational database supported by the Django ORM. * cache Use `memcached`_ to store the results. * mongodb Use `MongoDB`_ to store the results. * redis Use `Redis`_ to store the results. * tyrant Use `Tokyo Tyrant`_ to store the results. * amqp Send results back as AMQP messages (**WARNING** While very fast, you must make sure you only receive the result once. See :doc:`userguide/executing`). h%jh.h1h3hh5}r%(h7]h8]h9]h:]h=]uh?KWhA]r&(h)r'}r((h$XCELERY_RESULT_BACKENDr)h%j#h.h1h3hh5}r*(h7]h8]h9]h:]h=]uh?KWhA]r+hJXCELERY_RESULT_BACKENDr,r-}r.(h$j)h%j'ubaubh)r/}r0(h$Uh5}r1(h7]h8]h9]h:]h=]uh%j#hA]r2(hN)r3}r4(h$XQThe backend used to store task results (tombstones). Can be one of the following:r5h%j/h.h1h3hRh5}r6(h7]h8]h9]h:]h=]uh?KAhA]r7hJXQThe backend used to store task results (tombstones). Can be one of the following:r8r9}r:(h$j5h%j3ubaubh)r;}r<(h$Uh5}r=(hX*h:]h9]h7]h8]h=]uh%j/hA]r>(h)r?}r@(h$XLdatabase (default) Use a relational database supported by the Django ORM. h5}rA(h7]h8]h9]h:]h=]uh%j;hA]rBh)rC}rD(h$Uh5}rE(h7]h8]h9]h:]h=]uh%j?hA]rFh)rG}rH(h$XJdatabase (default) Use a relational database supported by the Django ORM. h%jCh.h1h3hh5}rI(h7]h8]h9]h:]h=]uh?KEhA]rJ(h)rK}rL(h$Xdatabase (default)rMh%jGh.h1h3hh5}rN(h7]h8]h9]h:]h=]uh?KEhA]rOhJXdatabase (default)rPrQ}rR(h$jMh%jKubaubh)rS}rT(h$Uh5}rU(h7]h8]h9]h:]h=]uh%jGhA]rVhN)rW}rX(h$X6Use a relational database supported by the Django ORM.rYh%jSh.h1h3hRh5}rZ(h7]h8]h9]h:]h=]uh?KEhA]r[hJX6Use a relational database supported by the Django ORM.r\r]}r^(h$jYh%jWubaubah3hubeubah3hubah3hubh)r_}r`(h$X/cache Use `memcached`_ to store the results. h5}ra(h7]h8]h9]h:]h=]uh%j;hA]rbh)rc}rd(h$Uh5}re(h7]h8]h9]h:]h=]uh%j_hA]rfh)rg}rh(h$X-cache Use `memcached`_ to store the results. h%jch.h1h3hh5}ri(h7]h8]h9]h:]h=]uh?KHhA]rj(h)rk}rl(h$Xcachermh%jgh.h1h3hh5}rn(h7]h8]h9]h:]h=]uh?KHhA]rohJXcacherprq}rr(h$jmh%jkubaubh)rs}rt(h$Uh5}ru(h7]h8]h9]h:]h=]uh%jghA]rvhN)rw}rx(h$X&Use `memcached`_ to store the results.h%jsh.h1h3hRh5}ry(h7]h8]h9]h:]h=]uh?KHhA]rz(hJXUse r{r|}r}(h$XUse h%jwubcdocutils.nodes reference r~)r}r(h$X `memcached`_UresolvedrKh%jwh3U referencerh5}r(UnameX memcachedrUrefurirXhttp://memcached.orgrh:]h9]h7]h8]h=]uhA]rhJX memcachedrr}r(h$Uh%jubaubhJX to store the results.rr}r(h$X to store the results.h%jwubeubah3hubeubah3hubah3hubh)r}r(h$X/mongodb Use `MongoDB`_ to store the results. h5}r(h7]h8]h9]h:]h=]uh%j;hA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rh)r}r(h$X-mongodb Use `MongoDB`_ to store the results. h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KKhA]r(h)r}r(h$Xmongodbrh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KKhA]rhJXmongodbrr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$X$Use `MongoDB`_ to store the results.h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KKhA]r(hJXUse rr}r(h$XUse h%jubj~)r}r(h$X `MongoDB`_jKh%jh3jh5}r(UnameXMongoDBjXhttp://mongodb.orgrh:]h9]h7]h8]h=]uhA]rhJXMongoDBrr}r(h$Uh%jubaubhJX to store the results.rr}r(h$X to store the results.h%jubeubah3hubeubah3hubah3hubh)r}r(h$X+redis Use `Redis`_ to store the results. h5}r(h7]h8]h9]h:]h=]uh%j;hA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rh)r}r(h$X)redis Use `Redis`_ to store the results. h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KNhA]r(h)r}r(h$Xredisrh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KNhA]rhJXredisrr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$X"Use `Redis`_ to store the results.h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KNhA]r(hJXUse rr}r(h$XUse h%jubj~)r}r(h$X`Redis`_jKh%jh3jh5}r(UnameXRedisjXhttp://code.google.com/p/redis/rh:]h9]h7]h8]h=]uhA]rhJXRedisrr}r(h$Uh%jubaubhJX to store the results.rr}r(h$X to store the results.h%jubeubah3hubeubah3hubah3hubh)r}r(h$X3tyrant Use `Tokyo Tyrant`_ to store the results. h5}r(h7]h8]h9]h:]h=]uh%j;hA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rh)r}r(h$X1tyrant Use `Tokyo Tyrant`_ to store the results. h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KQhA]r(h)r}r(h$Xtyrantrh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KQhA]rhJXtyrantrr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$X)Use `Tokyo Tyrant`_ to store the results.h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KQhA]r(hJXUse rr}r(h$XUse h%jubj~)r}r(h$X`Tokyo Tyrant`_jKh%jh3jh5}r(UnameX Tokyo TyrantjXhttp://1978th.net/tokyotyrant/rh:]h9]h7]h8]h=]uhA]rhJX Tokyo Tyrantrr}r(h$Uh%jubaubhJX to store the results.r r }r (h$X to store the results.h%jubeubah3hubeubah3hubah3hubh)r }r (h$Xamqp Send results back as AMQP messages (**WARNING** While very fast, you must make sure you only receive the result once. See :doc:`userguide/executing`). h5}r(h7]h8]h9]h:]h=]uh%j;hA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%j hA]rh)r}r(h$Xamqp Send results back as AMQP messages (**WARNING** While very fast, you must make sure you only receive the result once. See :doc:`userguide/executing`). h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KWhA]r(h)r}r(h$Xamqprh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KWhA]rhJXamqprr}r(h$jh%jubaubh)r }r!(h$Uh5}r"(h7]h8]h9]h:]h=]uh%jhA]r#hN)r$}r%(h$XSend results back as AMQP messages (**WARNING** While very fast, you must make sure you only receive the result once. See :doc:`userguide/executing`).h%j h.h1h3hRh5}r&(h7]h8]h9]h:]h=]uh?KThA]r'(hJX$Send results back as AMQP messages (r(r)}r*(h$X$Send results back as AMQP messages (h%j$ubcdocutils.nodes strong r+)r,}r-(h$X **WARNING**h5}r.(h7]h8]h9]h:]h=]uh%j$hA]r/hJXWARNINGr0r1}r2(h$Uh%j,ubah3Ustrongr3ubhJXK While very fast, you must make sure you only receive the result once. See r4r5}r6(h$XK While very fast, you must make sure you only receive the result once. See h%j$ubcsphinx.addnodes pending_xref r7)r8}r9(h$X:doc:`userguide/executing`r:h%j$h.h1h3U pending_xrefr;h5}r<(UreftypeXdocr=Urefwarnr>U reftargetr?Xuserguide/executingU refdomainUh:]h9]U refexplicith7]h8]h=]Urefdocr@X configurationrAuh?KThA]rBh_)rC}rD(h$j:h5}rE(h7]h8]rF(UxrefrGj=eh9]h:]h=]uh%j8hA]rHhJXuserguide/executingrIrJ}rK(h$Uh%jCubah3hgubaubhJX).rLrM}rN(h$X).h%j$ubeubah3hubeubah3hubah3hubeh3hubeh3hubeubah3hubaubaubcdocutils.nodes target rO)rP}rQ(h$X%.. _`memcached`: http://memcached.orgh)Kh%jh.h1h3UtargetrRh5}rS(jjh:]rTU memcachedrUah9]h7]h8]h=]rVh auh?KYh@hhA]ubjO)rW}rX(h$X!.. _`MongoDB`: http://mongodb.orgh)Kh%jh.h1h3jRh5}rY(jjh:]rZUmongodbr[ah9]h7]h8]h=]r\hauh?KZh@hhA]ubjO)r]}r^(h$X,.. _`Redis`: http://code.google.com/p/redis/h)Kh%jh.h1h3jRh5}r_(jjh:]r`Uredisraah9]h7]h8]h=]rbh auh?K[h@hhA]ubjO)rc}rd(h$X2.. _`Tokyo Tyrant`: http://1978th.net/tokyotyrant/h)Kh%jh.h1h3jRh5}re(jjh:]rfU tokyo-tyrantrgah9]h7]h8]h=]rhhauh?K\h@hhA]ubeubh&)ri}rj(h$Uh%h,h.h1h3h4h5}rk(h7]h8]h9]h:]rlUdatabase-backend-settingsrmah=]rnhauh?K_h@hhA]ro(hC)rp}rq(h$XDatabase backend settingsrrh%jih.h1h3hGh5}rs(h7]h8]h9]h:]h=]uh?K_h@hhA]rthJXDatabase backend settingsrurv}rw(h$jrh%jpubaubhN)rx}ry(h$X}Please see the Django ORM database settings documentation: http://docs.djangoproject.com/en/dev/ref/settings/#database-engineh%jih.h1h3hRh5}rz(h7]h8]h9]h:]h=]uh?Kah@hhA]r{(hJX;Please see the Django ORM database settings documentation: r|r}}r~(h$X;Please see the Django ORM database settings documentation: h%jxubj~)r}r(h$XBhttp://docs.djangoproject.com/en/dev/ref/settings/#database-enginerh5}r(Urefurijh:]h9]h7]h8]h=]uh%jxhA]rhJXBhttp://docs.djangoproject.com/en/dev/ref/settings/#database-enginerr}r(h$Uh%jubah3jubeubhN)r}r(h$XIf you use this backend, make sure to initialize the database tables after configuration. When using celery with a Django project this means executing::h%jih.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?Kdh@hhA]rhJXIf you use this backend, make sure to initialize the database tables after configuration. When using celery with a Django project this means executing:rr}r(h$XIf you use this backend, make sure to initialize the database tables after configuration. When using celery with a Django project this means executing:h%jubaubh)r}r(h$X$ python manage.py syncdbh%jih.h1h3hh5}r(hhh:]h9]h7]h8]h=]uh?Khh@hhA]rhJX$ python manage.py syncdbrr}r(h$Uh%jubaubhN)r}r(h$XGWhen using celery in a regular Python environment you have to execute::rh%jih.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?Kjh@hhA]rhJXFWhen using celery in a regular Python environment you have to execute:rr}r(h$XFWhen using celery in a regular Python environment you have to execute:h%jubaubh)r}r(h$X $ celeryinith%jih.h1h3hh5}r(hhh:]h9]h7]h8]h=]uh?Klh@hhA]rhJX $ celeryinitrr}r(h$Uh%jubaubh&)r}r(h$Uh)Kh%jih.h1h3h4h5}r(h7]rXexample configurationrah8]h9]h:]rUexample-configurationrah=]uh?Koh@hhA]r(hC)r}r(h$XExample configurationrh%jh.h1h3hGh5}r(h7]h8]h9]h:]h=]uh?Koh@hhA]rhJXExample configurationrr}r(h$jh%jubaubh)r}r(h$XCELERY_RESULT_BACKEND = "database" DATABASE_ENGINE = "mysql" DATABASE_USER = "myusername" DATABASE_PASSWORD = "mypassword" DATABASE_NAME = "mydatabase" DATABASE_HOST = "localhost"h%jh.h1h3hh5}r(hhXpythonhhh:]h9]h7]h8]h=]uh?Kqh@hhA]rhJXCELERY_RESULT_BACKEND = "database" DATABASE_ENGINE = "mysql" DATABASE_USER = "myusername" DATABASE_PASSWORD = "mypassword" DATABASE_NAME = "mydatabase" DATABASE_HOST = "localhost"rr}r(h$Uh%jubaubeubeubh*h&)r}r(h$Uh%h,h.h1h3h4h5}r(h7]h8]h9]h:]rUcache-backend-settingsrah=]rhauh?Kh@hhA]r(hC)r}r(h$XCache backend settingsrh%jh.h1h3hGh5}r(h7]h8]h9]h:]h=]uh?Kh@hhA]rhJXCache backend settingsrr}r(h$jh%jubaubhN)r}r(h$XPlease see the documentation for the Django cache framework settings: http://docs.djangoproject.com/en/dev/topics/cache/#memcachedh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?Kh@hhA]r(hJXFPlease see the documentation for the Django cache framework settings: rr}r(h$XFPlease see the documentation for the Django cache framework settings: h%jubj~)r}r(h$X<http://docs.djangoproject.com/en/dev/topics/cache/#memcachedrh5}r(Urefurijh:]h9]h7]h8]h=]uh%jhA]rhJX<http://docs.djangoproject.com/en/dev/topics/cache/#memcachedrr}r(h$Uh%jubah3jubeubhN)r}r(h$XTo use a custom cache backend for Celery, while using another for Django, you should use the ``CELERY_CACHE_BACKEND`` setting instead of the regular django ``CACHE_BACKEND`` setting.h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?Kh@hhA]r(hJX]To use a custom cache backend for Celery, while using another for Django, you should use the rr}r(h$X]To use a custom cache backend for Celery, while using another for Django, you should use the h%jubh_)r}r(h$X``CELERY_CACHE_BACKEND``h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJXCELERY_CACHE_BACKENDrr}r(h$Uh%jubah3hgubhJX' setting instead of the regular django rr}r(h$X' setting instead of the regular django h%jubh_)r}r(h$X``CACHE_BACKEND``h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJX CACHE_BACKENDrr}r(h$Uh%jubah3hgubhJX setting.rr}r(h$X setting.h%jubeubh&)r}r(h$Uh)Kh%jh.h1h3h4h5}r(h7]rXexample configurationrah8]h9]h:]rUid2rah=]uh?Kh@hhA]r(hC)r}r(h$XExample configurationrh%jh.h1h3hGh5}r(h7]h8]h9]h:]h=]uh?Kh@hhA]rhJXExample configurationrr}r(h$jh%jubaubhN)r}r(h$X Using a single memcached server:rh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?Kh@hhA]rhJX Using a single memcached server:r r }r (h$jh%jubaubh)r }r (h$X.CACHE_BACKEND = 'memcached://127.0.0.1:11211/'h%jh.h1h3hh5}r(hhXpythonhhh:]h9]h7]h8]h=]uh?Kh@hhA]rhJX.CACHE_BACKEND = 'memcached://127.0.0.1:11211/'rr}r(h$Uh%j ubaubhN)r}r(h$X!Using multiple memcached servers:rh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?Kh@hhA]rhJX!Using multiple memcached servers:rr}r(h$jh%jubaubh)r}r(h$XfCELERY_RESULT_BACKEND = "cache" CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11211/'h%jh.h1h3hh5}r(hhXpythonhhh:]h9]h7]h8]h=]uh?Kh@hhA]rhJXfCELERY_RESULT_BACKEND = "cache" CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11211/'rr }r!(h$Uh%jubaubeubeubh&)r"}r#(h$Uh%h,h.h1h3h4h5}r$(h7]h8]h9]h:]r%Utokyo-tyrant-backend-settingsr&ah=]r'hauh?Kh@hhA]r((hC)r)}r*(h$XTokyo Tyrant backend settingsr+h%j"h.h1h3hGh5}r,(h7]h8]h9]h:]h=]uh?Kh@hhA]r-hJXTokyo Tyrant backend settingsr.r/}r0(h$j+h%j)ubaubh)r1}r2(h$Uh%j"h.h1h3hh5}r3(h7]h8]h9]h:]h=]uh?Nh@hhA]r4h)r5}r6(h$Xn**NOTE** The Tokyo Tyrant backend requires the :mod:`pytyrant` library: http://pypi.python.org/pypi/pytyrant/ h%j1h.h1h3hh5}r7(h7]h8]h9]h:]h=]uh?KhA]r8(h)r9}r:(h$XG**NOTE** The Tokyo Tyrant backend requires the :mod:`pytyrant` library:r;h%j5h.h1h3hh5}r<(h7]h8]h9]h:]h=]uh?KhA]r=(j+)r>}r?(h$X**NOTE**h5}r@(h7]h8]h9]h:]h=]uh%j9hA]rAhJXNOTErBrC}rD(h$Uh%j>ubah3j3ubhJX' The Tokyo Tyrant backend requires the rErF}rG(h$X' The Tokyo Tyrant backend requires the h%j9ubj7)rH}rI(h$X:mod:`pytyrant`rJh%j9h.h1h3j;h5}rK(UreftypeXmodj>j?XpytyrantU refdomainXpyrLh:]h9]U refexplicith7]h8]h=]j@jAUpy:classrMNU py:modulerNNuh?KhA]rOh_)rP}rQ(h$jJh5}rR(h7]h8]rS(jGjLXpy-modrTeh9]h:]h=]uh%jHhA]rUhJXpytyrantrVrW}rX(h$Uh%jPubah3hgubaubhJX library:rYrZ}r[(h$X library:h%j9ubeubh)r\}r](h$Uh5}r^(h7]h8]h9]h:]h=]uh%j5hA]r_hN)r`}ra(h$X%http://pypi.python.org/pypi/pytyrant/rbh%j\h.h1h3hRh5}rc(h7]h8]h9]h:]h=]uh?KhA]rdj~)re}rf(h$jbh5}rg(Urefurijbh:]h9]h7]h8]h=]uh%j`hA]rhhJX%http://pypi.python.org/pypi/pytyrant/rirj}rk(h$Uh%jeubah3jubaubah3hubeubaubhN)rl}rm(h$XGThis backend requires the following configuration directives to be set:rnh%j"h.h1h3hRh5}ro(h7]h8]h9]h:]h=]uh?Kh@hhA]rphJXGThis backend requires the following configuration directives to be set:rqrr}rs(h$jnh%jlubaubh)rt}ru(h$Uh%j"h.h1h3hh5}rv(hX*h:]h9]h7]h8]h=]uh?Kh@hhA]rw(h)rx}ry(h$X/TT_HOST Hostname of the Tokyo Tyrant server. h%jth.Nh3hh5}rz(h7]h8]h9]h:]h=]uh?Nh@hhA]r{h)r|}r}(h$Uh5}r~(h7]h8]h9]h:]h=]uh%jxhA]rh)r}r(h$X-TT_HOST Hostname of the Tokyo Tyrant server. h%j|h.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]r(h)r}r(h$XTT_HOSTrh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJXTT_HOSTrr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$X$Hostname of the Tokyo Tyrant server.rh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJX$Hostname of the Tokyo Tyrant server.rr}r(h$jh%jubaubah3hubeubah3hubaubh)r}r(h$X=TT_PORT The port the Tokyo Tyrant server is listening to. h%jth.Nh3hh5}r(h7]h8]h9]h:]h=]uh?Nh@hhA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rh)r}r(h$X;TT_PORT The port the Tokyo Tyrant server is listening to. h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]r(h)r}r(h$XTT_PORTrh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJXTT_PORTrr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$X1The port the Tokyo Tyrant server is listening to.rh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJX1The port the Tokyo Tyrant server is listening to.rr}r(h$jh%jubaubah3hubeubah3hubaubeubh&)r}r(h$Uh)Kh%j"h.h1h3h4h5}r(h7]rXexample configurationrah8]h9]h:]rUid3rah=]uh?Kh@hhA]r(hC)r}r(h$XExample configurationrh%jh.h1h3hGh5}r(h7]h8]h9]h:]h=]uh?Kh@hhA]rhJXExample configurationrr}r(h$jh%jubaubh)r}r(h$XECELERY_RESULT_BACKEND = "tyrant" TT_HOST = "localhost" TT_PORT = 1978h%jh.h1h3hh5}r(hhXpythonhhh:]h9]h7]h8]h=]uh?Kh@hhA]rhJXECELERY_RESULT_BACKEND = "tyrant" TT_HOST = "localhost" TT_PORT = 1978rr}r(h$Uh%jubaubeubeubh&)r}r(h$Uh%h,h.h1h3h4h5}r(h7]h8]h9]h:]rUredis-backend-settingsrah=]rhauh?Kh@hhA]r(hC)r}r(h$XRedis backend settingsrh%jh.h1h3hGh5}r(h7]h8]h9]h:]h=]uh?Kh@hhA]rhJXRedis backend settingsrr}r(h$jh%jubaubh)r}r(h$Uh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?Nh@hhA]rh)r}r(h$Xf**NOTE** The Redis backend requires the :mod:`redis` library: http://pypi.python.org/pypi/redis/0.5.5 h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]r(h)r}r(h$X=**NOTE** The Redis backend requires the :mod:`redis` library:rh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]r(j+)r}r(h$X**NOTE**h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJXNOTErr}r(h$Uh%jubah3j3ubhJX The Redis backend requires the rr}r(h$X The Redis backend requires the h%jubj7)r}r(h$X :mod:`redis`rh%jh.h1h3j;h5}r(UreftypeXmodj>j?XredisU refdomainXpyrh:]h9]U refexplicith7]h8]h=]j@jAjMNjNNuh?KhA]rh_)r}r(h$jh5}r(h7]h8]r(jGjXpy-modreh9]h:]h=]uh%jhA]rhJXredisrr}r(h$Uh%jubah3hgubaubhJX library:rr}r(h$X library:h%jubeubh)r}r(h$Uh5}r (h7]h8]h9]h:]h=]uh%jhA]r hN)r }r (h$X'http://pypi.python.org/pypi/redis/0.5.5r h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KhA]rj~)r}r(h$j h5}r(Urefurij h:]h9]h7]h8]h=]uh%j hA]rhJX'http://pypi.python.org/pypi/redis/0.5.5rr}r(h$Uh%jubah3jubaubah3hubeubaubhN)r}r(h$X>To install the redis package use ``pip`` or ``easy_install``::rh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?Kh@hhA]r(hJX!To install the redis package use rr}r(h$X!To install the redis package use h%jubh_)r}r (h$X``pip``h5}r!(h7]h8]h9]h:]h=]uh%jhA]r"hJXpipr#r$}r%(h$Uh%jubah3hgubhJX or r&r'}r((h$X or h%jubh_)r)}r*(h$X``easy_install``h5}r+(h7]h8]h9]h:]h=]uh%jhA]r,hJX easy_installr-r.}r/(h$Uh%j)ubah3hgubhJX:r0}r1(h$X:h%jubeubh)r2}r3(h$X$ pip install redish%jh.h1h3hh5}r4(hhh:]h9]h7]h8]h=]uh?Kh@hhA]r5hJX$ pip install redisr6r7}r8(h$Uh%j2ubaubhN)r9}r:(h$XGThis backend requires the following configuration directives to be set:r;h%jh.h1h3hRh5}r<(h7]h8]h9]h:]h=]uh?Kh@hhA]r=hJXGThis backend requires the following configuration directives to be set:r>r?}r@(h$j;h%j9ubaubh)rA}rB(h$Uh%jh.h1h3hh5}rC(hX*h:]h9]h7]h8]h=]uh?Kh@hhA]rD(h)rE}rF(h$XKREDIS_HOST Hostname of the Redis database server. e.g. ``"localhost"``. h%jAh.h1h3hh5}rG(h7]h8]h9]h:]h=]uh?Nh@hhA]rH(hN)rI}rJ(h$X REDIS_HOSTrKh%jEh.h1h3hRh5}rL(h7]h8]h9]h:]h=]uh?KhA]rMhJX REDIS_HOSTrNrO}rP(h$jKh%jIubaubcdocutils.nodes block_quote rQ)rR}rS(h$Uh5}rT(h7]h8]h9]h:]h=]uh%jEhA]rUhN)rV}rW(h$X<Hostname of the Redis database server. e.g. ``"localhost"``.h%jRh.h1h3hRh5}rX(h7]h8]h9]h:]h=]uh?KhA]rY(hJX,Hostname of the Redis database server. e.g. rZr[}r\(h$X,Hostname of the Redis database server. e.g. h%jVubh_)r]}r^(h$X``"localhost"``h5}r_(h7]h8]h9]h:]h=]uh%jVhA]r`hJX "localhost"rarb}rc(h$Uh%j]ubah3hgubhJX.rd}re(h$X.h%jVubeubah3U block_quoterfubeubh)rg}rh(h$X@REDIS_PORT Port to the Redis database server. e.g. ``6379``. h%jAh.h1h3hh5}ri(h7]h8]h9]h:]h=]uh?Nh@hhA]rj(hN)rk}rl(h$X REDIS_PORTrmh%jgh.h1h3hRh5}rn(h7]h8]h9]h:]h=]uh?KhA]rohJX REDIS_PORTrprq}rr(h$jmh%jkubaubjQ)rs}rt(h$Uh5}ru(h7]h8]h9]h:]h=]uh%jghA]rvhN)rw}rx(h$X1Port to the Redis database server. e.g. ``6379``.h%jsh.h1h3hRh5}ry(h7]h8]h9]h:]h=]uh?KhA]rz(hJX(Port to the Redis database server. e.g. r{r|}r}(h$X(Port to the Redis database server. e.g. h%jwubh_)r~}r(h$X``6379``h5}r(h7]h8]h9]h:]h=]uh%jwhA]rhJX6379rr}r(h$Uh%j~ubah3hgubhJX.r}r(h$X.h%jwubeubah3jfubeubeubhN)r}r(h$XDAlso, the following optional configuration directives are available:rh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?Kh@hhA]rhJXDAlso, the following optional configuration directives are available:rr}r(h$jh%jubaubh)r}r(h$Uh%jh.h1h3hh5}r(hX*h:]h9]h7]h8]h=]uh?Kh@hhA]r(h)r}r(h$XHREDIS_DB Name of the database to use. Default is ``celery_results``. h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?Nh@hhA]r(hN)r}r(h$XREDIS_DBrh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJXREDIS_DBrr}r(h$jh%jubaubjQ)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$X;Name of the database to use. Default is ``celery_results``.h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KhA]r(hJX(Name of the database to use. Default is rr}r(h$X(Name of the database to use. Default is h%jubh_)r}r(h$X``celery_results``h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJXcelery_resultsrr}r(h$Uh%jubah3hgubhJX.r}r(h$X.h%jubeubah3jfubeubh)r}r(h$X>REDIS_PASSWORD Password used to connect to the database. h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?Nh@hhA]r(hN)r}r(h$XREDIS_PASSWORDrh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJXREDIS_PASSWORDrr}r(h$jh%jubaubjQ)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$X)Password used to connect to the database.rh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJX)Password used to connect to the database.rr}r(h$jh%jubaubah3jfubeubeubh&)r}r(h$Uh)Kh%jh.h1h3h4h5}r(h7]rXexample configurationrah8]h9]h:]rUid4rah=]uh?Kh@hhA]r(hC)r}r(h$XExample configurationrh%jh.h1h3hGh5}r(h7]h8]h9]h:]h=]uh?Kh@hhA]rhJXExample configurationrr}r(h$jh%jubaubh)r}r(h$XCELERY_RESULT_BACKEND = "redis" REDIS_HOST = "localhost" REDIS_PORT = 6379 REDIS_DATABASE = "celery_results" REDIS_CONNECT_RETRY=Trueh%jh.h1h3hh5}r(hhXpythonhhh:]h9]h7]h8]h=]uh?Kh@hhA]rhJXCELERY_RESULT_BACKEND = "redis" REDIS_HOST = "localhost" REDIS_PORT = 6379 REDIS_DATABASE = "celery_results" REDIS_CONNECT_RETRY=Truerr}r(h$Uh%jubaubeubeubh&)r}r(h$Uh%h,h.h1h3h4h5}r(h7]h8]h9]h:]rUmongodb-backend-settingsrah=]rhauh?Kh@hhA]r(hC)r}r(h$XMongoDB backend settingsrh%jh.h1h3hGh5}r(h7]h8]h9]h:]h=]uh?Kh@hhA]rhJXMongoDB backend settingsrr}r(h$jh%jubaubh)r}r(h$Uh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?Nh@hhA]rh)r}r(h$X|**NOTE** The MongoDB backend requires the :mod:`pymongo` library: http://github.com/mongodb/mongo-python-driver/tree/master h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]r(h)r}r(h$XA**NOTE** The MongoDB backend requires the :mod:`pymongo` library:rh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]r(j+)r}r(h$X**NOTE**h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJXNOTErr}r(h$Uh%jubah3j3ubhJX" The MongoDB backend requires the rr}r(h$X" The MongoDB backend requires the h%jubj7)r}r (h$X:mod:`pymongo`r h%jh.h1h3j;h5}r (UreftypeXmodj>j?XpymongoU refdomainXpyr h:]h9]U refexplicith7]h8]h=]j@jAjMNjNNuh?KhA]r h_)r}r(h$j h5}r(h7]h8]r(jGj Xpy-modreh9]h:]h=]uh%jhA]rhJXpymongorr}r(h$Uh%jubah3hgubaubhJX library:rr}r(h$X library:h%jubeubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$X9http://github.com/mongodb/mongo-python-driver/tree/masterr h%jh.h1h3hRh5}r!(h7]h8]h9]h:]h=]uh?KhA]r"j~)r#}r$(h$j h5}r%(Urefurij h:]h9]h7]h8]h=]uh%jhA]r&hJX9http://github.com/mongodb/mongo-python-driver/tree/masterr'r(}r)(h$Uh%j#ubah3jubaubah3hubeubaubh)r*}r+(h$Uh%jh.h1h3hh5}r,(hX*h:]h9]h7]h8]h=]uh?Kh@hhA]r-h)r.}r/(h$XECELERY_MONGODB_BACKEND_SETTINGS This is a dict supporting the following keys: * host Hostname of the MongoDB server. Defaults to "localhost". * port The port the MongoDB server is listening to. Defaults to 27017. * user User name to authenticate to the MongoDB server as (optional). * password Password to authenticate to the MongoDB server (optional). * database The database name to connect to. Defaults to "celery". * taskmeta_collection The collection name to store task meta data. Defaults to "celery_taskmeta". h%j*h.h1h3hh5}r0(h7]h8]h9]h:]h=]uh?Nh@hhA]r1(hN)r2}r3(h$XCELERY_MONGODB_BACKEND_SETTINGSr4h%j.h.h1h3hRh5}r5(h7]h8]h9]h:]h=]uh?KhA]r6hJXCELERY_MONGODB_BACKEND_SETTINGSr7r8}r9(h$j4h%j2ubaubjQ)r:}r;(h$Uh5}r<(h7]h8]h9]h:]h=]uh%j.hA]r=(hN)r>}r?(h$X-This is a dict supporting the following keys:r@h%j:h.h1h3hRh5}rA(h7]h8]h9]h:]h=]uh?KhA]rBhJX-This is a dict supporting the following keys:rCrD}rE(h$j@h%j>ubaubh)rF}rG(h$Uh5}rH(hX*h:]h9]h7]h8]h=]uh%j:hA]rI(h)rJ}rK(h$X@host Hostname of the MongoDB server. Defaults to "localhost". h5}rL(h7]h8]h9]h:]h=]uh%jFhA]rMh)rN}rO(h$Uh5}rP(h7]h8]h9]h:]h=]uh%jJhA]rQh)rR}rS(h$X>host Hostname of the MongoDB server. Defaults to "localhost". h%jNh.h1h3hh5}rT(h7]h8]h9]h:]h=]uh?KhA]rU(h)rV}rW(h$XhostrXh%jRh.h1h3hh5}rY(h7]h8]h9]h:]h=]uh?KhA]rZhJXhostr[r\}r](h$jXh%jVubaubh)r^}r_(h$Uh5}r`(h7]h8]h9]h:]h=]uh%jRhA]rahN)rb}rc(h$X8Hostname of the MongoDB server. Defaults to "localhost".rdh%j^h.h1h3hRh5}re(h7]h8]h9]h:]h=]uh?KhA]rfhJX8Hostname of the MongoDB server. Defaults to "localhost".rgrh}ri(h$jdh%jbubaubah3hubeubah3hubah3hubh)rj}rk(h$XGport The port the MongoDB server is listening to. Defaults to 27017. h5}rl(h7]h8]h9]h:]h=]uh%jFhA]rmh)rn}ro(h$Uh5}rp(h7]h8]h9]h:]h=]uh%jjhA]rqh)rr}rs(h$XEport The port the MongoDB server is listening to. Defaults to 27017. h%jnh.h1h3hh5}rt(h7]h8]h9]h:]h=]uh?KhA]ru(h)rv}rw(h$Xportrxh%jrh.h1h3hh5}ry(h7]h8]h9]h:]h=]uh?KhA]rzhJXportr{r|}r}(h$jxh%jvubaubh)r~}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jrhA]rhN)r}r(h$X?The port the MongoDB server is listening to. Defaults to 27017.rh%j~h.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJX?The port the MongoDB server is listening to. Defaults to 27017.rr}r(h$jh%jubaubah3hubeubah3hubah3hubh)r}r(h$XFuser User name to authenticate to the MongoDB server as (optional). h5}r(h7]h8]h9]h:]h=]uh%jFhA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rh)r}r(h$XDuser User name to authenticate to the MongoDB server as (optional). h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]r(h)r}r(h$Xuserrh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJXuserrr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$X>User name to authenticate to the MongoDB server as (optional).rh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJX>User name to authenticate to the MongoDB server as (optional).rr}r(h$jh%jubaubah3hubeubah3hubah3hubh)r}r(h$XFpassword Password to authenticate to the MongoDB server (optional). h5}r(h7]h8]h9]h:]h=]uh%jFhA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rh)r}r(h$XDpassword Password to authenticate to the MongoDB server (optional). h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]r(h)r}r(h$Xpasswordrh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJXpasswordrr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$X:Password to authenticate to the MongoDB server (optional).rh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJX:Password to authenticate to the MongoDB server (optional).rr}r(h$jh%jubaubah3hubeubah3hubah3hubh)r}r(h$XBdatabase The database name to connect to. Defaults to "celery". h5}r(h7]h8]h9]h:]h=]uh%jFhA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rh)r}r(h$X@database The database name to connect to. Defaults to "celery". h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]r(h)r}r(h$Xdatabaserh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJXdatabaserr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$X6The database name to connect to. Defaults to "celery".rh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJX6The database name to connect to. Defaults to "celery".rr}r(h$jh%jubaubah3hubeubah3hubah3hubh)r}r(h$Xetaskmeta_collection The collection name to store task meta data. Defaults to "celery_taskmeta". h5}r(h7]h8]h9]h:]h=]uh%jFhA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rh)r}r(h$Xataskmeta_collection The collection name to store task meta data. Defaults to "celery_taskmeta". h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]r(h)r}r(h$Xtaskmeta_collectionrh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJXtaskmeta_collectionrr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$XKThe collection name to store task meta data. Defaults to "celery_taskmeta".rh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?KhA]rhJXKThe collection name to store task meta data. Defaults to "celery_taskmeta".rr}r (h$jh%jubaubah3hubeubah3hubah3hubeh3hubeh3jfubeubaubh&)r }r (h$Uh)Kh%jh.h1h3h4h5}r (h7]r Xexample configurationrah8]h9]h:]rUid5rah=]uh?Mh@hhA]r(hC)r}r(h$XExample configurationrh%j h.h1h3hGh5}r(h7]h8]h9]h:]h=]uh?Mh@hhA]rhJXExample configurationrr}r(h$jh%jubaubh)r}r(h$XCELERY_RESULT_BACKEND = "mongodb" CELERY_MONGODB_BACKEND_SETTINGS = { "host": "192.168.1.100", "port": 30000, "database": "mydb", "taskmeta_collection": "my_taskmeta_collection", }h%j h.h1h3hh5}r(hhXpythonhhh:]h9]h7]h8]h=]uh?Mh@hhA]rhJXCELERY_RESULT_BACKEND = "mongodb" CELERY_MONGODB_BACKEND_SETTINGS = { "host": "192.168.1.100", "port": 30000, "database": "mydb", "taskmeta_collection": "my_taskmeta_collection", }rr}r (h$Uh%jubaubeubeubh&)r!}r"(h$Uh%h,h.h1h3h4h5}r#(h7]h8]h9]h:]r$Umessaging-settingsr%ah=]r&hauh?Mh@hhA]r'(hC)r(}r)(h$XMessaging settingsr*h%j!h.h1h3hGh5}r+(h7]h8]h9]h:]h=]uh?Mh@hhA]r,hJXMessaging settingsr-r.}r/(h$j*h%j(ubaubh&)r0}r1(h$Uh%j!h.h1h3h4h5}r2(h7]h8]h9]h:]r3Uroutingr4ah=]r5h auh?Mh@hhA]r6(hC)r7}r8(h$XRoutingr9h%j0h.h1h3hGh5}r:(h7]h8]h9]h:]h=]uh?Mh@hhA]r;hJXRoutingr<r=}r>(h$j9h%j7ubaubh)r?}r@(h$Uh%j0h.h1h3hh5}rA(hX*h:]h9]h7]h8]h=]uh?Mh@hhA]rB(h)rC}rD(h$XHCELERY_QUEUES The mapping of queues the worker consumes from. This is a dictionary of queue name/options. See :doc:`userguide/routing` for more information. The default is a queue/exchange/binding key of ``"celery"``, with exchange type ``direct``. You don't have to care about this unless you want custom routing facilities. h%j?h.h1h3hh5}rE(h7]h8]h9]h:]h=]uh?Nh@hhA]rF(hN)rG}rH(h$XCELERY_QUEUES The mapping of queues the worker consumes from. This is a dictionary of queue name/options. See :doc:`userguide/routing` for more information.h%jCh.h1h3hRh5}rI(h7]h8]h9]h:]h=]uh?MhA]rJ(hJXnCELERY_QUEUES The mapping of queues the worker consumes from. This is a dictionary of queue name/options. See rKrL}rM(h$XnCELERY_QUEUES The mapping of queues the worker consumes from. This is a dictionary of queue name/options. See h%jGubj7)rN}rO(h$X:doc:`userguide/routing`rPh%jGh.h1h3j;h5}rQ(UreftypeXdocrRj>j?Xuserguide/routingU refdomainUh:]h9]U refexplicith7]h8]h=]j@jAuh?MhA]rSh_)rT}rU(h$jPh5}rV(h7]h8]rW(jGjReh9]h:]h=]uh%jNhA]rXhJXuserguide/routingrYrZ}r[(h$Uh%jTubah3hgubaubhJX for more information.r\r]}r^(h$X for more information.h%jGubeubhN)r_}r`(h$X[The default is a queue/exchange/binding key of ``"celery"``, with exchange type ``direct``.h%jCh.h1h3hRh5}ra(h7]h8]h9]h:]h=]uh?MhA]rb(hJX/The default is a queue/exchange/binding key of rcrd}re(h$X/The default is a queue/exchange/binding key of h%j_ubh_)rf}rg(h$X ``"celery"``h5}rh(h7]h8]h9]h:]h=]uh%j_hA]rihJX"celery"rjrk}rl(h$Uh%jfubah3hgubhJX, with exchange type rmrn}ro(h$X, with exchange type h%j_ubh_)rp}rq(h$X ``direct``h5}rr(h7]h8]h9]h:]h=]uh%j_hA]rshJXdirectrtru}rv(h$Uh%jpubah3hgubhJX.rw}rx(h$X.h%j_ubeubhN)ry}rz(h$XLYou don't have to care about this unless you want custom routing facilities.r{h%jCh.h1h3hRh5}r|(h7]h8]h9]h:]h=]uh?MhA]r}hJXLYou don't have to care about this unless you want custom routing facilities.r~r}r(h$j{h%jyubaubeubh)r}r(h$XCELERY_DEFAULT_QUEUE The queue used by default, if no custom queue is specified. This queue must be listed in ``CELERY_QUEUES``. The default is: ``celery``. h%j?h.Nh3hh5}r(h7]h8]h9]h:]h=]uh?Nh@hhA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rh)r}r(h$XCELERY_DEFAULT_QUEUE The queue used by default, if no custom queue is specified. This queue must be listed in ``CELERY_QUEUES``. The default is: ``celery``. h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?M hA]r(h)r}r(h$XCELERY_DEFAULT_QUEUErh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?M hA]rhJXCELERY_DEFAULT_QUEUErr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$XThe queue used by default, if no custom queue is specified. This queue must be listed in ``CELERY_QUEUES``. The default is: ``celery``.h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?MhA]r(hJXYThe queue used by default, if no custom queue is specified. This queue must be listed in rr}r(h$XYThe queue used by default, if no custom queue is specified. This queue must be listed in h%jubh_)r}r(h$X``CELERY_QUEUES``h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJX CELERY_QUEUESrr}r(h$Uh%jubah3hgubhJX. The default is: rr}r(h$X. The default is: h%jubh_)r}r(h$X ``celery``h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJXceleryrr}r(h$Uh%jubah3hgubhJX.r}r(h$X.h%jubeubah3hubeubah3hubaubh)r}r(h$XCELERY_DEFAULT_EXCHANGE Name of the default exchange to use when no custom exchange is specified. The default is: ``celery``. h%j?h.Nh3hh5}r(h7]h8]h9]h:]h=]uh?Nh@hhA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rh)r}r(h$X~CELERY_DEFAULT_EXCHANGE Name of the default exchange to use when no custom exchange is specified. The default is: ``celery``. h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?M%hA]r(h)r}r(h$XCELERY_DEFAULT_EXCHANGErh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?M%hA]rhJXCELERY_DEFAULT_EXCHANGErr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$XeName of the default exchange to use when no custom exchange is specified. The default is: ``celery``.h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?M#hA]r(hJXZName of the default exchange to use when no custom exchange is specified. The default is: rr}r(h$XZName of the default exchange to use when no custom exchange is specified. The default is: h%jubh_)r}r(h$X ``celery``h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJXceleryrr}r(h$Uh%jubah3hgubhJX.r}r(h$X.h%jubeubah3hubeubah3hubaubh)r}r(h$X~CELERY_DEFAULT_EXCHANGE_TYPE Default exchange type used when no custom exchange is specified. The default is: ``direct``. h%j?h.Nh3hh5}r(h7]h8]h9]h:]h=]uh?Nh@hhA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rh)r}r(h$XzCELERY_DEFAULT_EXCHANGE_TYPE Default exchange type used when no custom exchange is specified. The default is: ``direct``. h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?M)hA]r(h)r}r(h$XCELERY_DEFAULT_EXCHANGE_TYPErh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?M)hA]rhJXCELERY_DEFAULT_EXCHANGE_TYPErr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$X\Default exchange type used when no custom exchange is specified. The default is: ``direct``.h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?M(hA]r(hJXQDefault exchange type used when no custom exchange is specified. The default is: rr}r(h$XQDefault exchange type used when no custom exchange is specified. The default is: h%jubh_)r}r(h$X ``direct``h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJXdirectrr}r(h$Uh%jubah3hgubhJX.r}r(h$X.h%jubeubah3hubeubah3hubaubh)r}r(h$XlCELERY_DEFAULT_ROUTING_KEY The default routing key used when sending tasks. The default is: ``celery``. h%j?h.Nh3hh5}r(h7]h8]h9]h:]h=]uh?Nh@hhA]rh)r}r(h$Uh5}r (h7]h8]h9]h:]h=]uh%jhA]r h)r }r (h$XhCELERY_DEFAULT_ROUTING_KEY The default routing key used when sending tasks. The default is: ``celery``. h%jh.h1h3hh5}r (h7]h8]h9]h:]h=]uh?M-hA]r(h)r}r(h$XCELERY_DEFAULT_ROUTING_KEYrh%j h.h1h3hh5}r(h7]h8]h9]h:]h=]uh?M-hA]rhJXCELERY_DEFAULT_ROUTING_KEYrr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%j hA]rhN)r}r(h$XLThe default routing key used when sending tasks. The default is: ``celery``.h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?M,hA]r(hJXAThe default routing key used when sending tasks. The default is: rr }r!(h$XAThe default routing key used when sending tasks. The default is: h%jubh_)r"}r#(h$X ``celery``h5}r$(h7]h8]h9]h:]h=]uh%jhA]r%hJXceleryr&r'}r((h$Uh%j"ubah3hgubhJX.r)}r*(h$X.h%jubeubah3hubeubah3hubaubeubeubh&)r+}r,(h$Uh%j!h.h1h3h4h5}r-(h7]h8]h9]h:]r.U connectionr/ah=]r0hauh?M0h@hhA]r1(hC)r2}r3(h$X Connectionr4h%j+h.h1h3hGh5}r5(h7]h8]h9]h:]h=]uh?M0h@hhA]r6hJX Connectionr7r8}r9(h$j4h%j2ubaubh)r:}r;(h$Uh%j+h.h1h3hh5}r<(hX*h:]h9]h7]h8]h=]uh?M2h@hhA]r=(h)r>}r?(h$XCELERY_BROKER_CONNECTION_TIMEOUT The timeout in seconds before we give up establishing a connection to the AMQP server. Default is 4 seconds. h%j:h.Nh3hh5}r@(h7]h8]h9]h:]h=]uh?Nh@hhA]rAh)rB}rC(h$Uh5}rD(h7]h8]h9]h:]h=]uh%j>hA]rEh)rF}rG(h$XCELERY_BROKER_CONNECTION_TIMEOUT The timeout in seconds before we give up establishing a connection to the AMQP server. Default is 4 seconds. h%jBh.h1h3hh5}rH(h7]h8]h9]h:]h=]uh?M4hA]rI(h)rJ}rK(h$X CELERY_BROKER_CONNECTION_TIMEOUTrLh%jFh.h1h3hh5}rM(h7]h8]h9]h:]h=]uh?M4hA]rNhJX CELERY_BROKER_CONNECTION_TIMEOUTrOrP}rQ(h$jLh%jJubaubh)rR}rS(h$Uh5}rT(h7]h8]h9]h:]h=]uh%jFhA]rUhN)rV}rW(h$XlThe timeout in seconds before we give up establishing a connection to the AMQP server. Default is 4 seconds.rXh%jRh.h1h3hRh5}rY(h7]h8]h9]h:]h=]uh?M3hA]rZhJXlThe timeout in seconds before we give up establishing a connection to the AMQP server. Default is 4 seconds.r[r\}r](h$jXh%jVubaubah3hubeubah3hubaubh)r^}r_(h$X%CELERY_BROKER_CONNECTION_RETRY Automatically try to re-establish the connection to the AMQP broker if it's lost. The time between retries is increased for each retry, and is not exhausted before ``CELERY_BROKER_CONNECTION_MAX_RETRIES`` is exceeded. This behavior is on by default. h%j:h.Nh3hh5}r`(h7]h8]h9]h:]h=]uh?Nh@hhA]rah)rb}rc(h$Uh5}rd(h7]h8]h9]h:]h=]uh%j^hA]reh)rf}rg(h$XCELERY_BROKER_CONNECTION_RETRY Automatically try to re-establish the connection to the AMQP broker if it's lost. The time between retries is increased for each retry, and is not exhausted before ``CELERY_BROKER_CONNECTION_MAX_RETRIES`` is exceeded. This behavior is on by default. h%jbh.h1h3hh5}rh(h7]h8]h9]h:]h=]uh?M=hA]ri(h)rj}rk(h$XCELERY_BROKER_CONNECTION_RETRYrlh%jfh.h1h3hh5}rm(h7]h8]h9]h:]h=]uh?M=hA]rnhJXCELERY_BROKER_CONNECTION_RETRYrorp}rq(h$jlh%jjubaubh)rr}rs(h$Uh5}rt(h7]h8]h9]h:]h=]uh%jfhA]ru(hN)rv}rw(h$XQAutomatically try to re-establish the connection to the AMQP broker if it's lost.rxh%jrh.h1h3hRh5}ry(h7]h8]h9]h:]h=]uh?M7hA]rzhJXQAutomatically try to re-establish the connection to the AMQP broker if it's lost.r{r|}r}(h$jxh%jvubaubhN)r~}r(h$XThe time between retries is increased for each retry, and is not exhausted before ``CELERY_BROKER_CONNECTION_MAX_RETRIES`` is exceeded.h%jrh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?M:hA]r(hJXRThe time between retries is increased for each retry, and is not exhausted before rr}r(h$XRThe time between retries is increased for each retry, and is not exhausted before h%j~ubh_)r}r(h$X(``CELERY_BROKER_CONNECTION_MAX_RETRIES``h5}r(h7]h8]h9]h:]h=]uh%j~hA]rhJX$CELERY_BROKER_CONNECTION_MAX_RETRIESrr}r(h$Uh%jubah3hgubhJX is exceeded.rr}r(h$X is exceeded.h%j~ubeubhN)r}r(h$XThis behavior is on by default.rh%jrh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?M=hA]rhJXThis behavior is on by default.rr}r(h$jh%jubaubeh3hubeubah3hubaubh)r}r(h$XCELERY_BROKER_CONNECTION_MAX_RETRIES Maximum number of retries before we give up re-establishing a connection to the AMQP broker. If this is set to ``0`` or ``None``, we will retry forever. Default is 100 retries. h%j:h.Nh3hh5}r(h7]h8]h9]h:]h=]uh?Nh@hhA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rh)r}r(h$XCELERY_BROKER_CONNECTION_MAX_RETRIES Maximum number of retries before we give up re-establishing a connection to the AMQP broker. If this is set to ``0`` or ``None``, we will retry forever. Default is 100 retries. h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?MEhA]r(h)r}r(h$X$CELERY_BROKER_CONNECTION_MAX_RETRIESrh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?MEhA]rhJX$CELERY_BROKER_CONNECTION_MAX_RETRIESrr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]r(hN)r}r(h$X\Maximum number of retries before we give up re-establishing a connection to the AMQP broker.rh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?M@hA]rhJX\Maximum number of retries before we give up re-establishing a connection to the AMQP broker.rr}r(h$jh%jubaubhN)r}r(h$X;If this is set to ``0`` or ``None``, we will retry forever.h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?MChA]r(hJXIf this is set to rr}r(h$XIf this is set to h%jubh_)r}r(h$X``0``h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJX0r}r(h$Uh%jubah3hgubhJX or rr}r(h$X or h%jubh_)r}r(h$X``None``h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJXNonerr}r(h$Uh%jubah3hgubhJX, we will retry forever.rr}r(h$X, we will retry forever.h%jubeubhN)r}r(h$XDefault is 100 retries.rh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?MEhA]rhJXDefault is 100 retries.rr}r(h$jh%jubaubeh3hubeubah3hubaubeubeubeubh&)r}r(h$Uh%h,h.h1h3h4h5}r(h7]h8]h9]h:]rUtask-execution-settingsrah=]rh auh?MHh@hhA]r(hC)r}r(h$XTask execution settingsrh%jh.h1h3hGh5}r(h7]h8]h9]h:]h=]uh?MHh@hhA]rhJXTask execution settingsrr}r(h$jh%jubaubh)r}r(h$Uh%jh.h1h3hh5}r(hX*h:]h9]h7]h8]h=]uh?MJh@hhA]r(h)r}r(h$XCELERY_ALWAYS_EAGER If this is ``True``, all tasks will be executed locally by blocking until it is finished. ``apply_async`` and ``Task.delay`` will return a :class:`celery.result.EagerResult` which emulates the behavior of :class:`celery.result.AsyncResult`, except the result has already been evaluated. Tasks will never be sent to the queue, but executed locally instead. h%jh.Nh3hh5}r(h7]h8]h9]h:]h=]uh?Nh@hhA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rh)r}r(h$XyCELERY_ALWAYS_EAGER If this is ``True``, all tasks will be executed locally by blocking until it is finished. ``apply_async`` and ``Task.delay`` will return a :class:`celery.result.EagerResult` which emulates the behavior of :class:`celery.result.AsyncResult`, except the result has already been evaluated. Tasks will never be sent to the queue, but executed locally instead. h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?MRhA]r(h)r}r(h$XCELERY_ALWAYS_EAGERrh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?MRhA]rhJXCELERY_ALWAYS_EAGERrr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]r(hN)r}r(h$XIf this is ``True``, all tasks will be executed locally by blocking until it is finished. ``apply_async`` and ``Task.delay`` will return a :class:`celery.result.EagerResult` which emulates the behavior of :class:`celery.result.AsyncResult`, except the result has already been evaluated.h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?MKhA]r(hJX If this is rr }r (h$X If this is h%jubh_)r }r (h$X``True``h5}r (h7]h8]h9]h:]h=]uh%jhA]rhJXTruerr}r(h$Uh%j ubah3hgubhJXG, all tasks will be executed locally by blocking until it is finished. rr}r(h$XG, all tasks will be executed locally by blocking until it is finished. h%jubh_)r}r(h$X``apply_async``h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJX apply_asyncrr}r(h$Uh%jubah3hgubhJX and rr}r(h$X and h%jubh_)r}r (h$X``Task.delay``h5}r!(h7]h8]h9]h:]h=]uh%jhA]r"hJX Task.delayr#r$}r%(h$Uh%jubah3hgubhJX will return a r&r'}r((h$X will return a h%jubj7)r)}r*(h$X":class:`celery.result.EagerResult`r+h%jh.h1h3j;h5}r,(UreftypeXclassj>j?Xcelery.result.EagerResultU refdomainXpyr-h:]h9]U refexplicith7]h8]h=]j@jAjMNjNNuh?MKhA]r.h_)r/}r0(h$j+h5}r1(h7]h8]r2(jGj-Xpy-classr3eh9]h:]h=]uh%j)hA]r4hJXcelery.result.EagerResultr5r6}r7(h$Uh%j/ubah3hgubaubhJX which emulates the behavior of r8r9}r:(h$X which emulates the behavior of h%jubj7)r;}r<(h$X":class:`celery.result.AsyncResult`r=h%jh.h1h3j;h5}r>(UreftypeXclassj>j?Xcelery.result.AsyncResultU refdomainXpyr?h:]h9]U refexplicith7]h8]h=]j@jAjMNjNNuh?MKhA]r@h_)rA}rB(h$j=h5}rC(h7]h8]rD(jGj?Xpy-classrEeh9]h:]h=]uh%j;hA]rFhJXcelery.result.AsyncResultrGrH}rI(h$Uh%jAubah3hgubaubhJX/, except the result has already been evaluated.rJrK}rL(h$X/, except the result has already been evaluated.h%jubeubhN)rM}rN(h$XDTasks will never be sent to the queue, but executed locally instead.rOh%jh.h1h3hRh5}rP(h7]h8]h9]h:]h=]uh?MQhA]rQhJXDTasks will never be sent to the queue, but executed locally instead.rRrS}rT(h$jOh%jMubaubeh3hubeubah3hubaubh)rU}rV(h$XCELERY_IGNORE_RESULT Whether to store the task return values or not (tombstones). If you still want to store errors, just not successful return values, you can set ``CELERY_STORE_ERRORS_EVEN_IF_IGNORED``. h%jh.h1h3hh5}rW(h7]h8]h9]h:]h=]uh?Nh@hhA]rX(hN)rY}rZ(h$XCELERY_IGNORE_RESULTr[h%jUh.h1h3hRh5}r\(h7]h8]h9]h:]h=]uh?MThA]r]hJXCELERY_IGNORE_RESULTr^r_}r`(h$j[h%jYubaubjQ)ra}rb(h$Uh5}rc(h7]h8]h9]h:]h=]uh%jUhA]rdhN)re}rf(h$XWhether to store the task return values or not (tombstones). If you still want to store errors, just not successful return values, you can set ``CELERY_STORE_ERRORS_EVEN_IF_IGNORED``.h%jah.h1h3hRh5}rg(h7]h8]h9]h:]h=]uh?MVhA]rh(hJXWhether to store the task return values or not (tombstones). If you still want to store errors, just not successful return values, you can set rirj}rk(h$XWhether to store the task return values or not (tombstones). If you still want to store errors, just not successful return values, you can set h%jeubh_)rl}rm(h$X'``CELERY_STORE_ERRORS_EVEN_IF_IGNORED``h5}rn(h7]h8]h9]h:]h=]uh%jehA]rohJX#CELERY_STORE_ERRORS_EVEN_IF_IGNOREDrprq}rr(h$Uh%jlubah3hgubhJX.rs}rt(h$X.h%jeubeubah3jfubeubh)ru}rv(h$XCELERY_TASK_RESULT_EXPIRES Time (in seconds, or a :class:`datetime.timedelta` object) for when after stored task tombstones are deleted. **NOTE**: For the moment this only works with the database, cache and MongoDB h%jh.Nh3hh5}rw(h7]h8]h9]h:]h=]uh?Nh@hhA]rxh)ry}rz(h$Uh5}r{(h7]h8]h9]h:]h=]uh%juhA]r|h)r}}r~(h$XCELERY_TASK_RESULT_EXPIRES Time (in seconds, or a :class:`datetime.timedelta` object) for when after stored task tombstones are deleted. **NOTE**: For the moment this only works with the database, cache and MongoDB h%jyh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?M^hA]r(h)r}r(h$XCELERY_TASK_RESULT_EXPIRESrh%j}h.h1h3hh5}r(h7]h8]h9]h:]h=]uh?M^hA]rhJXCELERY_TASK_RESULT_EXPIRESrr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%j}hA]r(hN)r}r(h$XmTime (in seconds, or a :class:`datetime.timedelta` object) for when after stored task tombstones are deleted.h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?M[hA]r(hJXTime (in seconds, or a rr}r(h$XTime (in seconds, or a h%jubj7)r}r(h$X:class:`datetime.timedelta`rh%jh.h1h3j;h5}r(UreftypeXclassj>j?Xdatetime.timedeltaU refdomainXpyrh:]h9]U refexplicith7]h8]h=]j@jAjMNjNNuh?M[hA]rh_)r}r(h$jh5}r(h7]h8]r(jGjXpy-classreh9]h:]h=]uh%jhA]rhJXdatetime.timedeltarr}r(h$Uh%jubah3hgubaubhJX; object) for when after stored task tombstones are deleted.rr}r(h$X; object) for when after stored task tombstones are deleted.h%jubeubhN)r}r(h$XM**NOTE**: For the moment this only works with the database, cache and MongoDBh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?M^hA]r(j+)r}r(h$X**NOTE**h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJXNOTErr}r(h$Uh%jubah3j3ubhJXE: For the moment this only works with the database, cache and MongoDBrr}r(h$XE: For the moment this only works with the database, cache and MongoDBh%jubeubeh3hubeubah3hubaubh)r}r(h$XCELERY_TRACK_STARTED If ``True`` the task will report its status as "started" when the task is executed by a worker. The default value is ``False`` as the normal behaviour is to not report that level of granularity. Tasks are either pending, finished, or waiting to be retried. Having a "started" status can be useful for when there are long running tasks and there is a need to report which task is currently running. backends. h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?Nh@hhA]r(hN)r}r(h$XCELERY_TRACK_STARTEDrh%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?M`hA]rhJXCELERY_TRACK_STARTEDrr}r(h$jh%jubaubjQ)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rhN)r}r(h$XIf ``True`` the task will report its status as "started" when the task is executed by a worker. The default value is ``False`` as the normal behaviour is to not report that level of granularity. Tasks are either pending, finished, or waiting to be retried. Having a "started" status can be useful for when there are long running tasks and there is a need to report which task is currently running. backends.h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?MbhA]r(hJXIf rr}r(h$XIf h%jubh_)r}r(h$X``True``h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJXTruerr}r(h$Uh%jubah3hgubhJXj the task will report its status as "started" when the task is executed by a worker. The default value is rr}r(h$Xj the task will report its status as "started" when the task is executed by a worker. The default value is h%jubh_)r}r(h$X ``False``h5}r(h7]h8]h9]h:]h=]uh%jhA]rhJXFalserr}r(h$Uh%jubah3hgubhJX as the normal behaviour is to not report that level of granularity. Tasks are either pending, finished, or waiting to be retried. Having a "started" status can be useful for when there are long running tasks and there is a need to report which task is currently running. backends.rr}r(h$X as the normal behaviour is to not report that level of granularity. Tasks are either pending, finished, or waiting to be retried. Having a "started" status can be useful for when there are long running tasks and there is a need to report which task is currently running. backends.h%jubeubah3jfubeubh)r}r(h$XCELERY_TASK_SERIALIZER A string identifying the default serialization method to use. Can be ``pickle`` (default), ``json``, ``yaml``, or any custom serialization methods that have been registered with :mod:`carrot.serialization.registry`. Default is ``pickle``. h%jh.Nh3hh5}r(h7]h8]h9]h:]h=]uh?Nh@hhA]rh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]rh)r}r(h$XCELERY_TASK_SERIALIZER A string identifying the default serialization method to use. Can be ``pickle`` (default), ``json``, ``yaml``, or any custom serialization methods that have been registered with :mod:`carrot.serialization.registry`. Default is ``pickle``. h%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?MqhA]r(h)r}r(h$XCELERY_TASK_SERIALIZERrh%jh.h1h3hh5}r(h7]h8]h9]h:]h=]uh?MqhA]rhJXCELERY_TASK_SERIALIZERrr}r(h$jh%jubaubh)r}r(h$Uh5}r(h7]h8]h9]h:]h=]uh%jhA]r(hN)r}r(h$XA string identifying the default serialization method to use. Can be ``pickle`` (default), ``json``, ``yaml``, or any custom serialization methods that have been registered with :mod:`carrot.serialization.registry`.h%jh.h1h3hRh5}r(h7]h8]h9]h:]h=]uh?MlhA]r(hJXEA string identifying the default serialization method to use. Can be rr}r(h$XEA string identifying the default serialization method to use. Can be h%jubh_)r}r(h$X ``pickle``h5}r (h7]h8]h9]h:]h=]uh%jhA]r hJXpickler r }r (h$Uh%jubah3hgubhJX (default), r r }r (h$X (default), h%jubh_)r }r (h$X``json``h5}r (h7]h8]h9]h:]h=]uh%jhA]r hJXjsonr r }r (h$Uh%j ubah3hgubhJX, r r }r (h$X, h%jubh_)r }r (h$X``yaml``h5}r (h7]h8]h9]h:]h=]uh%jhA]r hJXyamlr r }r (h$Uh%j ubah3hgubhJXE, or any custom serialization methods that have been registered with r r }r (h$XE, or any custom serialization methods that have been registered with h%jubj7)r }r (h$X$:mod:`carrot.serialization.registry`r h%jh.h1h3j;h5}r (UreftypeXmodj>j?Xcarrot.serialization.registryU refdomainXpyr h:]h9]U refexplicith7]h8]h=]j@jAjMNjNNuh?MlhA]r! h_)r" }r# (h$j h5}r$ (h7]h8]r% (jGj Xpy-modr& eh9]h:]h=]uh%j hA]r' hJXcarrot.serialization.registryr( r) }r* (h$Uh%j" ubah3hgubaubhJX.r+ }r, (h$X.h%jubeubhN)r- }r. (h$XDefault is ``pickle``.h%jh.h1h3hRh5}r/ (h7]h8]h9]h:]h=]uh?MqhA]r0 (hJX Default is r1 r2 }r3 (h$X Default is h%j- ubh_)r4 }r5 (h$X ``pickle``h5}r6 (h7]h8]h9]h:]h=]uh%j- hA]r7 hJXpickler8 r9 }r: (h$Uh%j4 ubah3hgubhJX.r; }r< (h$X.h%j- ubeubeh3hubeubah3hubaubh)r= }r> (h$XCELERY_DEFAULT_RATE_LIMIT The global default rate limit for tasks. This value is used for tasks that does not have a custom rate limit The default is no rate limit. h%jh.h1h3hh5}r? (h7]h8]h9]h:]h=]uh?Nh@hhA]r@ (hN)rA }rB (h$XCELERY_DEFAULT_RATE_LIMITrC h%j= h.h1h3hRh5}rD (h7]h8]h9]h:]h=]uh?MshA]rE hJXCELERY_DEFAULT_RATE_LIMITrF rG }rH (h$jC h%jA ubaubhN)rI }rJ (h$X(The global default rate limit for tasks.rK h%j= h.h1h3hRh5}rL (h7]h8]h9]h:]h=]uh?MuhA]rM hJX(The global default rate limit for tasks.rN rO }rP (h$jK h%jI ubaubhN)rQ }rR (h$XaThis value is used for tasks that does not have a custom rate limit The default is no rate limit.rS h%j= h.h1h3hRh5}rT (h7]h8]h9]h:]h=]uh?MwhA]rU hJXaThis value is used for tasks that does not have a custom rate limit The default is no rate limit.rV rW }rX (h$jS h%jQ ubaubeubh)rY }rZ (h$XdCELERY_DISABLE_RATE_LIMITS Disable all rate limits, even if tasks has explicit rate limits set. h%jh.h1h3hh5}r[ (h7]h8]h9]h:]h=]uh?Nh@hhA]r\ (hN)r] }r^ (h$XCELERY_DISABLE_RATE_LIMITSr_ h%jY h.h1h3hRh5}r` (h7]h8]h9]h:]h=]uh?MzhA]ra hJXCELERY_DISABLE_RATE_LIMITSrb rc }rd (h$j_ h%j] ubaubjQ)re }rf (h$Uh5}rg (h7]h8]h9]h:]h=]uh%jY hA]rh hN)ri }rj (h$XDDisable all rate limits, even if tasks has explicit rate limits set.rk h%je h.h1h3hRh5}rl (h7]h8]h9]h:]h=]uh?M|hA]rm hJXDDisable all rate limits, even if tasks has explicit rate limits set.rn ro }rp (h$jk h%ji ubaubah3jfubeubeubeubh&)rq }rr (h$Uh%h,h.h1h3h4h5}rs (h7]h8]h9]h:]rt Uworker-celerydru ah=]rv hauh?Mh@hhA]rw (hC)rx }ry (h$XWorker: celerydrz h%jq h.h1h3hGh5}r{ (h7]h8]h9]h:]h=]uh?Mh@hhA]r| hJXWorker: celerydr} r~ }r (h$jz h%jx ubaubh)r }r (h$Uh%jq h.h1h3hh5}r (hX*h:]h9]h7]h8]h=]uh?Mh@hhA]r (h)r }r (h$XCELERY_IMPORTS A sequence of modules to import when the celery daemon starts. This is useful to add tasks if you are not using django or cannot use task auto-discovery. h%j h.Nh3hh5}r (h7]h8]h9]h:]h=]uh?Nh@hhA]r h)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r h)r }r (h$XCELERY_IMPORTS A sequence of modules to import when the celery daemon starts. This is useful to add tasks if you are not using django or cannot use task auto-discovery. h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r (h)r }r (h$XCELERY_IMPORTSr h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r hJXCELERY_IMPORTSr r }r (h$j h%j ubaubh)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r hN)r }r (h$XA sequence of modules to import when the celery daemon starts. This is useful to add tasks if you are not using django or cannot use task auto-discovery.r h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r hJXA sequence of modules to import when the celery daemon starts. This is useful to add tasks if you are not using django or cannot use task auto-discovery.r r }r (h$j h%j ubaubah3hubeubah3hubaubh)r }r (h$X]CELERY_SEND_EVENTS Send events so the worker can be monitored by tools like ``celerymon``. h%j h.Nh3hh5}r (h7]h8]h9]h:]h=]uh?Nh@hhA]r h)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r h)r }r (h$X[CELERY_SEND_EVENTS Send events so the worker can be monitored by tools like ``celerymon``. h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r (h)r }r (h$XCELERY_SEND_EVENTSr h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r hJXCELERY_SEND_EVENTSr r }r (h$j h%j ubaubh)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r hN)r }r (h$XGSend events so the worker can be monitored by tools like ``celerymon``.h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r (hJX9Send events so the worker can be monitored by tools like r r }r (h$X9Send events so the worker can be monitored by tools like h%j ubh_)r }r (h$X ``celerymon``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJX celerymonr r }r (h$Uh%j ubah3hgubhJX.r }r (h$X.h%j ubeubah3hubeubah3hubaubh)r }r (h$XCELERY_SEND_TASK_ERROR_EMAILS If set to ``True``, errors in tasks will be sent to admins by e-mail. If unset, it will send the e-mails if ``settings.DEBUG`` is False. h%j h.Nh3hh5}r (h7]h8]h9]h:]h=]uh?Nh@hhA]r h)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r h)r }r (h$XCELERY_SEND_TASK_ERROR_EMAILS If set to ``True``, errors in tasks will be sent to admins by e-mail. If unset, it will send the e-mails if ``settings.DEBUG`` is False. h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r (h)r }r (h$XCELERY_SEND_TASK_ERROR_EMAILSr h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r hJXCELERY_SEND_TASK_ERROR_EMAILSr r }r (h$j h%j ubaubh)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r hN)r }r (h$XIf set to ``True``, errors in tasks will be sent to admins by e-mail. If unset, it will send the e-mails if ``settings.DEBUG`` is False.h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r (hJX If set to r r }r (h$X If set to h%j ubh_)r }r (h$X``True``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJXTruer r }r (h$Uh%j ubah3hgubhJXZ, errors in tasks will be sent to admins by e-mail. If unset, it will send the e-mails if r r }r (h$XZ, errors in tasks will be sent to admins by e-mail. If unset, it will send the e-mails if h%j ubh_)r }r (h$X``settings.DEBUG``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJXsettings.DEBUGr r }r (h$Uh%j ubah3hgubhJX is False.r r }r (h$X is False.h%j ubeubah3hubeubah3hubaubh)r }r (h$XCELERY_STORE_ERRORS_EVEN_IF_IGNORED If set, the worker stores all task errors in the result store even if ``Task.ignore_result`` is on. h%j h.Nh3hh5}r (h7]h8]h9]h:]h=]uh?Nh@hhA]r h)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r h)r }r (h$XCELERY_STORE_ERRORS_EVEN_IF_IGNORED If set, the worker stores all task errors in the result store even if ``Task.ignore_result`` is on. h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r (h)r }r (h$X#CELERY_STORE_ERRORS_EVEN_IF_IGNOREDr h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r hJX#CELERY_STORE_ERRORS_EVEN_IF_IGNOREDr r }r (h$j h%j ubaubh)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r hN)r }r (h$XcIf set, the worker stores all task errors in the result store even if ``Task.ignore_result`` is on.h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r (hJXFIf set, the worker stores all task errors in the result store even if r r }r (h$XFIf set, the worker stores all task errors in the result store even if h%j ubh_)r }r (h$X``Task.ignore_result``h5}r (h7]h8]h9]h:]h=]uh%j hA]r! hJXTask.ignore_resultr" r# }r$ (h$Uh%j ubah3hgubhJX is on.r% r& }r' (h$X is on.h%j ubeubah3hubeubah3hubaubeubh&)r( }r) (h$Uh%jq h.h1h3h4h5}r* (h7]h8]h9]h:]r+ Uloggingr, ah=]r- hauh?Mh@hhA]r. (hC)r/ }r0 (h$XLoggingr1 h%j( h.h1h3hGh5}r2 (h7]h8]h9]h:]h=]uh?Mh@hhA]r3 hJXLoggingr4 r5 }r6 (h$j1 h%j/ ubaubh)r7 }r8 (h$Uh%j( h.h1h3hh5}r9 (hX*h:]h9]h7]h8]h=]uh?Mh@hhA]r: (h)r; }r< (h$XCELERYD_LOG_FILE The default file name the worker daemon logs messages to, can be overridden using the `--logfile`` option to ``celeryd``. The default is ``None`` (``stderr``) Can also be set via the ``--logfile`` argument. h%j7 h.Nh3hh5}r= (h7]h8]h9]h:]h=]uh?Nh@hhA]r> h)r? }r@ (h$Uh5}rA (h7]h8]h9]h:]h=]uh%j; hA]rB h)rC }rD (h$XCELERYD_LOG_FILE The default file name the worker daemon logs messages to, can be overridden using the `--logfile`` option to ``celeryd``. The default is ``None`` (``stderr``) Can also be set via the ``--logfile`` argument. h%j? h.h1h3hh5}rE (h7]h8]h9]h:]h=]uh?MhA]rF (h)rG }rH (h$XCELERYD_LOG_FILErI h%jC h.h1h3hh5}rJ (h7]h8]h9]h:]h=]uh?MhA]rK hJXCELERYD_LOG_FILErL rM }rN (h$jI h%jG ubaubh)rO }rP (h$Uh5}rQ (h7]h8]h9]h:]h=]uh%jC hA]rR (hN)rS }rT (h$XyThe default file name the worker daemon logs messages to, can be overridden using the `--logfile`` option to ``celeryd``.h%jO h.h1h3hRh5}rU (h7]h8]h9]h:]h=]uh?MhA]rV (hJXVThe default file name the worker daemon logs messages to, can be overridden using the rW rX }rY (h$XVThe default file name the worker daemon logs messages to, can be overridden using the h%jS ubcdocutils.nodes title_reference rZ )r[ }r\ (h$X `--logfile``h5}r] (h7]h8]h9]h:]h=]uh%jS hA]r^ hJX --logfile`r_ r` }ra (h$Uh%j[ ubah3Utitle_referencerb ubhJX option to rc rd }re (h$X option to h%jS ubh_)rf }rg (h$X ``celeryd``h5}rh (h7]h8]h9]h:]h=]uh%jS hA]ri hJXcelerydrj rk }rl (h$Uh%jf ubah3hgubhJX.rm }rn (h$X.h%jS ubeubhN)ro }rp (h$XTThe default is ``None`` (``stderr``) Can also be set via the ``--logfile`` argument.h%jO h.h1h3hRh5}rq (h7]h8]h9]h:]h=]uh?MhA]rr (hJXThe default is rs rt }ru (h$XThe default is h%jo ubh_)rv }rw (h$X``None``h5}rx (h7]h8]h9]h:]h=]uh%jo hA]ry hJXNonerz r{ }r| (h$Uh%jv ubah3hgubhJX (r} r~ }r (h$X (h%jo ubh_)r }r (h$X ``stderr``h5}r (h7]h8]h9]h:]h=]uh%jo hA]r hJXstderrr r }r (h$Uh%j ubah3hgubhJX) Can also be set via the r r }r (h$X) Can also be set via the h%jo ubh_)r }r (h$X ``--logfile``h5}r (h7]h8]h9]h:]h=]uh%jo hA]r hJX --logfiler r }r (h$Uh%j ubah3hgubhJX argument.r r }r (h$X argument.h%jo ubeubeh3hubeubah3hubaubh)r }r (h$XCELERYD_LOG_LEVEL Worker log level, can be any of ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``, ``CRITICAL``. Can also be set via the ``--loglevel`` argument. See the :mod:`logging` module for more information. h%j7 h.Nh3hh5}r (h7]h8]h9]h:]h=]uh?Nh@hhA]r h)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r h)r }r (h$XCELERYD_LOG_LEVEL Worker log level, can be any of ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``, ``CRITICAL``. Can also be set via the ``--loglevel`` argument. See the :mod:`logging` module for more information. h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r (h)r }r (h$XCELERYD_LOG_LEVELr h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r hJXCELERYD_LOG_LEVELr r }r (h$j h%j ubaubh)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r (hN)r }r (h$XZWorker log level, can be any of ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``, ``CRITICAL``.h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r (hJX Worker log level, can be any of r r }r (h$X Worker log level, can be any of h%j ubh_)r }r (h$X ``DEBUG``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJXDEBUGr r }r (h$Uh%j ubah3hgubhJX, r r }r (h$X, h%j ubh_)r }r (h$X``INFO``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJXINFOr r }r (h$Uh%j ubah3hgubhJX, r r }r (h$X, h%j ubh_)r }r (h$X ``WARNING``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJXWARNINGr r }r (h$Uh%j ubah3hgubhJX, r r }r (h$X, h%j ubh_)r }r (h$X ``ERROR``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJXERRORr r }r (h$Uh%j ubah3hgubhJX, r r }r (h$X, h%j ubh_)r }r (h$X ``CRITICAL``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJXCRITICALr r }r (h$Uh%j ubah3hgubhJX.r }r (h$X.h%j ubeubhN)r }r (h$X0Can also be set via the ``--loglevel`` argument.h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r (hJXCan also be set via the r r }r (h$XCan also be set via the h%j ubh_)r }r (h$X``--loglevel``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJX --loglevelr r }r (h$Uh%j ubah3hgubhJX argument.r r }r (h$X argument.h%j ubeubhN)r }r (h$X3See the :mod:`logging` module for more information.h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r (hJXSee the r r }r (h$XSee the h%j ubj7)r }r (h$X:mod:`logging`r h%j h.h1h3j;h5}r (UreftypeXmodj>j?XloggingU refdomainXpyr h:]h9]U refexplicith7]h8]h=]j@jAjMNjNNuh?MhA]r h_)r }r (h$j h5}r (h7]h8]r (jGj Xpy-modr eh9]h:]h=]uh%j hA]r hJXloggingr r }r (h$Uh%j ubah3hgubaubhJX module for more information.r r }r (h$X module for more information.h%j ubeubeh3hubeubah3hubaubh)r }r (h$XCELERYD_LOG_FORMAT The format to use for log messages. Can be overridden using the ``--loglevel`` option to ``celeryd``. Default is ``[%(asctime)s: %(levelname)s/%(processName)s] %(message)s`` See the Python :mod:`logging` module for more information about log formats. h%j7 h.Nh3hh5}r (h7]h8]h9]h:]h=]uh?Nh@hhA]r h)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r h)r }r (h$XCELERYD_LOG_FORMAT The format to use for log messages. Can be overridden using the ``--loglevel`` option to ``celeryd``. Default is ``[%(asctime)s: %(levelname)s/%(processName)s] %(message)s`` See the Python :mod:`logging` module for more information about log formats. h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r (h)r }r (h$XCELERYD_LOG_FORMATr h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r hJXCELERYD_LOG_FORMATr r }r! (h$j h%j ubaubh)r" }r# (h$Uh5}r$ (h7]h8]h9]h:]h=]uh%j hA]r% (hN)r& }r' (h$XeThe format to use for log messages. Can be overridden using the ``--loglevel`` option to ``celeryd``.h%j" h.h1h3hRh5}r( (h7]h8]h9]h:]h=]uh?MhA]r) (hJX@The format to use for log messages. Can be overridden using the r* r+ }r, (h$X@The format to use for log messages. Can be overridden using the h%j& ubh_)r- }r. (h$X``--loglevel``h5}r/ (h7]h8]h9]h:]h=]uh%j& hA]r0 hJX --loglevelr1 r2 }r3 (h$Uh%j- ubah3hgubhJX option to r4 r5 }r6 (h$X option to h%j& ubh_)r7 }r8 (h$X ``celeryd``h5}r9 (h7]h8]h9]h:]h=]uh%j& hA]r: hJXcelerydr; r< }r= (h$Uh%j7 ubah3hgubhJX.r> }r? (h$X.h%j& ubeubhN)r@ }rA (h$XGDefault is ``[%(asctime)s: %(levelname)s/%(processName)s] %(message)s``rB h%j" h.h1h3hRh5}rC (h7]h8]h9]h:]h=]uh?MhA]rD (hJX Default is rE rF }rG (h$X Default is h%j@ ubh_)rH }rI (h$X<``[%(asctime)s: %(levelname)s/%(processName)s] %(message)s``h5}rJ (h7]h8]h9]h:]h=]uh%j@ hA]rK hJX8[%(asctime)s: %(levelname)s/%(processName)s] %(message)srL rM }rN (h$Uh%jH ubah3hgubeubhN)rO }rP (h$XLSee the Python :mod:`logging` module for more information about log formats.h%j" h.h1h3hRh5}rQ (h7]h8]h9]h:]h=]uh?MhA]rR (hJXSee the Python rS rT }rU (h$XSee the Python h%jO ubj7)rV }rW (h$X:mod:`logging`rX h%jO h.h1h3j;h5}rY (UreftypeXmodj>j?XloggingU refdomainXpyrZ h:]h9]U refexplicith7]h8]h=]j@jAjMNjNNuh?MhA]r[ h_)r\ }r] (h$jX h5}r^ (h7]h8]r_ (jGjZ Xpy-modr` eh9]h:]h=]uh%jV hA]ra hJXloggingrb rc }rd (h$Uh%j\ ubah3hgubaubhJX/ module for more information about log formats.re rf }rg (h$X/ module for more information about log formats.h%jO ubeubeh3hubeubah3hubaubeubeubeubh&)rh }ri (h$Uh%h,h.h1h3h4h5}rj (h7]h8]h9]h:]rk Uperiodic-task-server-celerybeatrl ah=]rm hauh?Mh@hhA]rn (hC)ro }rp (h$X Periodic Task Server: celerybeatrq h%jh h.h1h3hGh5}rr (h7]h8]h9]h:]h=]uh?Mh@hhA]rs hJX Periodic Task Server: celerybeatrt ru }rv (h$jq h%jo ubaubh)rw }rx (h$Uh%jh h.h1h3hh5}ry (hX*h:]h9]h7]h8]h=]uh?Mh@hhA]rz (h)r{ }r| (h$XCELERYBEAT_SCHEDULE_FILENAME Name of the file celerybeat stores the current schedule in. Can be a relative or absolute path, but be aware that the suffix ``.db`` will be appended to the file name. Can also be set via the ``--schedule`` argument. h%jw h.h1h3hh5}r} (h7]h8]h9]h:]h=]uh?Nh@hhA]r~ (hN)r }r (h$XCELERYBEAT_SCHEDULE_FILENAMEr h%j{ h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r hJXCELERYBEAT_SCHEDULE_FILENAMEr r }r (h$j h%j ubaubjQ)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j{ hA]r (hN)r }r (h$XName of the file celerybeat stores the current schedule in. Can be a relative or absolute path, but be aware that the suffix ``.db`` will be appended to the file name.h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r (hJX}Name of the file celerybeat stores the current schedule in. Can be a relative or absolute path, but be aware that the suffix r r }r (h$X}Name of the file celerybeat stores the current schedule in. Can be a relative or absolute path, but be aware that the suffix h%j ubh_)r }r (h$X``.db``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJX.dbr r }r (h$Uh%j ubah3hgubhJX# will be appended to the file name.r r }r (h$X# will be appended to the file name.h%j ubeubhN)r }r (h$X0Can also be set via the ``--schedule`` argument.h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r (hJXCan also be set via the r r }r (h$XCan also be set via the h%j ubh_)r }r (h$X``--schedule``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJX --scheduler r }r (h$Uh%j ubah3hgubhJX argument.r r }r (h$X argument.h%j ubeubeh3jfubeubh)r }r (h$XCELERYBEAT_MAX_LOOP_INTERVAL The maximum number of seconds celerybeat can sleep between checking the schedule. Default is 300 seconds (5 minutes). h%jw h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?Nh@hhA]r (hN)r }r (h$XCELERYBEAT_MAX_LOOP_INTERVALr h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r hJXCELERYBEAT_MAX_LOOP_INTERVALr r }r (h$j h%j ubaubjQ)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r hN)r }r (h$XuThe maximum number of seconds celerybeat can sleep between checking the schedule. Default is 300 seconds (5 minutes).r h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r hJXuThe maximum number of seconds celerybeat can sleep between checking the schedule. Default is 300 seconds (5 minutes).r r }r (h$j h%j ubaubah3jfubeubh)r }r (h$XCELERYBEAT_LOG_FILE The default file name to log messages to, can be overridden using the `--logfile`` option. The default is ``None`` (``stderr``). Can also be set via the ``--logfile`` argument. h%jw h.Nh3hh5}r (h7]h8]h9]h:]h=]uh?Nh@hhA]r h)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r h)r }r (h$XCELERYBEAT_LOG_FILE The default file name to log messages to, can be overridden using the `--logfile`` option. The default is ``None`` (``stderr``). Can also be set via the ``--logfile`` argument. h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r (h)r }r (h$XCELERYBEAT_LOG_FILEr h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r hJXCELERYBEAT_LOG_FILEr r }r (h$j h%j ubaubh)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r (hN)r }r (h$XZThe default file name to log messages to, can be overridden using the `--logfile`` option.h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r (hJXFThe default file name to log messages to, can be overridden using the r r }r (h$XFThe default file name to log messages to, can be overridden using the h%j ubjZ )r }r (h$X `--logfile``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJX --logfile`r r }r (h$Uh%j ubah3jb ubhJX option.r r }r (h$X option.h%j ubeubhN)r }r (h$XUThe default is ``None`` (``stderr``). Can also be set via the ``--logfile`` argument.h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r (hJXThe default is r r }r (h$XThe default is h%j ubh_)r }r (h$X``None``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJXNoner r }r (h$Uh%j ubah3hgubhJX (r r }r (h$X (h%j ubh_)r }r (h$X ``stderr``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJXstderrr r }r (h$Uh%j ubah3hgubhJX). Can also be set via the r r }r (h$X). Can also be set via the h%j ubh_)r }r (h$X ``--logfile``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJX --logfiler r }r (h$Uh%j ubah3hgubhJX argument.r r }r (h$X argument.h%j ubeubeh3hubeubah3hubaubh)r }r (h$XCELERYBEAT_LOG_LEVEL Logging level. Can be any of ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``, or ``CRITICAL``. Can also be set via the ``--loglevel`` argument. See the :mod:`logging` module for more information. h%jw h.Nh3hh5}r (h7]h8]h9]h:]h=]uh?Nh@hhA]r h)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r h)r }r (h$XCELERYBEAT_LOG_LEVEL Logging level. Can be any of ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``, or ``CRITICAL``. Can also be set via the ``--loglevel`` argument. See the :mod:`logging` module for more information. h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r (h)r }r (h$XCELERYBEAT_LOG_LEVELr! h%j h.h1h3hh5}r" (h7]h8]h9]h:]h=]uh?MhA]r# hJXCELERYBEAT_LOG_LEVELr$ r% }r& (h$j! h%j ubaubh)r' }r( (h$Uh5}r) (h7]h8]h9]h:]h=]uh%j hA]r* (hN)r+ }r, (h$XZLogging level. Can be any of ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``, or ``CRITICAL``.h%j' h.h1h3hRh5}r- (h7]h8]h9]h:]h=]uh?MhA]r. (hJXLogging level. Can be any of r/ r0 }r1 (h$XLogging level. Can be any of h%j+ ubh_)r2 }r3 (h$X ``DEBUG``h5}r4 (h7]h8]h9]h:]h=]uh%j+ hA]r5 hJXDEBUGr6 r7 }r8 (h$Uh%j2 ubah3hgubhJX, r9 r: }r; (h$X, h%j+ ubh_)r< }r= (h$X``INFO``h5}r> (h7]h8]h9]h:]h=]uh%j+ hA]r? hJXINFOr@ rA }rB (h$Uh%j< ubah3hgubhJX, rC rD }rE (h$X, h%j+ ubh_)rF }rG (h$X ``WARNING``h5}rH (h7]h8]h9]h:]h=]uh%j+ hA]rI hJXWARNINGrJ rK }rL (h$Uh%jF ubah3hgubhJX, rM rN }rO (h$X, h%j+ ubh_)rP }rQ (h$X ``ERROR``h5}rR (h7]h8]h9]h:]h=]uh%j+ hA]rS hJXERRORrT rU }rV (h$Uh%jP ubah3hgubhJX, or rW rX }rY (h$X, or h%j+ ubh_)rZ }r[ (h$X ``CRITICAL``h5}r\ (h7]h8]h9]h:]h=]uh%j+ hA]r] hJXCRITICALr^ r_ }r` (h$Uh%jZ ubah3hgubhJX.ra }rb (h$X.h%j+ ubeubhN)rc }rd (h$X0Can also be set via the ``--loglevel`` argument.h%j' h.h1h3hRh5}re (h7]h8]h9]h:]h=]uh?MhA]rf (hJXCan also be set via the rg rh }ri (h$XCan also be set via the h%jc ubh_)rj }rk (h$X``--loglevel``h5}rl (h7]h8]h9]h:]h=]uh%jc hA]rm hJX --loglevelrn ro }rp (h$Uh%jj ubah3hgubhJX argument.rq rr }rs (h$X argument.h%jc ubeubhN)rt }ru (h$X3See the :mod:`logging` module for more information.h%j' h.h1h3hRh5}rv (h7]h8]h9]h:]h=]uh?MhA]rw (hJXSee the rx ry }rz (h$XSee the h%jt ubj7)r{ }r| (h$X:mod:`logging`r} h%jt h.h1h3j;h5}r~ (UreftypeXmodj>j?XloggingU refdomainXpyr h:]h9]U refexplicith7]h8]h=]j@jAjMNjNNuh?MhA]r h_)r }r (h$j} h5}r (h7]h8]r (jGj Xpy-modr eh9]h:]h=]uh%j{ hA]r hJXloggingr r }r (h$Uh%j ubah3hgubaubhJX module for more information.r r }r (h$X module for more information.h%jt ubeubeh3hubeubah3hubaubeubeubh&)r }r (h$Uh%h,h.h1h3h4h5}r (h7]h8]h9]h:]r Umonitor-server-celerymonr ah=]r hauh?Mh@hhA]r (hC)r }r (h$XMonitor Server: celerymonr h%j h.h1h3hGh5}r (h7]h8]h9]h:]h=]uh?Mh@hhA]r hJXMonitor Server: celerymonr r }r (h$j h%j ubaubh)r }r (h$Uh%j h.h1h3hh5}r (hX*h:]h9]h7]h8]h=]uh?Mh@hhA]r (h)r }r (h$XCELERYMON_LOG_FILE The default file name to log messages to, can be overridden using the `--logfile`` option. The default is ``None`` (``stderr``) Can also be set via the ``--logfile`` argument. h%j h.Nh3hh5}r (h7]h8]h9]h:]h=]uh?Nh@hhA]r h)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r h)r }r (h$XCELERYMON_LOG_FILE The default file name to log messages to, can be overridden using the `--logfile`` option. The default is ``None`` (``stderr``) Can also be set via the ``--logfile`` argument. h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r (h)r }r (h$XCELERYMON_LOG_FILEr h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r hJXCELERYMON_LOG_FILEr r }r (h$j h%j ubaubh)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r (hN)r }r (h$XZThe default file name to log messages to, can be overridden using the `--logfile`` option.h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r (hJXFThe default file name to log messages to, can be overridden using the r r }r (h$XFThe default file name to log messages to, can be overridden using the h%j ubjZ )r }r (h$X `--logfile``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJX --logfile`r r }r (h$Uh%j ubah3jb ubhJX option.r r }r (h$X option.h%j ubeubhN)r }r (h$XTThe default is ``None`` (``stderr``) Can also be set via the ``--logfile`` argument.h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r (hJXThe default is r r }r (h$XThe default is h%j ubh_)r }r (h$X``None``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJXNoner r }r (h$Uh%j ubah3hgubhJX (r r }r (h$X (h%j ubh_)r }r (h$X ``stderr``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJXstderrr r }r (h$Uh%j ubah3hgubhJX) Can also be set via the r r }r (h$X) Can also be set via the h%j ubh_)r }r (h$X ``--logfile``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJX --logfiler r }r (h$Uh%j ubah3hgubhJX argument.r r }r (h$X argument.h%j ubeubeh3hubeubah3hubaubh)r }r (h$XCELERYMON_LOG_LEVEL Logging level. Can be any of ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``, or ``CRITICAL``. See the :mod:`logging` module for more information.h%j h.Nh3hh5}r (h7]h8]h9]h:]h=]uh?Nh@hhA]r h)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r h)r }r (h$XCELERYMON_LOG_LEVEL Logging level. Can be any of ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``, or ``CRITICAL``. See the :mod:`logging` module for more information.h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r (h)r }r (h$XCELERYMON_LOG_LEVELr h%j h.h1h3hh5}r (h7]h8]h9]h:]h=]uh?MhA]r hJXCELERYMON_LOG_LEVELr r }r (h$j h%j ubaubh)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r (hN)r }r (h$XZLogging level. Can be any of ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``, or ``CRITICAL``.h%j h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?MhA]r (hJXLogging level. Can be any of r r }r (h$XLogging level. Can be any of h%j ubh_)r }r (h$X ``DEBUG``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJXDEBUGr r }r (h$Uh%j ubah3hgubhJX, r r }r (h$X, h%j ubh_)r }r (h$X``INFO``h5}r (h7]h8]h9]h:]h=]uh%j hA]r hJXINFOr r }r (h$Uh%j ubah3hgubhJX, r r }r (h$X, h%j ubh_)r! }r" (h$X ``WARNING``h5}r# (h7]h8]h9]h:]h=]uh%j hA]r$ hJXWARNINGr% r& }r' (h$Uh%j! ubah3hgubhJX, r( r) }r* (h$X, h%j ubh_)r+ }r, (h$X ``ERROR``h5}r- (h7]h8]h9]h:]h=]uh%j hA]r. hJXERRORr/ r0 }r1 (h$Uh%j+ ubah3hgubhJX, or r2 r3 }r4 (h$X, or h%j ubh_)r5 }r6 (h$X ``CRITICAL``h5}r7 (h7]h8]h9]h:]h=]uh%j hA]r8 hJXCRITICALr9 r: }r; (h$Uh%j5 ubah3hgubhJX.r< }r= (h$X.h%j ubeubhN)r> }r? (h$X3See the :mod:`logging` module for more information.r@ h%j h.h1h3hRh5}rA (h7]h8]h9]h:]h=]uh?MhA]rB (hJXSee the rC rD }rE (h$XSee the h%j> ubj7)rF }rG (h$X:mod:`logging`rH h%j> h.h1h3j;h5}rI (UreftypeXmodj>j?XloggingU refdomainXpyrJ h:]h9]U refexplicith7]h8]h=]j@jAjMNjNNuh?MhA]rK h_)rL }rM (h$jH h5}rN (h7]h8]rO (jGjJ Xpy-modrP eh9]h:]h=]uh%jF hA]rQ hJXloggingrR rS }rT (h$Uh%jL ubah3hgubaubhJX module for more information.rU rV }rW (h$X module for more information.h%j> ubeubeh3hubeubah3hubaubeubeubeubh.h1h3h4h5}rX (h7]h8]h9]h:]rY Uamqp-backend-settingsrZ ah=]r[ hauh?K{h@hhA]r\ (hC)r] }r^ (h$XAMQP backend settingsr_ h%h*h.h1h3hGh5}r` (h7]h8]h9]h:]h=]uh?K{h@hhA]ra hJXAMQP backend settingsrb rc }rd (h$j_ h%j] ubaubhN)re }rf (h$X0The AMQP backend does not have any settings yet.rg h%h*h.h1h3hRh5}rh (h7]h8]h9]h:]h=]uh?K}h@hhA]ri hJX0The AMQP backend does not have any settings yet.rj rk }rl (h$jg h%je ubaubh'eubh.h1h3h4h5}rm (h7]rn jah8]h9]h:]ro Uid1rp ah=]uh?Kh@hhA]rq (hC)rr }rs (h$XExample configurationrt h%h'h.h1h3hGh5}ru (h7]h8]h9]h:]h=]uh?Kh@hhA]rv hJXExample configurationrw rx }ry (h$jt h%jr ubaubjQ)rz }r{ (h$Uh%h'h.h1h3jfh5}r| (h7]h8]h9]h:]h=]uh?Nh@hhA]r} hN)r~ }r (h$XCELERY_RESULT_BACKEND = "amqp"r h%jz h.h1h3hRh5}r (h7]h8]h9]h:]h=]uh?KhA]r hJXCELERY_RESULT_BACKEND = "amqp"r r }r (h$j h%j~ ubaubaubeubh.h1h3Usystem_messager h5}r (h7]UlevelKh:]h9]r jp aUsourceh1h8]h=]UlineKUtypeUINFOr uh?Kh@hhA]r hN)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%h"hA]r hJX8Duplicate implicit target name: "example configuration".r r }r (h$Uh%j ubah3hRubaubh!)r }r (h$Uh%jh.h1h3j h5}r (h7]UlevelKh:]h9]r jaUsourceh1h8]h=]UlineKUtypej uh?Kh@hhA]r hN)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r hJX8Duplicate implicit target name: "example configuration".r r }r (h$Uh%j ubah3hRubaubh!)r }r (h$Uh%jh.h1h3j h5}r (h7]UlevelKh:]h9]r jaUsourceh1h8]h=]UlineKUtypej uh?Kh@hhA]r hN)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r hJX8Duplicate implicit target name: "example configuration".r r }r (h$Uh%j ubah3hRubaubh!)r }r (h$Uh%jh.h1h3j h5}r (h7]UlevelKh:]h9]r jaUsourceh1h8]h=]UlineKUtypej uh?Kh@hhA]r hN)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r hJX8Duplicate implicit target name: "example configuration".r r }r (h$Uh%j ubah3hRubaubh!)r }r (h$Uh%j h.h1h3j h5}r (h7]UlevelKh:]h9]r jaUsourceh1h8]h=]UlineMUtypej uh?Mh@hhA]r hN)r }r (h$Uh5}r (h7]h8]h9]h:]h=]uh%j hA]r hJX8Duplicate implicit target name: "example configuration".r r }r (h$Uh%j ubah3hRubaubeUcurrent_sourcer NU decorationr NUautofootnote_startr KUnameidsr }r (hju hjhjmh j h jh jah j4h jUhhhj&hj[hjghhhj%hjhjZ hj hjl hj, hjhNhj/hhh4X Contents:q?q@}qA(hh;hh9ubaubcdocutils.nodes compound qB)qC}qD(hUhhhhhUcompoundqEh!}qF(h#]h$]qGUtoctree-wrapperqHah%]h&]h(]uh*Nh+hh]qIcsphinx.addnodes toctree qJ)qK}qL(hUhhChhhUtoctreeqMh!}qN(UnumberedqOKU includehiddenqPhXindexqQU titlesonlyqRUglobqSh&]h%]h#]h$]h(]UentriesqT]qU(NXgetting-started/indexqVqWNXuserguide/indexqXqYNX configurationqZq[NXcookbook/indexq\q]NXtutorials/indexq^q_NXfaqq`qaNXreference/indexqbqcNXinternals/indexqdqeNX changelogqfqgNXlinksqhqieUhiddenqjU includefilesqk]ql(hVhXhZh\h^h`hbhdhfhheUmaxdepthqmKuh*Kh]ubaubh)qn}qo(hUhhhhhh h!}qp(h#]h$]h%]h&]qqhah(]qrhauh*Kh+hh]qs(h-)qt}qu(hXIndices and tablesqvhhnhhhh1h!}qw(h#]h$]h%]h&]h(]uh*Kh+hh]qxh4XIndices and tablesqyqz}q{(hhvhhtubaubcdocutils.nodes bullet_list q|)q}}q~(hUhhnhhhU bullet_listqh!}q(UbulletqX*h&]h%]h#]h$]h(]uh*Kh+hh]q(cdocutils.nodes list_item q)q}q(hX:ref:`genindex`qhh}hhhU list_itemqh!}q(h#]h$]h%]h&]h(]uh*Nh+hh]qh8)q}q(hhhhhhhh)q?}q@(U rawsourceqAUU attributesqB}qC(UdupnamesqD]UlevelKUidsqE]UbackrefsqF]Usourcecdocutils.nodes reprunicode qGXG/var/build/user_builds/celery/checkouts/1.0-archived/docs/changelog.rstqHqI}qJbUclassesqK]UnamesqL]UlineMPUtypeUINFOqMuUparentqNcdocutils.nodes definition qO)qP}qQ(hAUhB}qR(hD]hK]hF]hE]hL]uhNcdocutils.nodes definition_list_item qS)qT}qU(hAXExample output:: [2010-03-25 13:11:20,317: INFO/PoolWorker-1] [tasks.add(a6e1c5ad-60d9-42a0-8b24-9e39363125a4)] Hello from add hNcdocutils.nodes definition_list qV)qW}qX(hAUhB}qY(hD]hK]hF]hE]hL]uhNcdocutils.nodes block_quote qZ)q[}q\(hAUhB}q](hD]hK]hF]hE]hL]uhNcdocutils.nodes list_item q^)q_}q`(hAXHWe now use a custom logger in tasks. This logger supports task magic keyword arguments in formats. The default format for tasks (``CELERYD_TASK_LOG_FORMAT``) now includes the id and the name of tasks so the origin of task log messages can easily be traced. Example output:: [2010-03-25 13:11:20,317: INFO/PoolWorker-1] [tasks.add(a6e1c5ad-60d9-42a0-8b24-9e39363125a4)] Hello from add To revert to the previous behavior you can set:: CELERYD_TASK_LOG_FORMAT = """ [%(asctime)s: %(levelname)s/%(processName)s] %(message)s """.strip() hNcdocutils.nodes bullet_list qa)qb}qc(hAUhNcdocutils.nodes section qd)qe}qf(hAUhNhd)qg}qh(hAUhNhUsourceqihIUtagnameqjUsectionqkhB}ql(hD]hK]hF]hE]qmUchange-historyqnahL]qoh9auUlineqpKUdocumentqqhUchildrenqr]qs(cdocutils.nodes title qt)qu}qv(hAXChange historyqwhNhghihIhjUtitleqxhB}qy(hD]hK]hF]hE]hL]uhpKhqhhr]qzcdocutils.nodes Text q{XChange historyq|q}}q~(hAhwhNhuubaubhd)q}q(hAUhNhghihIhjhkhB}q(hD]hK]hF]hE]qUa-m-cestqahL]qh8auhpKhqhhr]q(ht)q}q(hAX!1.0.6 [2010-06-30 09:57 A.M CEST]qhNhhihIhjhxhB}q(hD]hK]hF]hE]hL]uhpKhqhhr]qh{X!1.0.6 [2010-06-30 09:57 A.M CEST]qq}q(hAhhNhubaubha)q}q(hAUhNhhihIhjU bullet_listqhB}q(UbulletqX*hE]hF]hD]hK]hL]uhpKhqhhr]qh^)q}q(hAXfRabbitMQ 1.8.0 has extended their exchange equivalence tests to include ``auto_delete`` and ``durable``. This broke the AMQP backend. If you've already used the AMQP backend this means you have to delete the previous definitions:: $ PYTHONPATH=. camqadm exchange.delete celeryresults or:: $ python manage.py camqadm exchange.delete celeryresults hNhhihIhjU list_itemqhB}q(hD]hK]hF]hE]hL]uhpNhqhhr]q(cdocutils.nodes paragraph q)q}q(hAXRabbitMQ 1.8.0 has extended their exchange equivalence tests to include ``auto_delete`` and ``durable``. This broke the AMQP backend.hNhhihIhjU paragraphqhB}q(hD]hK]hF]hE]hL]uhpKhr]q(h{XHRabbitMQ 1.8.0 has extended their exchange equivalence tests to include qq}q(hAXHRabbitMQ 1.8.0 has extended their exchange equivalence tests to include hNhubcdocutils.nodes literal q)q}q(hAX``auto_delete``hB}q(hD]hK]hF]hE]hL]uhNhhr]qh{X auto_deleteqq}q(hAUhNhubahjUliteralqubh{X and qq}q(hAX and hNhubh)q}q(hAX ``durable``hB}q(hD]hK]hF]hE]hL]uhNhhr]qh{Xdurableqq}q(hAUhNhubahjhubh{X. This broke the AMQP backend.qq}q(hAX. This broke the AMQP backend.hNhubeubh)q}q(hAX`If you've already used the AMQP backend this means you have to delete the previous definitions::hNhhihIhjhhB}q(hD]hK]hF]hE]hL]uhpK hr]qh{X_If you've already used the AMQP backend this means you have to delete the previous definitions:qq}q(hAX_If you've already used the AMQP backend this means you have to delete the previous definitions:hNhubaubcdocutils.nodes literal_block q)q}q(hAX4$ PYTHONPATH=. camqadm exchange.delete celeryresultshNhhjU literal_blockqhB}q(U xml:spaceqUpreserveqhE]hF]hD]hK]hL]uhpKhr]qh{X4$ PYTHONPATH=. camqadm exchange.delete celeryresultsqDžq}q(hAUhNhubaubh)q}q(hAXor::hNhhihIhjhhB}q(hD]hK]hF]hE]hL]uhpKhr]qh{Xor:q΅q}q(hAXor:hNhubaubh)q}q(hAX8$ python manage.py camqadm exchange.delete celeryresultshNhhjhhB}q(hhhE]hF]hD]hK]hL]uhpKhr]qh{X8$ python manage.py camqadm exchange.delete celeryresultsqՅq}q(hAUhNhubaubeubaubeubhd)q}q(hAUhNhghihIhjhkhB}q(hD]hK]hF]hE]qUp-m-cestqahL]qh auhpKhqhhr]q(ht)q}q(hAX!1.0.5 [2010-06-01 02:36 P.M CEST]qhNhhihIhjhxhB}q(hD]hK]hF]hE]hL]uhpKhqhhr]qh{X!1.0.5 [2010-06-01 02:36 P.M CEST]q䅁q}q(hAhhNhubaubhd)q}q(hAUhNhhihIhjhkhB}q(hD]hK]hF]hE]qUcriticalqahL]qhauhpKhqhhr]q(ht)q}q(hAXCriticalqhNhhihIhjhxhB}q(hD]hK]hF]hE]hL]uhpKhqhhr]qh{XCriticalqq}q(hAhhNhubaubha)q}q(hAUhNhhihIhjhhB}q(hX*hE]hF]hD]hK]hL]uhpKhqhhr]q(h^)q}q(hAXSIGINT/Ctrl+C killed the pool, abrubtly terminating the currently executing tasks. Fixed by making the pool worker processes ignore :const:`SIGINT`. hNhhihIhjhhB}q(hD]hK]hF]hE]hL]uhpNhqhhr]q(h)q}q(hAXRSIGINT/Ctrl+C killed the pool, abrubtly terminating the currently executing tasks.rhNhhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]rh{XRSIGINT/Ctrl+C killed the pool, abrubtly terminating the currently executing tasks.rr}r(hAjhNhubaubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNhhr]r h)r }r (hAXAFixed by making the pool worker processes ignore :const:`SIGINT`.hNjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpKhr]r (h{X1Fixed by making the pool worker processes ignore rr}r(hAX1Fixed by making the pool worker processes ignore hNj ubcsphinx.addnodes pending_xref r)r}r(hAX:const:`SIGINT`rhNj hihIhjU pending_xrefrhB}r(UreftypeXconstUrefwarnrU reftargetrXSIGINTU refdomainXpyrhE]hF]U refexplicithD]hK]hL]UrefdocrX changelogrUpy:classrNU py:modulerNuhpKhr]rh)r}r (hAjhB}r!(hD]hK]r"(Uxrefr#jXpy-constr$ehF]hE]hL]uhNjhr]r%h{XSIGINTr&r'}r((hAUhNjubahjhubaubh{X.r)}r*(hAX.hNj ubeubahjU block_quoter+ubeubh^)r,}r-(hAXShould not close the consumers before the pool is terminated, just cancel the consumers. Issue #122. http://github.com/ask/celery/issues/issue/122 hNhhihIhjhhB}r.(hD]hK]hF]hE]hL]uhpNhqhhr]r/(h)r0}r1(hAXXShould not close the consumers before the pool is terminated, just cancel the consumers.r2hNj,hihIhjhhB}r3(hD]hK]hF]hE]hL]uhpKhr]r4h{XXShould not close the consumers before the pool is terminated, just cancel the consumers.r5r6}r7(hAj2hNj0ubaubhZ)r8}r9(hAUhB}r:(hD]hK]hF]hE]hL]uhNj,hr]r;h)r<}r=(hAX9Issue #122. http://github.com/ask/celery/issues/issue/122hNj8hihIhjhhB}r>(hD]hK]hF]hE]hL]uhpK!hr]r?(h{X Issue #122. r@rA}rB(hAX Issue #122. hNj<ubcdocutils.nodes reference rC)rD}rE(hAX-http://github.com/ask/celery/issues/issue/122rFhB}rG(UrefurijFhE]hF]hD]hK]hL]uhNj<hr]rHh{X-http://github.com/ask/celery/issues/issue/122rIrJ}rK(hAUhNjDubahjU referencerLubeubahjj+ubeubh^)rM}rN(hAX(Now depends on :mod:`billiard` >= 0.3.1 hNhhihIhjhhB}rO(hD]hK]hF]hE]hL]uhpNhqhhr]rPh)rQ}rR(hAX'Now depends on :mod:`billiard` >= 0.3.1hNjMhihIhjhhB}rS(hD]hK]hF]hE]hL]uhpK#hr]rT(h{XNow depends on rUrV}rW(hAXNow depends on hNjQubj)rX}rY(hAX:mod:`billiard`rZhNjQhihIhjjhB}r[(UreftypeXmodjjXbilliardU refdomainXpyr\hE]hF]U refexplicithD]hK]hL]jjjNjNuhpK#hr]r]h)r^}r_(hAjZhB}r`(hD]hK]ra(j#j\Xpy-modrbehF]hE]hL]uhNjXhr]rch{Xbilliardrdre}rf(hAUhNj^ubahjhubaubh{X >= 0.3.1rgrh}ri(hAX >= 0.3.1hNjQubeubaubh^)rj}rk(hAXceleryd: Previously exceptions raised by worker components could stall startup, now it correctly logs the exceptions and shuts down. hNhhihIhjhhB}rl(hD]hK]hF]hE]hL]uhpNhqhhr]rmh)rn}ro(hAXceleryd: Previously exceptions raised by worker components could stall startup, now it correctly logs the exceptions and shuts down.rphNjjhihIhjhhB}rq(hD]hK]hF]hE]hL]uhpK%hr]rrh{Xceleryd: Previously exceptions raised by worker components could stall startup, now it correctly logs the exceptions and shuts down.rsrt}ru(hAjphNjnubaubaubh^)rv}rw(hAXceleryd: Prefetch counts was set too late. QoS is now set as early as possible, so celeryd can't slurp in all the messages at start-up. hNhhihIhjhhB}rx(hD]hK]hF]hE]hL]uhpNhqhhr]ryh)rz}r{(hAXceleryd: Prefetch counts was set too late. QoS is now set as early as possible, so celeryd can't slurp in all the messages at start-up.r|hNjvhihIhjhhB}r}(hD]hK]hF]hE]hL]uhpK(hr]r~h{Xceleryd: Prefetch counts was set too late. QoS is now set as early as possible, so celeryd can't slurp in all the messages at start-up.rr}r(hAj|hNjzubaubaubeubeubhd)r}r(hAUU referencedrKhNhhihIhjhkhB}r(hD]rXchangesrahK]hF]hE]rUchangesrahL]uhpK,hqhhr]r(ht)r}r(hAXChangesrhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpK,hqhhr]rh{XChangesrr}r(hAjhNjubaubha)r}r(hAUhNjhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpK.hqhhr]r(h^)r}r(hAX:mod:`celery.contrib.abortable`: Abortable tasks. Tasks that defines steps of execution, the task can then be aborted after each step has completed. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX1:mod:`celery.contrib.abortable`: Abortable tasks.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpK.hr]r(j)r}r(hAX:mod:`celery.contrib.abortable`rhNjhihIhjjhB}r(UreftypeXmodjjXcelery.contrib.abortableU refdomainXpyrhE]hF]U refexplicithD]hK]hL]jjjNjNuhpK.hr]rh)r}r(hAjhB}r(hD]hK]r(j#jXpy-modrehF]hE]hL]uhNjhr]rh{Xcelery.contrib.abortablerr}r(hAUhNjubahjhubaubh{X: Abortable tasks.rr}r(hAX: Abortable tasks.hNjubeubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXbTasks that defines steps of execution, the task can then be aborted after each step has completed.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpK0hr]rh{XbTasks that defines steps of execution, the task can then be aborted after each step has completed.rr}r(hAjhNjubaubahjj+ubeubh^)r}r(hAX_:class:`~celery.events.EventDispatcher`: No longer creates AMQP channel if events are disabled hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX^:class:`~celery.events.EventDispatcher`: No longer creates AMQP channel if events are disabledhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpK3hr]r(j)r}r(hAX':class:`~celery.events.EventDispatcher`rhNjhihIhjjhB}r(UreftypeXclassjjXcelery.events.EventDispatcherU refdomainXpyrhE]hF]U refexplicithD]hK]hL]jjjNjNuhpK3hr]rh)r}r(hAjhB}r(hD]hK]r(j#jXpy-classrehF]hE]hL]uhNjhr]rh{XEventDispatcherrr}r(hAUhNjubahjhubaubh{X7: No longer creates AMQP channel if events are disabledrr}r(hAX7: No longer creates AMQP channel if events are disabledhNjubeubaubh^)r}r(hAXyAdded required RPM package names under ``[bdist_rpm]`` section, to support building RPMs from the sources using setup.py hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXxAdded required RPM package names under ``[bdist_rpm]`` section, to support building RPMs from the sources using setup.pyhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpK6hr]r(h{X'Added required RPM package names under rr}r(hAX'Added required RPM package names under hNjubh)r}r(hAX``[bdist_rpm]``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X [bdist_rpm]rr}r(hAUhNjubahjhubh{XB section, to support building RPMs from the sources using setup.pyrr}r(hAXB section, to support building RPMs from the sources using setup.pyhNjubeubaubh^)r}r(hAX`Running unittests: :envvar:`NOSE_VERBOSE` environment var now enables verbose output from Nose. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX_Running unittests: :envvar:`NOSE_VERBOSE` environment var now enables verbose output from Nose.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpK9hr]r(h{XRunning unittests: rr}r(hAXRunning unittests: hNjubcsphinx.addnodes index r)r}r(hAUhB}r(hE]hF]hD]hK]hL]Uentriesr]r((UsinglerX NOSE_VERBOSErUindex-0rUtr(jX"environment variable; NOSE_VERBOSEjUtreuhNjhr]hjUindexrubcdocutils.nodes target r)r}r(hAUhB}r(hD]hK]hF]hE]rjahL]uhNjhr]hjUtargetrubj)r }r (hAX:envvar:`NOSE_VERBOSE`r hNjhihIhjjhB}r (UreftypeXenvvarjjjU refdomainXstdr hE]hF]U refexplicithD]hK]hL]jjuhpK9hr]rh)r}r(hAj hB}r(hD]hK]r(j#j X std-envvarrehF]hE]hL]uhNj hr]rh{X NOSE_VERBOSErr}r(hAUhNjubahjhubaubh{X6 environment var now enables verbose output from Nose.rr}r(hAX6 environment var now enables verbose output from Nose.hNjubeubaubh^)r}r(hAX:func:`celery.execute.apply`: Pass logfile/loglevel arguments as task kwargs. Issue #110 http://github.com/ask/celery/issues/issue/110 hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r (hAXM:func:`celery.execute.apply`: Pass logfile/loglevel arguments as task kwargs.hNjhihIhjhhB}r!(hD]hK]hF]hE]hL]uhpK;hr]r"(j)r#}r$(hAX:func:`celery.execute.apply`r%hNjhihIhjjhB}r&(UreftypeXfuncjjXcelery.execute.applyU refdomainXpyr'hE]hF]U refexplicithD]hK]hL]jjjNjNuhpK;hr]r(h)r)}r*(hAj%hB}r+(hD]hK]r,(j#j'Xpy-funcr-ehF]hE]hL]uhNj#hr]r.h{Xcelery.execute.apply()r/r0}r1(hAUhNj)ubahjhubaubh{X1: Pass logfile/loglevel arguments as task kwargs.r2r3}r4(hAX1: Pass logfile/loglevel arguments as task kwargs.hNjubeubhZ)r5}r6(hAUhB}r7(hD]hK]hF]hE]hL]uhNjhr]r8h)r9}r:(hAX8Issue #110 http://github.com/ask/celery/issues/issue/110hNj5hihIhjhhB}r;(hD]hK]hF]hE]hL]uhpK=hr]r<(h{X Issue #110 r=r>}r?(hAX Issue #110 hNj9ubjC)r@}rA(hAX-http://github.com/ask/celery/issues/issue/110rBhB}rC(UrefurijBhE]hF]hD]hK]hL]uhNj9hr]rDh{X-http://github.com/ask/celery/issues/issue/110rErF}rG(hAUhNj@ubahjjLubeubahjj+ubeubh^)rH}rI(hAXcelery.execute.apply: Should return exception, not :class:`~celery.datastructures.ExceptionInfo` on error. Issue #111 http://github.com/ask/celery/issues/issue/111 hNjhihIhjhhB}rJ(hD]hK]hF]hE]hL]uhpNhqhhr]rK(h)rL}rM(hAXjcelery.execute.apply: Should return exception, not :class:`~celery.datastructures.ExceptionInfo` on error.hNjHhihIhjhhB}rN(hD]hK]hF]hE]hL]uhpK?hr]rO(h{X3celery.execute.apply: Should return exception, not rPrQ}rR(hAX3celery.execute.apply: Should return exception, not hNjLubj)rS}rT(hAX-:class:`~celery.datastructures.ExceptionInfo`rUhNjLhihIhjjhB}rV(UreftypeXclassjjX#celery.datastructures.ExceptionInfoU refdomainXpyrWhE]hF]U refexplicithD]hK]hL]jjjNjNuhpK?hr]rXh)rY}rZ(hAjUhB}r[(hD]hK]r\(j#jWXpy-classr]ehF]hE]hL]uhNjShr]r^h{X ExceptionInfor_r`}ra(hAUhNjYubahjhubaubh{X on error.rbrc}rd(hAX on error.hNjLubeubhZ)re}rf(hAUhB}rg(hD]hK]hF]hE]hL]uhNjHhr]rhh)ri}rj(hAX8Issue #111 http://github.com/ask/celery/issues/issue/111hNjehihIhjhhB}rk(hD]hK]hF]hE]hL]uhpKBhr]rl(h{X Issue #111 rmrn}ro(hAX Issue #111 hNjiubjC)rp}rq(hAX-http://github.com/ask/celery/issues/issue/111rrhB}rs(UrefurijrhE]hF]hD]hK]hL]uhNjihr]rth{X-http://github.com/ask/celery/issues/issue/111rurv}rw(hAUhNjpubahjjLubeubahjj+ubeubh^)rx}ry(hAXtAdded new entries to the :doc:`FAQs `: * Should I use retry or acks_late? * Can I execute a task by name? hNjhihIhjhhB}rz(hD]hK]hF]hE]hL]uhpNhqhhr]r{(h)r|}r}(hAX+Added new entries to the :doc:`FAQs `:hNjxhihIhjhhB}r~(hD]hK]hF]hE]hL]uhpKDhr]r(h{XAdded new entries to the rr}r(hAXAdded new entries to the hNj|ubj)r}r(hAX:doc:`FAQs `rhNj|hihIhjjhB}r(UreftypeXdocrjjXfaqU refdomainUhE]hF]U refexplicithD]hK]hL]jjuhpKDhr]rh)r}r(hAjhB}r(hD]hK]r(j#jehF]hE]hL]uhNjhr]rh{XFAQsrr}r(hAUhNjubahjhubaubh{X:r}r(hAX:hNj|ubeubha)r}r(hAUhNjxhiNhjhhB}r(hX*hE]hF]hD]hK]hL]uhpNhqhhr]r(h^)r}r(hAX Should I use retry or acks_late?rhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAjhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKFhr]rh{X Should I use retry or acks_late?rr}r(hAjhNjubaubahjhubh^)r}r(hAXCan I execute a task by name? hB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXCan I execute a task by name?rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKGhr]rh{XCan I execute a task by name?rr}r(hAjhNjubaubahjhubeubeubeubeubeubhd)r}r(hAUhNhghihIhjhkhB}r(hD]hK]hF]hE]rUid1rahL]rh auhpKJhqhhr]r(ht)r}r(hAX!1.0.4 [2010-05-31 09:54 A.M CEST]rhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpKJhqhhr]rh{X!1.0.4 [2010-05-31 09:54 A.M CEST]rr}r(hAjhNjubaubha)r}r(hAUhNjhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpKLhqhhr]rh^)r}r(hAX?Changlog merged with 1.0.5 as the release was never announced. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX>Changlog merged with 1.0.5 as the release was never announced.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKLhr]rh{X>Changlog merged with 1.0.5 as the release was never announced.rr}r(hAjhNjubaubaubaubeubhd)r}r(hAUhNhghihIhjhkhB}r(hD]hK]hF]hE]rUid2rahL]rhauhpKOhqhhr]r(ht)r}r(hAX!1.0.3 [2010-05-15 03:00 P.M CEST]rhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpKOhqhhr]rh{X!1.0.3 [2010-05-15 03:00 P.M CEST]rr}r(hAjhNjubaubhd)r}r(hAUhNjhihIhjhkhB}r(hD]hK]hF]hE]rUimportant-notesrahL]rh auhpKRhqhhr]r(ht)r}r(hAXImportant notesrhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpKRhqhhr]rh{XImportant notesrr}r(hAjhNjubaubha)r}r(hAUhNjhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpKThqhhr]r(h^)r}r(hAXMessages are now acked *just before* the task function is executed. This is the behavior we've wanted all along, but couldn't have because of limitations in the multiprocessing module. The previous behavior was not good, and the situation worsened with the release of 1.0.1, so this change will definitely improve reliability, performance and operations in general. For more information please see http://bit.ly/9hom6T hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAXCMessages are now acked *just before* the task function is executed.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKThr]r(h{XMessages are now acked rr}r(hAXMessages are now acked hNjubcdocutils.nodes emphasis r)r}r(hAX *just before*hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X just beforerr}r(hAUhNjubahjUemphasisrubh{X the task function is executed.rr}r(hAX the task function is executed.hNjubeubhZ)r}r(hAUhB}r (hD]hK]hF]hE]hL]uhNjhr]r (h)r }r (hAX)This is the behavior we've wanted all along, but couldn't have because of limitations in the multiprocessing module. The previous behavior was not good, and the situation worsened with the release of 1.0.1, so this change will definitely improve reliability, performance and operations in general.r hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKVhr]rh{X)This is the behavior we've wanted all along, but couldn't have because of limitations in the multiprocessing module. The previous behavior was not good, and the situation worsened with the release of 1.0.1, so this change will definitely improve reliability, performance and operations in general.rr}r(hAj hNj ubaubh)r}r(hAX4For more information please see http://bit.ly/9hom6ThNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpK\hr]r(h{X For more information please see rr}r(hAX For more information please see hNjubjC)r}r(hAXhttp://bit.ly/9hom6TrhB}r(UrefurijhE]hF]hD]hK]hL]uhNjhr]rh{Xhttp://bit.ly/9hom6Trr }r!(hAUhNjubahjjLubeubehjj+ubeubh^)r"}r#(hAXDatabase result backend: result now explicitly sets ``null=True`` as ``django-picklefield`` version 0.1.5 changed the default behavior right under our noses :( See: http://bit.ly/d5OwMr This means those who created their celery tables (via syncdb or celeryinit) with picklefield versions >= 0.1.5 has to alter their tables to allow the result field to be ``NULL`` manually. MySQL:: ALTER TABLE celery_taskmeta MODIFY result TEXT NULL hNjhihIhjhhB}r$(hD]hK]hF]hE]hL]uhpNhqhhr]r%(h)r&}r'(hAXDatabase result backend: result now explicitly sets ``null=True`` as ``django-picklefield`` version 0.1.5 changed the default behavior right under our noses :(hNj"hihIhjhhB}r((hD]hK]hF]hE]hL]uhpK^hr]r)(h{X4Database result backend: result now explicitly sets r*r+}r,(hAX4Database result backend: result now explicitly sets hNj&ubh)r-}r.(hAX ``null=True``hB}r/(hD]hK]hF]hE]hL]uhNj&hr]r0h{X null=Truer1r2}r3(hAUhNj-ubahjhubh{X as r4r5}r6(hAX as hNj&ubh)r7}r8(hAX``django-picklefield``hB}r9(hD]hK]hF]hE]hL]uhNj&hr]r:h{Xdjango-picklefieldr;r<}r=(hAUhNj7ubahjhubh{XD version 0.1.5 changed the default behavior right under our noses :(r>r?}r@(hAXD version 0.1.5 changed the default behavior right under our noses :(hNj&ubeubhZ)rA}rB(hAUhB}rC(hD]hK]hF]hE]hL]uhNj"hr]rD(h)rE}rF(hAXSee: http://bit.ly/d5OwMrhNjAhihIhjhhB}rG(hD]hK]hF]hE]hL]uhpKbhr]rH(h{XSee: rIrJ}rK(hAXSee: hNjEubjC)rL}rM(hAXhttp://bit.ly/d5OwMrrNhB}rO(UrefurijNhE]hF]hD]hK]hL]uhNjEhr]rPh{Xhttp://bit.ly/d5OwMrrQrR}rS(hAUhNjLubahjjLubeubh)rT}rU(hAXThis means those who created their celery tables (via syncdb or celeryinit) with picklefield versions >= 0.1.5 has to alter their tables to allow the result field to be ``NULL`` manually.hNjAhihIhjhhB}rV(hD]hK]hF]hE]hL]uhpKdhr]rW(h{XThis means those who created their celery tables (via syncdb or celeryinit) with picklefield versions >= 0.1.5 has to alter their tables to allow the result field to be rXrY}rZ(hAXThis means those who created their celery tables (via syncdb or celeryinit) with picklefield versions >= 0.1.5 has to alter their tables to allow the result field to be hNjTubh)r[}r\(hAX``NULL``hB}r](hD]hK]hF]hE]hL]uhNjThr]r^h{XNULLr_r`}ra(hAUhNj[ubahjhubh{X manually.rbrc}rd(hAX manually.hNjTubeubh)re}rf(hAXMySQL::hNjAhihIhjhhB}rg(hD]hK]hF]hE]hL]uhpKhhr]rhh{XMySQL:rirj}rk(hAXMySQL:hNjeubaubh)rl}rm(hAX3ALTER TABLE celery_taskmeta MODIFY result TEXT NULLhNjAhjhhB}rn(hhhE]hF]hD]hK]hL]uhpKjhr]roh{X3ALTER TABLE celery_taskmeta MODIFY result TEXT NULLrprq}rr(hAUhNjlubaubehjj+ubeubh^)rs}rt(hAXoRemoved ``Task.rate_limit_queue_type``, as it was not really useful and made it harder to refactor some parts. hNjhihIhjhhB}ru(hD]hK]hF]hE]hL]uhpNhqhhr]rvh)rw}rx(hAXnRemoved ``Task.rate_limit_queue_type``, as it was not really useful and made it harder to refactor some parts.hNjshihIhjhhB}ry(hD]hK]hF]hE]hL]uhpKlhr]rz(h{XRemoved r{r|}r}(hAXRemoved hNjwubh)r~}r(hAX``Task.rate_limit_queue_type``hB}r(hD]hK]hF]hE]hL]uhNjwhr]rh{XTask.rate_limit_queue_typerr}r(hAUhNj~ubahjhubh{XH, as it was not really useful and made it harder to refactor some parts.rr}r(hAXH, as it was not really useful and made it harder to refactor some parts.hNjwubeubaubh^)r}r(hAX Now depends on carrot >= 0.10.4 hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXNow depends on carrot >= 0.10.4rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKohr]rh{XNow depends on carrot >= 0.10.4rr}r(hAjhNjubaubaubh^)r}r(hAX!Now depends on billiard >= 0.3.0 hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX Now depends on billiard >= 0.3.0rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKqhr]rh{X Now depends on billiard >= 0.3.0rr}r(hAjhNjubaubaubeubeubhd)r}r(hAUjKhNjhihIhjhkhB}r(hD]rXnewsrahK]hF]hE]rUnewsrahL]uhpKthqhhr]r(ht)r}r(hAXNewsrhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpKthqhhr]rh{XNewsrr}r(hAjhNjubaubha)r}r(hAUhNjhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpKvhqhhr]r(h^)r}r(hAXNAMQP backend: Added timeout support for ``result.get()`` / ``result.wait()``. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXMAMQP backend: Added timeout support for ``result.get()`` / ``result.wait()``.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKvhr]r(h{X(AMQP backend: Added timeout support for rr}r(hAX(AMQP backend: Added timeout support for hNjubh)r}r(hAX``result.get()``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X result.get()rr}r(hAUhNjubahjhubh{X / rr}r(hAX / hNjubh)r}r(hAX``result.wait()``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X result.wait()rr}r(hAUhNjubahjhubh{X.r}r(hAX.hNjubeubaubh^)r}r(hAXNew task option: ``Task.acks_late`` (default: ``CELERY_ACKS_LATE``) Late ack means the task messages will be acknowledged **after** the task has been executed, not *just before*, which is the default behavior. Note that this means the tasks may be executed twice if the worker crashes in the middle of their execution. Not acceptable for most applications, but desirable for others. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAXCNew task option: ``Task.acks_late`` (default: ``CELERY_ACKS_LATE``)hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKyhr]r(h{XNew task option: rr}r(hAXNew task option: hNjubh)r}r(hAX``Task.acks_late``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XTask.acks_laterr}r(hAUhNjubahjhubh{X (default: rr}r(hAX (default: hNjubh)r}r(hAX``CELERY_ACKS_LATE``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XCELERY_ACKS_LATErr}r(hAUhNjubahjhubh{X)r}r(hAX)hNjubeubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]r(h)r}r(hAXLate ack means the task messages will be acknowledged **after** the task has been executed, not *just before*, which is the default behavior.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpK{hr]r(h{X6Late ack means the task messages will be acknowledged rr}r(hAX6Late ack means the task messages will be acknowledged hNjubcdocutils.nodes strong r)r}r(hAX **after**hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xafterrr}r(hAUhNjubahjUstrongrubh{X! the task has been executed, not rr}r(hAX! the task has been executed, not hNjubj)r}r(hAX *just before*hB}r (hD]hK]hF]hE]hL]uhNjhr]r h{X just beforer r }r (hAUhNjubahjjubh{X , which is the default behavior.rr}r(hAX , which is the default behavior.hNjubeubh)r}r(hAXNote that this means the tasks may be executed twice if the worker crashes in the middle of their execution. Not acceptable for most applications, but desirable for others.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpK~hr]rh{XNote that this means the tasks may be executed twice if the worker crashes in the middle of their execution. Not acceptable for most applications, but desirable for others.rr}r(hAjhNjubaubehjj+ubeubh^)r}r(hAXAdded crontab-like scheduling to periodic tasks. Like a cron job, you can specify units of time of when you would like the task to execute. While not a full implementation of cron's features, it should provide a fair degree of common scheduling needs. You can specify a minute (0-59), an hour (0-23), and/or a day of the week (0-6 where 0 is Sunday, or by names: sun, mon, tue, wed, thu, fri, sat). Examples: .. code-block:: python from celery.task.schedules import crontab from celery.decorators import periodic_task @periodic_task(run_every=crontab(hour=7, minute=30)) def every_morning(): print("Runs every morning at 7:30a.m") @periodic_task(run_every=crontab(hour=7, minute=30, day_of_week="mon")) def every_monday_morning(): print("Run every monday morning at 7:30a.m") @periodic_task(run_every=crontab(minutes=30)) def every_hour(): print("Runs every hour on the clock. e.g. 1:30, 2:30, 3:30 etc.") Note that this a late addition. While we have unittests, due to the nature of this feature we haven't been able to completely test this in practice, so consider this experimental. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX0Added crontab-like scheduling to periodic tasks.rhNjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpKhr]r!h{X0Added crontab-like scheduling to periodic tasks.r"r#}r$(hAjhNjubaubhZ)r%}r&(hAUhB}r'(hD]hK]hF]hE]hL]uhNjhr]r((h)r)}r*(hAXLike a cron job, you can specify units of time of when you would like the task to execute. While not a full implementation of cron's features, it should provide a fair degree of common scheduling needs.r+hNj%hihIhjhhB}r,(hD]hK]hF]hE]hL]uhpKhr]r-h{XLike a cron job, you can specify units of time of when you would like the task to execute. While not a full implementation of cron's features, it should provide a fair degree of common scheduling needs.r.r/}r0(hAj+hNj)ubaubh)r1}r2(hAXYou can specify a minute (0-59), an hour (0-23), and/or a day of the week (0-6 where 0 is Sunday, or by names: sun, mon, tue, wed, thu, fri, sat).r3hNj%hihIhjhhB}r4(hD]hK]hF]hE]hL]uhpKhr]r5h{XYou can specify a minute (0-59), an hour (0-23), and/or a day of the week (0-6 where 0 is Sunday, or by names: sun, mon, tue, wed, thu, fri, sat).r6r7}r8(hAj3hNj1ubaubh)r9}r:(hAX Examples:r;hNj%hihIhjhhB}r<(hD]hK]hF]hE]hL]uhpKhr]r=h{X Examples:r>r?}r@(hAj;hNj9ubaubh)rA}rB(hAXfrom celery.task.schedules import crontab from celery.decorators import periodic_task @periodic_task(run_every=crontab(hour=7, minute=30)) def every_morning(): print("Runs every morning at 7:30a.m") @periodic_task(run_every=crontab(hour=7, minute=30, day_of_week="mon")) def every_monday_morning(): print("Run every monday morning at 7:30a.m") @periodic_task(run_every=crontab(minutes=30)) def every_hour(): print("Runs every hour on the clock. e.g. 1:30, 2:30, 3:30 etc.")hNj%hihIhjhhB}rC(UlinenosrDUlanguagerEXpythonhhhE]hF]hD]hK]hL]uhpKhr]rFh{Xfrom celery.task.schedules import crontab from celery.decorators import periodic_task @periodic_task(run_every=crontab(hour=7, minute=30)) def every_morning(): print("Runs every morning at 7:30a.m") @periodic_task(run_every=crontab(hour=7, minute=30, day_of_week="mon")) def every_monday_morning(): print("Run every monday morning at 7:30a.m") @periodic_task(run_every=crontab(minutes=30)) def every_hour(): print("Runs every hour on the clock. e.g. 1:30, 2:30, 3:30 etc.")rGrH}rI(hAUhNjAubaubh)rJ}rK(hAXNote that this a late addition. While we have unittests, due to the nature of this feature we haven't been able to completely test this in practice, so consider this experimental.rLhNj%hihIhjhhB}rM(hD]hK]hF]hE]hL]uhpKhr]rNh{XNote that this a late addition. While we have unittests, due to the nature of this feature we haven't been able to completely test this in practice, so consider this experimental.rOrP}rQ(hAjLhNjJubaubehjj+ubeubh^)rR}rS(hAXI``TaskPool.apply_async``: Now supports the ``accept_callback`` argument. hNjhihIhjhhB}rT(hD]hK]hF]hE]hL]uhpNhqhhr]rUh)rV}rW(hAXH``TaskPool.apply_async``: Now supports the ``accept_callback`` argument.hNjRhihIhjhhB}rX(hD]hK]hF]hE]hL]uhpKhr]rY(h)rZ}r[(hAX``TaskPool.apply_async``hB}r\(hD]hK]hF]hE]hL]uhNjVhr]r]h{XTaskPool.apply_asyncr^r_}r`(hAUhNjZubahjhubh{X: Now supports the rarb}rc(hAX: Now supports the hNjVubh)rd}re(hAX``accept_callback``hB}rf(hD]hK]hF]hE]hL]uhNjVhr]rgh{Xaccept_callbackrhri}rj(hAUhNjdubahjhubh{X argument.rkrl}rm(hAX argument.hNjVubeubaubh^)rn}ro(hAX``apply_async``: Now raises :exc:`ValueError` if task args is not a list, or kwargs is not a tuple (http://github.com/ask/celery/issues/issue/95). hNjhihIhjhhB}rp(hD]hK]hF]hE]hL]uhpNhqhhr]rqh)rr}rs(hAX``apply_async``: Now raises :exc:`ValueError` if task args is not a list, or kwargs is not a tuple (http://github.com/ask/celery/issues/issue/95).hNjnhihIhjhhB}rt(hD]hK]hF]hE]hL]uhpKhr]ru(h)rv}rw(hAX``apply_async``hB}rx(hD]hK]hF]hE]hL]uhNjrhr]ryh{X apply_asyncrzr{}r|(hAUhNjvubahjhubh{X : Now raises r}r~}r(hAX : Now raises hNjrubj)r}r(hAX:exc:`ValueError`rhNjrhihIhjjhB}r(UreftypeXexcjjX ValueErrorU refdomainXpyrhE]hF]U refexplicithD]hK]hL]jjjNjNuhpKhr]rh)r}r(hAjhB}r(hD]hK]r(j#jXpy-excrehF]hE]hL]uhNjhr]rh{X ValueErrorrr}r(hAUhNjubahjhubaubh{X7 if task args is not a list, or kwargs is not a tuple (rr}r(hAX7 if task args is not a list, or kwargs is not a tuple (hNjrubjC)r}r(hAX,http://github.com/ask/celery/issues/issue/95rhB}r(UrefurijhE]hF]hD]hK]hL]uhNjrhr]rh{X,http://github.com/ask/celery/issues/issue/95rr}r(hAUhNjubahjjLubh{X).rr}r(hAX).hNjrubeubaubh^)r}r(hAXM``Task.max_retries`` can now be ``None``, which means it will retry forever. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXL``Task.max_retries`` can now be ``None``, which means it will retry forever.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]r(h)r}r(hAX``Task.max_retries``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XTask.max_retriesrr}r(hAUhNjubahjhubh{X can now be rr}r(hAX can now be hNjubh)r}r(hAX``None``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XNonerr}r(hAUhNjubahjhubh{X$, which means it will retry forever.rr}r(hAX$, which means it will retry forever.hNjubeubaubh^)r}r(hAXPCelerybeat: Now reuses the same connection when publishing large sets of tasks. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXOCelerybeat: Now reuses the same connection when publishing large sets of tasks.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]rh{XOCelerybeat: Now reuses the same connection when publishing large sets of tasks.rr}r(hAjhNjubaubaubh^)r}r(hAX`Modified the task locking example in the documentation to use ``cache.add`` for atomic locking. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX_Modified the task locking example in the documentation to use ``cache.add`` for atomic locking.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]r(h{X>Modified the task locking example in the documentation to use rr}r(hAX>Modified the task locking example in the documentation to use hNjubh)r}r(hAX ``cache.add``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X cache.addrr}r(hAUhNjubahjhubh{X for atomic locking.rr}r(hAX for atomic locking.hNjubeubaubh^)r}r(hAXFAdded experimental support for a *started* status on tasks. If ``Task.track_started`` is enabled the task will report its status as "started" when the task is executed by a worker. The default value is ``False`` as the normal behaviour is to not report that level of granularity. Tasks are either pending, finished, or waiting to be retried. Having a "started" status can be useful for when there are long running tasks and there is a need to report which task is currently running. The global default can be overridden by the ``CELERY_TRACK_STARTED`` setting. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX;Added experimental support for a *started* status on tasks.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]r(h{X!Added experimental support for a rr}r(hAX!Added experimental support for a hNjubj)r}r(hAX *started*hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xstartedrr}r(hAUhNjubahjjubh{X status on tasks.rr}r(hAX status on tasks.hNjubeubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]r(h)r}r(hAXxIf ``Task.track_started`` is enabled the task will report its status as "started" when the task is executed by a worker.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]r(h{XIf rr}r(hAXIf hNjubh)r}r(hAX``Task.track_started``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XTask.track_startedrr}r(hAUhNjubahjhubh{X_ is enabled the task will report its status as "started" when the task is executed by a worker.rr}r(hAX_ is enabled the task will report its status as "started" when the task is executed by a worker.hNjubeubh)r}r(hAX-The default value is ``False`` as the normal behaviour is to not report that level of granularity. Tasks are either pending, finished, or waiting to be retried. Having a "started" status can be useful for when there are long running tasks and there is a need to report which task is currently running.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]r(h{XThe default value is rr }r (hAXThe default value is hNjubh)r }r (hAX ``False``hB}r (hD]hK]hF]hE]hL]uhNjhr]rh{XFalserr}r(hAUhNj ubahjhubh{X as the normal behaviour is to not report that level of granularity. Tasks are either pending, finished, or waiting to be retried. Having a "started" status can be useful for when there are long running tasks and there is a need to report which task is currently running.rr}r(hAX as the normal behaviour is to not report that level of granularity. Tasks are either pending, finished, or waiting to be retried. Having a "started" status can be useful for when there are long running tasks and there is a need to report which task is currently running.hNjubeubh)r}r(hAXMThe global default can be overridden by the ``CELERY_TRACK_STARTED`` setting.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]r(h{X,The global default can be overridden by the rr}r(hAX,The global default can be overridden by the hNjubh)r}r(hAX``CELERY_TRACK_STARTED``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XCELERY_TRACK_STARTEDr r!}r"(hAUhNjubahjhubh{X setting.r#r$}r%(hAX setting.hNjubeubehjj+ubeubh^)r&}r'(hAXOUser Guide: New section ``Tips and Best Practices``. Contributions welcome! hNjhihIhjhhB}r((hD]hK]hF]hE]hL]uhpNhqhhr]r)(h)r*}r+(hAX4User Guide: New section ``Tips and Best Practices``.hNj&hihIhjhhB}r,(hD]hK]hF]hE]hL]uhpKhr]r-(h{XUser Guide: New section r.r/}r0(hAXUser Guide: New section hNj*ubh)r1}r2(hAX``Tips and Best Practices``hB}r3(hD]hK]hF]hE]hL]uhNj*hr]r4h{XTips and Best Practicesr5r6}r7(hAUhNj1ubahjhubh{X.r8}r9(hAX.hNj*ubeubhZ)r:}r;(hAUhB}r<(hD]hK]hF]hE]hL]uhNj&hr]r=h)r>}r?(hAXContributions welcome!r@hNj:hihIhjhhB}rA(hD]hK]hF]hE]hL]uhpKhr]rBh{XContributions welcome!rCrD}rE(hAj@hNj>ubaubahjj+ubeubeubeubhd)rF}rG(hAUhNjhihIhjhkhB}rH(hD]hK]hF]hE]rIUremote-control-commandsrJahL]rKh"auhpKhqhhr]rL(ht)rM}rN(hAXRemote control commandsrOhNjFhihIhjhxhB}rP(hD]hK]hF]hE]hL]uhpKhqhhr]rQh{XRemote control commandsrRrS}rT(hAjOhNjMubaubha)rU}rV(hAUhNjFhihIhjhhB}rW(hX*hE]hF]hD]hK]hL]uhpKhqhhr]rX(h^)rY}rZ(hAXRemote control commands can now send replies back to the caller. Existing commands has been improved to send replies, and the client interface in ``celery.task.control`` has new keyword arguments: ``reply``, ``timeout`` and ``limit``. Where reply means it will wait for replies, timeout is the time in seconds to stop waiting for replies, and limit is the maximum number of replies to get. By default, it will wait for as many replies as possible for one second. * rate_limit(task_name, destination=all, reply=False, timeout=1, limit=0) Worker returns ``{"ok": message}`` on success, or ``{"failure": message}`` on failure. >>> from celery.task.control import rate_limit >>> rate_limit("tasks.add", "10/s", reply=True) [{'worker1': {'ok': 'new rate limit set successfully'}}, {'worker2': {'ok': 'new rate limit set successfully'}}] * ping(destination=all, reply=False, timeout=1, limit=0) Worker returns the simple message ``"pong"``. >>> from celery.task.control import ping >>> ping(reply=True) [{'worker1': 'pong'}, {'worker2': 'pong'}, * revoke(destination=all, reply=False, timeout=1, limit=0) Worker simply returns ``True``. >>> from celery.task.control import revoke >>> revoke("419e46eb-cf6a-4271-86a8-442b7124132c", reply=True) [{'worker1': True}, {'worker2'; True}] hNjUhihIhjhhB}r[(hD]hK]hF]hE]hL]uhpNhqhhr]r\(h)r]}r^(hAX@Remote control commands can now send replies back to the caller.r_hNjYhihIhjhhB}r`(hD]hK]hF]hE]hL]uhpKhr]rah{X@Remote control commands can now send replies back to the caller.rbrc}rd(hAj_hNj]ubaubhZ)re}rf(hAUhB}rg(hD]hK]hF]hE]hL]uhNjYhr]rh(h)ri}rj(hAXDExisting commands has been improved to send replies, and the client interface in ``celery.task.control`` has new keyword arguments: ``reply``, ``timeout`` and ``limit``. Where reply means it will wait for replies, timeout is the time in seconds to stop waiting for replies, and limit is the maximum number of replies to get.hNjehihIhjhhB}rk(hD]hK]hF]hE]hL]uhpKhr]rl(h{XQExisting commands has been improved to send replies, and the client interface in rmrn}ro(hAXQExisting commands has been improved to send replies, and the client interface in hNjiubh)rp}rq(hAX``celery.task.control``hB}rr(hD]hK]hF]hE]hL]uhNjihr]rsh{Xcelery.task.controlrtru}rv(hAUhNjpubahjhubh{X has new keyword arguments: rwrx}ry(hAX has new keyword arguments: hNjiubh)rz}r{(hAX ``reply``hB}r|(hD]hK]hF]hE]hL]uhNjihr]r}h{Xreplyr~r}r(hAUhNjzubahjhubh{X, rr}r(hAX, hNjiubh)r}r(hAX ``timeout``hB}r(hD]hK]hF]hE]hL]uhNjihr]rh{Xtimeoutrr}r(hAUhNjubahjhubh{X and rr}r(hAX and hNjiubh)r}r(hAX ``limit``hB}r(hD]hK]hF]hE]hL]uhNjihr]rh{Xlimitrr}r(hAUhNjubahjhubh{X. Where reply means it will wait for replies, timeout is the time in seconds to stop waiting for replies, and limit is the maximum number of replies to get.rr}r(hAX. Where reply means it will wait for replies, timeout is the time in seconds to stop waiting for replies, and limit is the maximum number of replies to get.hNjiubeubh)r}r(hAXHBy default, it will wait for as many replies as possible for one second.rhNjehihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]rh{XHBy default, it will wait for as many replies as possible for one second.rr}r(hAjhNjubaubha)r}r(hAUhB}r(hX*hE]hF]hD]hK]hL]uhNjehr]r(h^)r}r(hAXrate_limit(task_name, destination=all, reply=False, timeout=1, limit=0) Worker returns ``{"ok": message}`` on success, or ``{"failure": message}`` on failure. >>> from celery.task.control import rate_limit >>> rate_limit("tasks.add", "10/s", reply=True) [{'worker1': {'ok': 'new rate limit set successfully'}}, {'worker2': {'ok': 'new rate limit set successfully'}}] hB}r(hD]hK]hF]hE]hL]uhNjhr]r(h)r}r(hAXGrate_limit(task_name, destination=all, reply=False, timeout=1, limit=0)rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]rh{XGrate_limit(task_name, destination=all, reply=False, timeout=1, limit=0)rr}r(hAjhNjubaubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]r(h)r}r(hAXVWorker returns ``{"ok": message}`` on success, or ``{"failure": message}`` on failure.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]r(h{XWorker returns rr}r(hAXWorker returns hNjubh)r}r(hAX``{"ok": message}``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X{"ok": message}rr}r(hAUhNjubahjhubh{X on success, or rr}r(hAX on success, or hNjubh)r}r(hAX``{"failure": message}``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X{"failure": message}rr}r(hAUhNjubahjhubh{X on failure.rr}r(hAX on failure.hNjubeubcdocutils.nodes doctest_block r)r}r(hAX>>> from celery.task.control import rate_limit >>> rate_limit("tasks.add", "10/s", reply=True) [{'worker1': {'ok': 'new rate limit set successfully'}}, {'worker2': {'ok': 'new rate limit set successfully'}}]hB}r(hhhE]hF]hD]hK]hL]uhNjhr]rh{X>>> from celery.task.control import rate_limit >>> rate_limit("tasks.add", "10/s", reply=True) [{'worker1': {'ok': 'new rate limit set successfully'}}, {'worker2': {'ok': 'new rate limit set successfully'}}]rr}r(hAUhNjubahjU doctest_blockrubehjj+ubehjhubh^)r}r(hAXping(destination=all, reply=False, timeout=1, limit=0) Worker returns the simple message ``"pong"``. >>> from celery.task.control import ping >>> ping(reply=True) [{'worker1': 'pong'}, {'worker2': 'pong'}, hB}r(hD]hK]hF]hE]hL]uhNjhr]r(h)r}r(hAX6ping(destination=all, reply=False, timeout=1, limit=0)rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]rh{X6ping(destination=all, reply=False, timeout=1, limit=0)rr}r(hAjhNjubaubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]r(h)r}r(hAX-Worker returns the simple message ``"pong"``.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]r(h{X"Worker returns the simple message rr}r(hAX"Worker returns the simple message hNjubh)r}r(hAX ``"pong"``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X"pong"rr}r(hAUhNjubahjhubh{X.r}r(hAX.hNjubeubj)r}r(hAXi>>> from celery.task.control import ping >>> ping(reply=True) [{'worker1': 'pong'}, {'worker2': 'pong'},hB}r(hhhE]hF]hD]hK]hL]uhNjhr]rh{Xi>>> from celery.task.control import ping >>> ping(reply=True) [{'worker1': 'pong'}, {'worker2': 'pong'},rr}r(hAUhNjubahjjubehjj+ubehjhubh^)r}r(hAXrevoke(destination=all, reply=False, timeout=1, limit=0) Worker simply returns ``True``. >>> from celery.task.control import revoke >>> revoke("419e46eb-cf6a-4271-86a8-442b7124132c", reply=True) [{'worker1': True}, {'worker2'; True}] hB}r(hD]hK]hF]hE]hL]uhNjhr]r(h)r}r(hAX8revoke(destination=all, reply=False, timeout=1, limit=0)rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]rh{X8revoke(destination=all, reply=False, timeout=1, limit=0)rr }r (hAjhNjubaubhZ)r }r (hAUhB}r (hD]hK]hF]hE]hL]uhNjhr]r(h)r}r(hAXWorker simply returns ``True``.rhNj hihIhjhhB}r(hD]hK]hF]hE]hL]uhpKhr]r(h{XWorker simply returns rr}r(hAXWorker simply returns hNjubh)r}r(hAX``True``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XTruerr}r(hAUhNjubahjhubh{X.r}r(hAX.hNjubeubj)r }r!(hAX>>> from celery.task.control import revoke >>> revoke("419e46eb-cf6a-4271-86a8-442b7124132c", reply=True) [{'worker1': True}, {'worker2'; True}]hB}r"(hhhE]hF]hD]hK]hL]uhNj hr]r#h{X>>> from celery.task.control import revoke >>> revoke("419e46eb-cf6a-4271-86a8-442b7124132c", reply=True) [{'worker1': True}, {'worker2'; True}]r$r%}r&(hAUhNj ubahjjubehjj+ubehjhubehjhubehjj+ubeubh^)r'}r((hAXYou can now add your own remote control commands! Remote control commands are functions registered in the command registry. Registering a command is done using :meth:`celery.worker.control.Panel.register`: .. code-block:: python from celery.task.control import Panel @Panel.register def reset_broker_connection(panel, **kwargs): panel.listener.reset_connection() return {"ok": "connection re-established"} With this module imported in the worker, you can launch the command using ``celery.task.control.broadcast``:: >>> from celery.task.control import broadcast >>> broadcast("reset_broker_connection", reply=True) [{'worker1': {'ok': 'connection re-established'}, {'worker2': {'ok': 'connection re-established'}}] **TIP** You can choose the worker(s) to receive the command by using the ``destination`` argument:: >>> broadcast("reset_broker_connection", destination=["worker1"]) [{'worker1': {'ok': 'connection re-established'}] hNjUhihIhjhhB}r)(hD]hK]hF]hE]hL]uhpNhqhhr]r*(h)r+}r,(hAX1You can now add your own remote control commands!r-hNj'hihIhjhhB}r.(hD]hK]hF]hE]hL]uhpKhr]r/h{X1You can now add your own remote control commands!r0r1}r2(hAj-hNj+ubaubhZ)r3}r4(hAUhB}r5(hD]hK]hF]hE]hL]uhNj'hr]r6(h)r7}r8(hAXRemote control commands are functions registered in the command registry. Registering a command is done using :meth:`celery.worker.control.Panel.register`:hNj3hihIhjhhB}r9(hD]hK]hF]hE]hL]uhpKhr]r:(h{XnRemote control commands are functions registered in the command registry. Registering a command is done using r;r<}r=(hAXnRemote control commands are functions registered in the command registry. Registering a command is done using hNj7ubj)r>}r?(hAX,:meth:`celery.worker.control.Panel.register`r@hNj7hihIhjjhB}rA(UreftypeXmethjjX$celery.worker.control.Panel.registerU refdomainXpyrBhE]hF]U refexplicithD]hK]hL]jjjNjNuhpKhr]rCh)rD}rE(hAj@hB}rF(hD]hK]rG(j#jBXpy-methrHehF]hE]hL]uhNj>hr]rIh{X&celery.worker.control.Panel.register()rJrK}rL(hAUhNjDubahjhubaubh{X:rM}rN(hAX:hNj7ubeubh)rO}rP(hAXfrom celery.task.control import Panel @Panel.register def reset_broker_connection(panel, **kwargs): panel.listener.reset_connection() return {"ok": "connection re-established"}hNj3hihIhjhhB}rQ(jDjEXpythonhhhE]hF]hD]hK]hL]uhpKhr]rRh{Xfrom celery.task.control import Panel @Panel.register def reset_broker_connection(panel, **kwargs): panel.listener.reset_connection() return {"ok": "connection re-established"}rSrT}rU(hAUhNjOubaubh)rV}rW(hAXmWith this module imported in the worker, you can launch the command using ``celery.task.control.broadcast``::hNj3hihIhjhhB}rX(hD]hK]hF]hE]hL]uhpKhr]rY(h{XJWith this module imported in the worker, you can launch the command using rZr[}r\(hAXJWith this module imported in the worker, you can launch the command using hNjVubh)r]}r^(hAX!``celery.task.control.broadcast``hB}r_(hD]hK]hF]hE]hL]uhNjVhr]r`h{Xcelery.task.control.broadcastrarb}rc(hAUhNj]ubahjhubh{X:rd}re(hAX:hNjVubeubh)rf}rg(hAX>>> from celery.task.control import broadcast >>> broadcast("reset_broker_connection", reply=True) [{'worker1': {'ok': 'connection re-established'}, {'worker2': {'ok': 'connection re-established'}}]hNj3hjhhB}rh(hhhE]hF]hD]hK]hL]uhpKhr]rih{X>>> from celery.task.control import broadcast >>> broadcast("reset_broker_connection", reply=True) [{'worker1': {'ok': 'connection re-established'}, {'worker2': {'ok': 'connection re-established'}}]rjrk}rl(hAUhNjfubaubh)rm}rn(hAXc**TIP** You can choose the worker(s) to receive the command by using the ``destination`` argument::hNj3hihIhjhhB}ro(hD]hK]hF]hE]hL]uhpMhr]rp(j)rq}rr(hAX**TIP**hB}rs(hD]hK]hF]hE]hL]uhNjmhr]rth{XTIPrurv}rw(hAUhNjqubahjjubh{XB You can choose the worker(s) to receive the command by using the rxry}rz(hAXB You can choose the worker(s) to receive the command by using the hNjmubh)r{}r|(hAX``destination``hB}r}(hD]hK]hF]hE]hL]uhNjmhr]r~h{X destinationrr}r(hAUhNj{ubahjhubh{X argument:rr}r(hAX argument:hNjmubeubh)r}r(hAXs>>> broadcast("reset_broker_connection", destination=["worker1"]) [{'worker1': {'ok': 'connection re-established'}]hNj3hjhhB}r(hhhE]hF]hD]hK]hL]uhpMhr]rh{Xs>>> broadcast("reset_broker_connection", destination=["worker1"]) [{'worker1': {'ok': 'connection re-established'}]rr}r(hAUhNjubaubehjj+ubeubh^)r}r(hAXNew remote control command: ``dump_reserved`` Dumps tasks reserved by the worker, waiting to be executed:: >>> from celery.task.control import broadcast >>> broadcast("dump_reserved", reply=True) [{'myworker1': []}] hNjUhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX-New remote control command: ``dump_reserved``hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM hr]r(h{XNew remote control command: rr}r(hAXNew remote control command: hNjubh)r}r(hAX``dump_reserved``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X dump_reservedrr}r(hAUhNjubahjhubeubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]r(h)r}r(hAX<Dumps tasks reserved by the worker, waiting to be executed::hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM hr]rh{X;Dumps tasks reserved by the worker, waiting to be executed:rr}r(hAX;Dumps tasks reserved by the worker, waiting to be executed:hNjubaubh)r}r(hAX~>>> from celery.task.control import broadcast >>> broadcast("dump_reserved", reply=True) [{'myworker1': []}]hNjhjhhB}r(hhhE]hF]hD]hK]hL]uhpM hr]rh{X~>>> from celery.task.control import broadcast >>> broadcast("dump_reserved", reply=True) [{'myworker1': []}]rr}r(hAUhNjubaubehjj+ubeubh^)r}r(hAXqNew remote control command: ``dump_schedule`` Dumps the workers currently registered ETA schedule. These are tasks with an ``eta`` (or ``countdown``) argument waiting to be executed by the worker. >>> from celery.task.control import broadcast >>> broadcast("dump_schedule", reply=True) [{'w1': []}, {'w3': []}, {'w2': ['0. 2010-05-12 11:06:00 pri0 ,)", kwargs:"{'page': 2}"}>']}, {'w4': ['0. 2010-05-12 11:00:00 pri0 ,)", kwargs:"{\'page\': 1}"}>', '1. 2010-05-12 11:12:00 pri0 ,)", kwargs:"{\'page\': 3}"}>']}] hNjUhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX-New remote control command: ``dump_schedule``hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XNew remote control command: rr}r(hAXNew remote control command: hNjubh)r}r(hAX``dump_schedule``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X dump_schedulerr}r(hAUhNjubahjhubeubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]r(h)r}r(hAXDumps the workers currently registered ETA schedule. These are tasks with an ``eta`` (or ``countdown``) argument waiting to be executed by the worker.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XMDumps the workers currently registered ETA schedule. These are tasks with an rr}r(hAXMDumps the workers currently registered ETA schedule. These are tasks with an hNjubh)r}r(hAX``eta``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xetarr}r(hAUhNjubahjhubh{X (or rr}r(hAX (or hNjubh)r}r(hAX ``countdown``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X countdownrr}r(hAUhNjubahjhubh{X0) argument waiting to be executed by the worker.rr}r(hAX0) argument waiting to be executed by the worker.hNjubeubj)r}r(hAX>>> from celery.task.control import broadcast >>> broadcast("dump_schedule", reply=True) [{'w1': []}, {'w3': []}, {'w2': ['0. 2010-05-12 11:06:00 pri0 ,)", kwargs:"{'page': 2}"}>']}, {'w4': ['0. 2010-05-12 11:00:00 pri0 ,)", kwargs:"{\'page\': 1}"}>', '1. 2010-05-12 11:12:00 pri0 ,)", kwargs:"{\'page\': 3}"}>']}]hB}r(hhhE]hF]hD]hK]hL]uhNjhr]rh{X>>> from celery.task.control import broadcast >>> broadcast("dump_schedule", reply=True) [{'w1': []}, {'w3': []}, {'w2': ['0. 2010-05-12 11:06:00 pri0 ,)", kwargs:"{'page': 2}"}>']}, {'w4': ['0. 2010-05-12 11:00:00 pri0 ,)", kwargs:"{\'page\': 1}"}>', '1. 2010-05-12 11:12:00 pri0 ,)", kwargs:"{\'page\': 3}"}>']}]rr}r(hAUhNjubahjjubehjj+ubeubeubeubhd)r}r(hAUhNjhihIhjhkhB}r(hD]hK]hF]hE]rUfixesrahL]rh/auhpM/hqhhr]r(ht)r}r(hAXFixesrhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpM/hqhhr]rh{XFixesrr}r(hAjhNjubaubha)r}r(hAUhNjhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpM1hqhhr]r(h^)r}r(hAXMediator thread no longer blocks for more than 1 second. With rate limits enabled and when there was a lot of remaining time, the mediator thread could block shutdown (and potentially block other jobs from coming in). hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX8Mediator thread no longer blocks for more than 1 second.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM1hr]rh{X8Mediator thread no longer blocks for more than 1 second.rr}r(hAjhNjubaubhZ)r}r(hAUhB}r (hD]hK]hF]hE]hL]uhNjhr]r h)r }r (hAXWith rate limits enabled and when there was a lot of remaining time, the mediator thread could block shutdown (and potentially block other jobs from coming in).r hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM3hr]rh{XWith rate limits enabled and when there was a lot of remaining time, the mediator thread could block shutdown (and potentially block other jobs from coming in).rr}r(hAj hNj ubaubahjj+ubeubh^)r}r(hAX[Remote rate limits was not properly applied (http://github.com/ask/celery/issues/issue/98) hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXZRemote rate limits was not properly applied (http://github.com/ask/celery/issues/issue/98)hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM7hr]r(h{X-Remote rate limits was not properly applied (rr}r(hAX-Remote rate limits was not properly applied (hNjubjC)r}r(hAX,http://github.com/ask/celery/issues/issue/98r hB}r!(Urefurij hE]hF]hD]hK]hL]uhNjhr]r"h{X,http://github.com/ask/celery/issues/issue/98r#r$}r%(hAUhNjubahjjLubh{X)r&}r'(hAX)hNjubeubaubh^)r(}r)(hAXVNow handles exceptions with unicode messages correctly in ``TaskWrapper.on_failure``. hNjhihIhjhhB}r*(hD]hK]hF]hE]hL]uhpNhqhhr]r+h)r,}r-(hAXUNow handles exceptions with unicode messages correctly in ``TaskWrapper.on_failure``.hNj(hihIhjhhB}r.(hD]hK]hF]hE]hL]uhpM:hr]r/(h{X:Now handles exceptions with unicode messages correctly in r0r1}r2(hAX:Now handles exceptions with unicode messages correctly in hNj,ubh)r3}r4(hAX``TaskWrapper.on_failure``hB}r5(hD]hK]hF]hE]hL]uhNj,hr]r6h{XTaskWrapper.on_failurer7r8}r9(hAUhNj3ubahjhubh{X.r:}r;(hAX.hNj,ubeubaubh^)r<}r=(hAXZDatabase backend: ``TaskMeta.result``: default value should be ``None`` not empty string. hNjhihIhjhhB}r>(hD]hK]hF]hE]hL]uhpNhqhhr]r?h)r@}rA(hAXYDatabase backend: ``TaskMeta.result``: default value should be ``None`` not empty string.hNj<hihIhjhhB}rB(hD]hK]hF]hE]hL]uhpM=hr]rC(h{XDatabase backend: rDrE}rF(hAXDatabase backend: hNj@ubh)rG}rH(hAX``TaskMeta.result``hB}rI(hD]hK]hF]hE]hL]uhNj@hr]rJh{XTaskMeta.resultrKrL}rM(hAUhNjGubahjhubh{X: default value should be rNrO}rP(hAX: default value should be hNj@ubh)rQ}rR(hAX``None``hB}rS(hD]hK]hF]hE]hL]uhNj@hr]rTh{XNonerUrV}rW(hAUhNjQubahjhubh{X not empty string.rXrY}rZ(hAX not empty string.hNj@ubeubaubeubeubeubhehd)r[}r\(hAUhNhghihIhjhkhB}r](hD]hK]hF]hE]r^Uid3r_ahL]r`hauhpMhqhhr]ra(ht)rb}rc(hAX 1.0.1 [2010-02-24 07:05 P.M CET]rdhNj[hihIhjhxhB}re(hD]hK]hF]hE]hL]uhpMhqhhr]rfh{X 1.0.1 [2010-02-24 07:05 P.M CET]rgrh}ri(hAjdhNjbubaubha)rj}rk(hAUhNj[hihIhjhhB}rl(hX*hE]hF]hD]hK]hL]uhpMhqhhr]rm(h^)rn}ro(hAXTasks are now acknowledged early instead of late. This is done because messages can only be acked within the same connection channel, so if the connection is lost we would have to refetch the message again to acknowledge it. This might or might not affect you, but mostly those running tasks with a really long execution time are affected, as all tasks that has made it all the way into the pool needs to be executed before the worker can safely terminate (this is at most the number of pool workers, multiplied by the ``CELERYD_PREFETCH_MULTIPLIER`` setting.) We multiply the prefetch count by default to increase the performance at times with bursts of tasks with a short execution time. If this doesn't apply to your use case, you should be able to set the prefetch multiplier to zero, without sacrificing performance. Please note that a patch to :mod:`multiprocessing` is currently being worked on, this patch would enable us to use a better solution, and is scheduled for inclusion in the ``1.2.0`` release. hNjjhihIhjhhB}rp(hD]hK]hF]hE]hL]uhpNhqhhr]rq(h)rr}rs(hAX1Tasks are now acknowledged early instead of late.rthNjnhihIhjhhB}ru(hD]hK]hF]hE]hL]uhpMhr]rvh{X1Tasks are now acknowledged early instead of late.rwrx}ry(hAjthNjrubaubhZ)rz}r{(hAUhB}r|(hD]hK]hF]hE]hL]uhNjnhr]r}(h)r~}r(hAXThis is done because messages can only be acked within the same connection channel, so if the connection is lost we would have to refetch the message again to acknowledge it.rhNjzhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XThis is done because messages can only be acked within the same connection channel, so if the connection is lost we would have to refetch the message again to acknowledge it.rr}r(hAjhNj~ubaubh)r}r(hAXOThis might or might not affect you, but mostly those running tasks with a really long execution time are affected, as all tasks that has made it all the way into the pool needs to be executed before the worker can safely terminate (this is at most the number of pool workers, multiplied by the ``CELERYD_PREFETCH_MULTIPLIER`` setting.)hNjzhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{X&This might or might not affect you, but mostly those running tasks with a really long execution time are affected, as all tasks that has made it all the way into the pool needs to be executed before the worker can safely terminate (this is at most the number of pool workers, multiplied by the rr}r(hAX&This might or might not affect you, but mostly those running tasks with a really long execution time are affected, as all tasks that has made it all the way into the pool needs to be executed before the worker can safely terminate (this is at most the number of pool workers, multiplied by the hNjubh)r}r(hAX``CELERYD_PREFETCH_MULTIPLIER``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XCELERYD_PREFETCH_MULTIPLIERrr}r(hAUhNjubahjhubh{X setting.)rr}r(hAX setting.)hNjubeubh)r}r(hAXWe multiply the prefetch count by default to increase the performance at times with bursts of tasks with a short execution time. If this doesn't apply to your use case, you should be able to set the prefetch multiplier to zero, without sacrificing performance.rhNjzhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XWe multiply the prefetch count by default to increase the performance at times with bursts of tasks with a short execution time. If this doesn't apply to your use case, you should be able to set the prefetch multiplier to zero, without sacrificing performance.rr}r(hAjhNjubaubh)r}r(hAXPlease note that a patch to :mod:`multiprocessing` is currently being worked on, this patch would enable us to use a better solution, and is scheduled for inclusion in the ``1.2.0`` release.hNjzhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XPlease note that a patch to rr}r(hAXPlease note that a patch to hNjubj)r}r(hAX:mod:`multiprocessing`rhNjhihIhjjhB}r(UreftypeXmodjjXmultiprocessingU refdomainXpyrhE]hF]U refexplicithD]hK]hL]jjjNjNuhpMhr]rh)r}r(hAjhB}r(hD]hK]r(j#jXpy-modrehF]hE]hL]uhNjhr]rh{Xmultiprocessingrr}r(hAUhNjubahjhubaubh{Xz is currently being worked on, this patch would enable us to use a better solution, and is scheduled for inclusion in the rr}r(hAXz is currently being worked on, this patch would enable us to use a better solution, and is scheduled for inclusion in the hNjubh)r}r(hAX ``1.2.0``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X1.2.0rr}r(hAUhNjubahjhubh{X release.rr}r(hAX release.hNjubeubehjj+ubeubh^)r}r(hAXAceleryd now shutdowns cleanly when receving the ``TERM`` signal. hNjjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX@celeryd now shutdowns cleanly when receving the ``TERM`` signal.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{X0celeryd now shutdowns cleanly when receving the rr}r(hAX0celeryd now shutdowns cleanly when receving the hNjubh)r}r(hAX``TERM``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XTERMrr}r(hAUhNjubahjhubh{X signal.rr}r(hAX signal.hNjubeubaubh^)r}r(hAXceleryd now does a cold shutdown if the ``INT`` signal is received (Ctrl+C), this means it tries to terminate as soon as possible. hNjjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXceleryd now does a cold shutdown if the ``INT`` signal is received (Ctrl+C), this means it tries to terminate as soon as possible.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{X(celeryd now does a cold shutdown if the rr}r(hAX(celeryd now does a cold shutdown if the hNjubh)r}r(hAX``INT``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XINTrr}r(hAUhNjubahjhubh{XS signal is received (Ctrl+C), this means it tries to terminate as soon as possible.rr}r(hAXS signal is received (Ctrl+C), this means it tries to terminate as soon as possible.hNjubeubaubh^)r}r(hAXzCaching of results now moved to the base backend classes, so no need to implement this functionality in the base classes. hNjjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXyCaching of results now moved to the base backend classes, so no need to implement this functionality in the base classes.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XyCaching of results now moved to the base backend classes, so no need to implement this functionality in the base classes.rr}r(hAjhNjubaubaubh^)r}r(hAXCaches are now also limited in size, so their memory usage doesn't grow out of control. You can set the maximum number of results the cache can hold using the ``CELERY_MAX_CACHED_RESULTS`` setting (the default is five thousand results). In addition, you can refetch already retrieved results using ``backend.reload_task_result`` + ``backend.reload_taskset_result`` (that's for those who want to send results incrementally). hNjjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAXWCaches are now also limited in size, so their memory usage doesn't grow out of control.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XWCaches are now also limited in size, so their memory usage doesn't grow out of control.rr}r(hAjhNjubaubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r (hAXOYou can set the maximum number of results the cache can hold using the ``CELERY_MAX_CACHED_RESULTS`` setting (the default is five thousand results). In addition, you can refetch already retrieved results using ``backend.reload_task_result`` + ``backend.reload_taskset_result`` (that's for those who want to send results incrementally).hNjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r (h{XGYou can set the maximum number of results the cache can hold using the r r }r(hAXGYou can set the maximum number of results the cache can hold using the hNjubh)r}r(hAX``CELERY_MAX_CACHED_RESULTS``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XCELERY_MAX_CACHED_RESULTSrr}r(hAUhNjubahjhubh{Xn setting (the default is five thousand results). In addition, you can refetch already retrieved results using rr}r(hAXn setting (the default is five thousand results). In addition, you can refetch already retrieved results using hNjubh)r}r(hAX``backend.reload_task_result``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xbackend.reload_task_resultrr}r(hAUhNjubahjhubh{X + r r!}r"(hAX + hNjubh)r#}r$(hAX!``backend.reload_taskset_result``hB}r%(hD]hK]hF]hE]hL]uhNjhr]r&h{Xbackend.reload_taskset_resultr'r(}r)(hAUhNj#ubahjhubh{X; (that's for those who want to send results incrementally).r*r+}r,(hAX; (that's for those who want to send results incrementally).hNjubeubahjj+ubeubh^)r-}r.(hAX``celeryd`` now works on Windows again. Note that if running with Django, you can't use ``project.settings`` as the settings module name, but the following should work:: $ python manage.py celeryd --settings=settings hNjjhihIhjhhB}r/(hD]hK]hF]hE]hL]uhpNhqhhr]r0(h)r1}r2(hAX'``celeryd`` now works on Windows again.hNj-hihIhjhhB}r3(hD]hK]hF]hE]hL]uhpMhr]r4(h)r5}r6(hAX ``celeryd``hB}r7(hD]hK]hF]hE]hL]uhNj1hr]r8h{Xcelerydr9r:}r;(hAUhNj5ubahjhubh{X now works on Windows again.r<r=}r>(hAX now works on Windows again.hNj1ubeubhZ)r?}r@(hAUhB}rA(hD]hK]hF]hE]hL]uhNj-hr]rB(h)rC}rD(hAXNote that if running with Django, you can't use ``project.settings`` as the settings module name, but the following should work::hNj?hihIhjhhB}rE(hD]hK]hF]hE]hL]uhpMhr]rF(h{X0Note that if running with Django, you can't use rGrH}rI(hAX0Note that if running with Django, you can't use hNjCubh)rJ}rK(hAX``project.settings``hB}rL(hD]hK]hF]hE]hL]uhNjChr]rMh{Xproject.settingsrNrO}rP(hAUhNjJubahjhubh{X< as the settings module name, but the following should work:rQrR}rS(hAX< as the settings module name, but the following should work:hNjCubeubh)rT}rU(hAX.$ python manage.py celeryd --settings=settingshNj?hjhhB}rV(hhhE]hF]hD]hK]hL]uhpMhr]rWh{X.$ python manage.py celeryd --settings=settingsrXrY}rZ(hAUhNjTubaubehjj+ubeubh^)r[}r\(hAXExecution: ``.messaging.TaskPublisher.send_task`` now incorporates all the functionality apply_async previously did. Like converting countdowns to eta, so :func:`celery.execute.apply_async` is now simply a convenient front-end to :meth:`celery.messaging.TaskPublisher.send_task`, using the task classes default options. Also :func:`celery.execute.send_task` has been introduced, which can apply tasks using just the task name (useful if the client does not have the destination task in its task registry). Example: >>> from celery.execute import send_task >>> result = send_task("celery.ping", args=[], kwargs={}) >>> result.get() 'pong' hNjjhihIhjhhB}r](hD]hK]hF]hE]hL]uhpNhqhhr]r^(h)r_}r`(hAXtExecution: ``.messaging.TaskPublisher.send_task`` now incorporates all the functionality apply_async previously did.hNj[hihIhjhhB}ra(hD]hK]hF]hE]hL]uhpMhr]rb(h{X Execution: rcrd}re(hAX Execution: hNj_ubh)rf}rg(hAX&``.messaging.TaskPublisher.send_task``hB}rh(hD]hK]hF]hE]hL]uhNj_hr]rih{X".messaging.TaskPublisher.send_taskrjrk}rl(hAUhNjfubahjhubh{XC now incorporates all the functionality apply_async previously did.rmrn}ro(hAXC now incorporates all the functionality apply_async previously did.hNj_ubeubhZ)rp}rq(hAUhB}rr(hD]hK]hF]hE]hL]uhNj[hr]rs(h)rt}ru(hAXLike converting countdowns to eta, so :func:`celery.execute.apply_async` is now simply a convenient front-end to :meth:`celery.messaging.TaskPublisher.send_task`, using the task classes default options.hNjphihIhjhhB}rv(hD]hK]hF]hE]hL]uhpMhr]rw(h{X&Like converting countdowns to eta, so rxry}rz(hAX&Like converting countdowns to eta, so hNjtubj)r{}r|(hAX":func:`celery.execute.apply_async`r}hNjthihIhjjhB}r~(UreftypeXfuncjjXcelery.execute.apply_asyncU refdomainXpyrhE]hF]U refexplicithD]hK]hL]jjjNjNuhpMhr]rh)r}r(hAj}hB}r(hD]hK]r(j#jXpy-funcrehF]hE]hL]uhNj{hr]rh{Xcelery.execute.apply_async()rr}r(hAUhNjubahjhubaubh{X) is now simply a convenient front-end to rr}r(hAX) is now simply a convenient front-end to hNjtubj)r}r(hAX0:meth:`celery.messaging.TaskPublisher.send_task`rhNjthihIhjjhB}r(UreftypeXmethjjX(celery.messaging.TaskPublisher.send_taskU refdomainXpyrhE]hF]U refexplicithD]hK]hL]jjjNjNuhpMhr]rh)r}r(hAjhB}r(hD]hK]r(j#jXpy-methrehF]hE]hL]uhNjhr]rh{X*celery.messaging.TaskPublisher.send_task()rr}r(hAUhNjubahjhubaubh{X), using the task classes default options.rr}r(hAX), using the task classes default options.hNjtubeubh)r}r(hAXAlso :func:`celery.execute.send_task` has been introduced, which can apply tasks using just the task name (useful if the client does not have the destination task in its task registry).hNjphihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XAlso rr}r(hAXAlso hNjubj)r}r(hAX :func:`celery.execute.send_task`rhNjhihIhjjhB}r(UreftypeXfuncjjXcelery.execute.send_taskU refdomainXpyrhE]hF]U refexplicithD]hK]hL]jjjNjNuhpMhr]rh)r}r(hAjhB}r(hD]hK]r(j#jXpy-funcrehF]hE]hL]uhNjhr]rh{Xcelery.execute.send_task()rr}r(hAUhNjubahjhubaubh{X has been introduced, which can apply tasks using just the task name (useful if the client does not have the destination task in its task registry).rr}r(hAX has been introduced, which can apply tasks using just the task name (useful if the client does not have the destination task in its task registry).hNjubeubh)r}r(hAXExample:rhNjphihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XExample:rr}r(hAjhNjubaubj)r}r(hAXz>>> from celery.execute import send_task >>> result = send_task("celery.ping", args=[], kwargs={}) >>> result.get() 'pong'hB}r(hhhE]hF]hD]hK]hL]uhNjphr]rh{Xz>>> from celery.execute import send_task >>> result = send_task("celery.ping", args=[], kwargs={}) >>> result.get() 'pong'rr}r(hAUhNjubahjjubehjj+ubeubh^)r}r(hAXp``camqadm``: This is a new utility for command line access to the AMQP API. Excellent for deleting queues/bindings/exchanges, experimentation and testing:: $ camqadm 1> help Gives an interactive shell, type ``help`` for a list of commands. When using Django, use the management command instead:: $ python manage.py camqadm 1> help hNjjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAXK``camqadm``: This is a new utility for command line access to the AMQP API.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h)r}r(hAX ``camqadm``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcamqadmrr}r(hAUhNjubahjhubh{X@: This is a new utility for command line access to the AMQP API.rr}r(hAX@: This is a new utility for command line access to the AMQP API.hNjubeubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]r(h)r}r(hAXOExcellent for deleting queues/bindings/exchanges, experimentation and testing::hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XNExcellent for deleting queues/bindings/exchanges, experimentation and testing:rr}r(hAXNExcellent for deleting queues/bindings/exchanges, experimentation and testing:hNjubaubh)r}r(hAX$ camqadm 1> helphNjhjhhB}r(hhhE]hF]hD]hK]hL]uhpMhr]rh{X$ camqadm 1> helprr}r(hAUhNjubaubh)r}r(hAXAGives an interactive shell, type ``help`` for a list of commands.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{X!Gives an interactive shell, type rr}r(hAX!Gives an interactive shell, type hNjubh)r}r(hAX``help``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xhelprr}r(hAUhNjubahjhubh{X for a list of commands.rr}r(hAX for a list of commands.hNjubeubh)r}r(hAX7When using Django, use the management command instead::hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X6When using Django, use the management command instead:r r }r (hAX6When using Django, use the management command instead:hNjubaubh)r }r (hAX"$ python manage.py camqadm 1> helphNjhjhhB}r (hhhE]hF]hD]hK]hL]uhpMhr]r h{X"$ python manage.py camqadm 1> helpr r }r (hAUhNj ubaubehjj+ubeubh^)r }r (hAXMRedis result backend: To conform to recent Redis API changes, the following settings has been deprecated: * ``REDIS_TIMEOUT`` * ``REDIS_CONNECT_RETRY`` These will emit a ``DeprecationWarning`` if used. A ``REDIS_PASSWORD`` setting has been added, so you can use the new simple authentication mechanism in Redis. hNjjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r (h)r }r (hAXiRedis result backend: To conform to recent Redis API changes, the following settings has been deprecated:r hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r h{XiRedis result backend: To conform to recent Redis API changes, the following settings has been deprecated:r r }r (hAj hNj ubaubhZ)r }r (hAUhB}r (hD]hK]hF]hE]hL]uhNj hr]r (ha)r }r (hAUhB}r (hX*hE]hF]hD]hK]hL]uhNj hr]r (h^)r }r (hAX``REDIS_TIMEOUT``r hB}r! (hD]hK]hF]hE]hL]uhNj hr]r" h)r# }r$ (hAj hNj hihIhjhhB}r% (hD]hK]hF]hE]hL]uhpMhr]r& h)r' }r( (hAj hB}r) (hD]hK]hF]hE]hL]uhNj# hr]r* h{X REDIS_TIMEOUTr+ r, }r- (hAUhNj' ubahjhubaubahjhubh^)r. }r/ (hAX``REDIS_CONNECT_RETRY`` hB}r0 (hD]hK]hF]hE]hL]uhNj hr]r1 h)r2 }r3 (hAX``REDIS_CONNECT_RETRY``r4 hNj. hihIhjhhB}r5 (hD]hK]hF]hE]hL]uhpMhr]r6 h)r7 }r8 (hAj4 hB}r9 (hD]hK]hF]hE]hL]uhNj2 hr]r: h{XREDIS_CONNECT_RETRYr; r< }r= (hAUhNj7 ubahjhubaubahjhubehjhubh)r> }r? (hAX1These will emit a ``DeprecationWarning`` if used.hNj hihIhjhhB}r@ (hD]hK]hF]hE]hL]uhpMhr]rA (h{XThese will emit a rB rC }rD (hAXThese will emit a hNj> ubh)rE }rF (hAX``DeprecationWarning``hB}rG (hD]hK]hF]hE]hL]uhNj> hr]rH h{XDeprecationWarningrI rJ }rK (hAUhNjE ubahjhubh{X if used.rL rM }rN (hAX if used.hNj> ubeubh)rO }rP (hAXmA ``REDIS_PASSWORD`` setting has been added, so you can use the new simple authentication mechanism in Redis.hNj hihIhjhhB}rQ (hD]hK]hF]hE]hL]uhpMhr]rR (h{XA rS rT }rU (hAXA hNjO ubh)rV }rW (hAX``REDIS_PASSWORD``hB}rX (hD]hK]hF]hE]hL]uhNjO hr]rY h{XREDIS_PASSWORDrZ r[ }r\ (hAUhNjV ubahjhubh{XY setting has been added, so you can use the new simple authentication mechanism in Redis.r] r^ }r_ (hAXY setting has been added, so you can use the new simple authentication mechanism in Redis.hNjO ubeubehjj+ubeubh^)r` }ra (hAX|The redis result backend no longer calls ``SAVE`` when disconnecting, as this is apparently better handled by Redis itself. hNjjhihIhjhhB}rb (hD]hK]hF]hE]hL]uhpNhqhhr]rc h)rd }re (hAX{The redis result backend no longer calls ``SAVE`` when disconnecting, as this is apparently better handled by Redis itself.hNj` hihIhjhhB}rf (hD]hK]hF]hE]hL]uhpMhr]rg (h{X)The redis result backend no longer calls rh ri }rj (hAX)The redis result backend no longer calls hNjd ubh)rk }rl (hAX``SAVE``hB}rm (hD]hK]hF]hE]hL]uhNjd hr]rn h{XSAVEro rp }rq (hAUhNjk ubahjhubh{XJ when disconnecting, as this is apparently better handled by Redis itself.rr rs }rt (hAXJ when disconnecting, as this is apparently better handled by Redis itself.hNjd ubeubaubh^)ru }rv (hAX`If ``settings.DEBUG`` is on, celeryd now warns about the possible memory leak it can result in. hNjjhihIhjhhB}rw (hD]hK]hF]hE]hL]uhpNhqhhr]rx h)ry }rz (hAX_If ``settings.DEBUG`` is on, celeryd now warns about the possible memory leak it can result in.hNju hihIhjhhB}r{ (hD]hK]hF]hE]hL]uhpMhr]r| (h{XIf r} r~ }r (hAXIf hNjy ubh)r }r (hAX``settings.DEBUG``hB}r (hD]hK]hF]hE]hL]uhNjy hr]r h{Xsettings.DEBUGr r }r (hAUhNj ubahjhubh{XJ is on, celeryd now warns about the possible memory leak it can result in.r r }r (hAXJ is on, celeryd now warns about the possible memory leak it can result in.hNjy ubeubaubh^)r }r (hAXEThe ETA scheduler now sleeps at most two seconds between iterations. hNjjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAXDThe ETA scheduler now sleeps at most two seconds between iterations.r hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r h{XDThe ETA scheduler now sleeps at most two seconds between iterations.r r }r (hAj hNj ubaubaubh^)r }r (hAXThe ETA scheduler now deletes any revoked tasks it might encounter. As revokes are not yet persistent, this is done to make sure the task is revoked even though it's currently being hold because its eta is e.g. a week into the future. hNjjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r (h)r }r (hAXCThe ETA scheduler now deletes any revoked tasks it might encounter.r hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r h{XCThe ETA scheduler now deletes any revoked tasks it might encounter.r r }r (hAj hNj ubaubhZ)r }r (hAUhB}r (hD]hK]hF]hE]hL]uhNj hr]r h)r }r (hAXAs revokes are not yet persistent, this is done to make sure the task is revoked even though it's currently being hold because its eta is e.g. a week into the future.r hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r h{XAs revokes are not yet persistent, this is done to make sure the task is revoked even though it's currently being hold because its eta is e.g. a week into the future.r r }r (hAj hNj ubaubahjj+ubeubh^)r }r (hAXThe ``task_id`` argument is now respected even if the task is executed eagerly (either using apply, or ``CELERY_ALWAYS_EAGER``). hNjjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAXThe ``task_id`` argument is now respected even if the task is executed eagerly (either using apply, or ``CELERY_ALWAYS_EAGER``).hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r (h{XThe r r }r (hAXThe hNj ubh)r }r (hAX ``task_id``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{Xtask_idr r }r (hAUhNj ubahjhubh{XX argument is now respected even if the task is executed eagerly (either using apply, or r r }r (hAXX argument is now respected even if the task is executed eagerly (either using apply, or hNj ubh)r }r (hAX``CELERY_ALWAYS_EAGER``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{XCELERY_ALWAYS_EAGERr r }r (hAUhNj ubahjhubh{X).r r }r (hAX).hNj ubeubaubh^)r }r (hAX@The internal queues are now cleared if the connection is reset. hNjjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAX?The internal queues are now cleared if the connection is reset.r hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r h{X?The internal queues are now cleared if the connection is reset.r r }r (hAj hNj ubaubaubh^)r }r (hAXNew magic keyword argument: ``delivery_info``. Used by retry() to resend the task to its original destination using the same exchange/routing_key. hNjjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r (h)r }r (hAX.New magic keyword argument: ``delivery_info``.hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r (h{XNew magic keyword argument: r r }r (hAXNew magic keyword argument: hNj ubh)r }r (hAX``delivery_info``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X delivery_infor r }r (hAUhNj ubahjhubh{X.r }r (hAX.hNj ubeubhZ)r }r (hAUhB}r (hD]hK]hF]hE]hL]uhNj hr]r h)r }r (hAXcUsed by retry() to resend the task to its original destination using the same exchange/routing_key.r hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r h{XcUsed by retry() to resend the task to its original destination using the same exchange/routing_key.r r }r (hAj hNj ubaubahjj+ubeubh^)r }r (hAXUEvents: Fields was not passed by ``.send()`` (fixes the uuid keyerrors in celerymon) hNjjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAXTEvents: Fields was not passed by ``.send()`` (fixes the uuid keyerrors in celerymon)hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpM hr]r (h{X!Events: Fields was not passed by r r }r (hAX!Events: Fields was not passed by hNj ubh)r }r (hAX ``.send()``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X.send()r r }r (hAUhNj ubahjhubh{X( (fixes the uuid keyerrors in celerymon)r r }r (hAX( (fixes the uuid keyerrors in celerymon)hNj ubeubaubh^)r }r (hAXAdded ``--schedule``/``-s`` option to celeryd, so it is possible to specify a custom schedule filename when using an embedded celerybeat server (the ``-B``/``--beat``) option. hNjjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAXAdded ``--schedule``/``-s`` option to celeryd, so it is possible to specify a custom schedule filename when using an embedded celerybeat server (the ``-B``/``--beat``) option.hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r (h{XAdded r r }r (hAXAdded hNj ubh)r }r (hAX``--schedule``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X --scheduler r }r (hAUhNj ubahjhubh{X/r }r! (hAX/hNj ubh)r" }r# (hAX``-s``hB}r$ (hD]hK]hF]hE]hL]uhNj hr]r% h{X-sr& r' }r( (hAUhNj" ubahjhubh{Xz option to celeryd, so it is possible to specify a custom schedule filename when using an embedded celerybeat server (the r) r* }r+ (hAXz option to celeryd, so it is possible to specify a custom schedule filename when using an embedded celerybeat server (the hNj ubh)r, }r- (hAX``-B``hB}r. (hD]hK]hF]hE]hL]uhNj hr]r/ h{X-Br0 r1 }r2 (hAUhNj, ubahjhubh{X/r3 }r4 (hAX/hNj ubh)r5 }r6 (hAX ``--beat``hB}r7 (hD]hK]hF]hE]hL]uhNj hr]r8 h{X--beatr9 r: }r; (hAUhNj5 ubahjhubh{X ) option.r< r= }r> (hAX ) option.hNj ubeubaubh^)r? }r@ (hAX<Better Python 2.4 compatibility. The test suite now passes. hNjjhihIhjhhB}rA (hD]hK]hF]hE]hL]uhpNhqhhr]rB h)rC }rD (hAX;Better Python 2.4 compatibility. The test suite now passes.rE hNj? hihIhjhhB}rF (hD]hK]hF]hE]hL]uhpMhr]rG h{X;Better Python 2.4 compatibility. The test suite now passes.rH rI }rJ (hAjE hNjC ubaubaubh^)rK }rL (hAXktask decorators: Now preserve docstring as ``cls.__doc__``, (was previously copied to ``cls.run.__doc__``) hNjjhihIhjhhB}rM (hD]hK]hF]hE]hL]uhpNhqhhr]rN h)rO }rP (hAXjtask decorators: Now preserve docstring as ``cls.__doc__``, (was previously copied to ``cls.run.__doc__``)hNjK hihIhjhhB}rQ (hD]hK]hF]hE]hL]uhpMhr]rR (h{X+task decorators: Now preserve docstring as rS rT }rU (hAX+task decorators: Now preserve docstring as hNjO ubh)rV }rW (hAX``cls.__doc__``hB}rX (hD]hK]hF]hE]hL]uhNjO hr]rY h{X cls.__doc__rZ r[ }r\ (hAUhNjV ubahjhubh{X, (was previously copied to r] r^ }r_ (hAX, (was previously copied to hNjO ubh)r` }ra (hAX``cls.run.__doc__``hB}rb (hD]hK]hF]hE]hL]uhNjO hr]rc h{Xcls.run.__doc__rd re }rf (hAUhNj` ubahjhubh{X)rg }rh (hAX)hNjO ubeubaubh^)ri }rj (hAXThe ``testproj`` directory has been renamed to ``tests`` and we're now using ``nose`` + ``django-nose`` for test discovery, and ``unittest2`` for test cases. hNjjhihIhjhhB}rk (hD]hK]hF]hE]hL]uhpNhqhhr]rl h)rm }rn (hAXThe ``testproj`` directory has been renamed to ``tests`` and we're now using ``nose`` + ``django-nose`` for test discovery, and ``unittest2`` for test cases.hNji hihIhjhhB}ro (hD]hK]hF]hE]hL]uhpMhr]rp (h{XThe rq rr }rs (hAXThe hNjm ubh)rt }ru (hAX ``testproj``hB}rv (hD]hK]hF]hE]hL]uhNjm hr]rw h{Xtestprojrx ry }rz (hAUhNjt ubahjhubh{X directory has been renamed to r{ r| }r} (hAX directory has been renamed to hNjm ubh)r~ }r (hAX ``tests``hB}r (hD]hK]hF]hE]hL]uhNjm hr]r h{Xtestsr r }r (hAUhNj~ ubahjhubh{X and we're now using r r }r (hAX and we're now using hNjm ubh)r }r (hAX``nose``hB}r (hD]hK]hF]hE]hL]uhNjm hr]r h{Xnoser r }r (hAUhNj ubahjhubh{X + r r }r (hAX + hNjm ubh)r }r (hAX``django-nose``hB}r (hD]hK]hF]hE]hL]uhNjm hr]r h{X django-noser r }r (hAUhNj ubahjhubh{X for test discovery, and r r }r (hAX for test discovery, and hNjm ubh)r }r (hAX ``unittest2``hB}r (hD]hK]hF]hE]hL]uhNjm hr]r h{X unittest2r r }r (hAUhNj ubahjhubh{X for test cases.r r }r (hAX for test cases.hNjm ubeubaubh^)r }r (hAXBNew pip requirements files available in ``contrib/requirements``. hNjjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAXANew pip requirements files available in ``contrib/requirements``.hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r (h{X(New pip requirements files available in r r }r (hAX(New pip requirements files available in hNj ubh)r }r (hAX``contrib/requirements``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{Xcontrib/requirementsr r }r (hAUhNj ubahjhubh{X.r }r (hAX.hNj ubeubaubh^)r }r (hAX=TaskPublisher: Declarations are now done once (per process). hNjjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAX<TaskPublisher: Declarations are now done once (per process).r hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r h{X<TaskPublisher: Declarations are now done once (per process).r r }r (hAj hNj ubaubaubh^)r }r (hAXAdded ``Task.delivery_mode`` and the ``CELERY_DEFAULT_DELIVERY_MODE`` setting. These can be used to mark messages non-persistent (i.e. so they are lost if the broker is restarted). hNjjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r (h)r }r (hAXNAdded ``Task.delivery_mode`` and the ``CELERY_DEFAULT_DELIVERY_MODE`` setting.hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r (h{XAdded r r }r (hAXAdded hNj ubh)r }r (hAX``Task.delivery_mode``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{XTask.delivery_moder r }r (hAUhNj ubahjhubh{X and the r r }r (hAX and the hNj ubh)r }r (hAX ``CELERY_DEFAULT_DELIVERY_MODE``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{XCELERY_DEFAULT_DELIVERY_MODEr r }r (hAUhNj ubahjhubh{X setting.r r }r (hAX setting.hNj ubeubhZ)r }r (hAUhB}r (hD]hK]hF]hE]hL]uhNj hr]r h)r }r (hAXeThese can be used to mark messages non-persistent (i.e. so they are lost if the broker is restarted).r hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpM"hr]r h{XeThese can be used to mark messages non-persistent (i.e. so they are lost if the broker is restarted).r r }r (hAj hNj ubaubahjj+ubeubh^)r }r (hAXVNow have our own ``ImproperlyConfigured`` exception, instead of using the Django one. hNjjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAXUNow have our own ``ImproperlyConfigured`` exception, instead of using the Django one.hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpM%hr]r (h{XNow have our own r r }r (hAXNow have our own hNj ubh)r }r (hAX``ImproperlyConfigured``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{XImproperlyConfiguredr r }r (hAUhNj ubahjhubh{X, exception, instead of using the Django one.r r }r (hAX, exception, instead of using the Django one.hNj ubeubaubh^)r }r (hAXImprovements to the debian init scripts: Shows an error if the program is not executeable. Does not modify ``CELERYD`` when using django with virtualenv. hNjjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAXImprovements to the debian init scripts: Shows an error if the program is not executeable. Does not modify ``CELERYD`` when using django with virtualenv.hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpM(hr]r (h{XkImprovements to the debian init scripts: Shows an error if the program is not executeable. Does not modify r r }r (hAXkImprovements to the debian init scripts: Shows an error if the program is not executeable. Does not modify hNj ubh)r }r (hAX ``CELERYD``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{XCELERYDr r }r (hAUhNj ubahjhubh{X# when using django with virtualenv.r r }r (hAX# when using django with virtualenv.hNj ubeubaubeubeubhd)r }r (hAUhNhghihIhjhkhB}r (hD]hK]hF]hE]r Uid4r ahL]r h)auhpM-hqhhr]r! (ht)r" }r# (hAX 1.0.0 [2010-02-10 04:00 P.M CET]r$ hNj hihIhjhxhB}r% (hD]hK]hF]hE]hL]uhpM-hqhhr]r& h{X 1.0.0 [2010-02-10 04:00 P.M CET]r' r( }r) (hAj$ hNj" ubaubhd)r* }r+ (hAUjKhNj hihIhjhkhB}r, (hD]r- Xbackward incompatible changesr. ahK]hF]hE]r/ Ubackward-incompatible-changesr0 ahL]uhpM0hqhhr]r1 (ht)r2 }r3 (hAXBACKWARD INCOMPATIBLE CHANGESr4 hNj* hihIhjhxhB}r5 (hD]hK]hF]hE]hL]uhpM0hqhhr]r6 h{XBACKWARD INCOMPATIBLE CHANGESr7 r8 }r9 (hAj4 hNj2 ubaubha)r: }r; (hAUhNj* hihIhjhhB}r< (hX*hE]hF]hD]hK]hL]uhpM2hqhhr]r= (h^)r> }r? (hAXjCelery does not support detaching anymore, so you have to use the tools available on your platform, or something like supervisord to make celeryd/celerybeat/celerymon into background processes. We've had too many problems with celeryd daemonizing itself, so it was decided it has to be removed. Example startup scripts has been added to ``contrib/``: * Debian, Ubuntu, (start-stop-daemon) ``contrib/debian/init.d/celeryd`` ``contrib/debian/init.d/celerybeat`` * Mac OS X launchd ``contrib/mac/org.celeryq.celeryd.plist`` ``contrib/mac/org.celeryq.celerybeat.plist`` ``contrib/mac/org.celeryq.celerymon.plist`` * Supervisord (http://supervisord.org) ``contrib/supervisord/supervisord.conf`` In addition to ``--detach``, the following program arguments has been removed: ``--uid``, ``--gid``, ``--workdir``, ``--chroot``, ``--pidfile``, ``--umask``. All good daemonization tools should support equivalent functionality, so don't worry. Also the following configuration keys has been removed: ``CELERYD_PID_FILE``, ``CELERYBEAT_PID_FILE``, ``CELERYMON_PID_FILE``. hNj: hihIhjhhB}r@ (hD]hK]hF]hE]hL]uhpNhqhhr]rA (h)rB }rC (hAXCelery does not support detaching anymore, so you have to use the tools available on your platform, or something like supervisord to make celeryd/celerybeat/celerymon into background processes.rD hNj> hihIhjhhB}rE (hD]hK]hF]hE]hL]uhpM2hr]rF h{XCelery does not support detaching anymore, so you have to use the tools available on your platform, or something like supervisord to make celeryd/celerybeat/celerymon into background processes.rG rH }rI (hAjD hNjB ubaubhZ)rJ }rK (hAUhB}rL (hD]hK]hF]hE]hL]uhNj> hr]rM (h)rN }rO (hAXWe've had too many problems with celeryd daemonizing itself, so it was decided it has to be removed. Example startup scripts has been added to ``contrib/``:hNjJ hihIhjhhB}rP (hD]hK]hF]hE]hL]uhpM6hr]rQ (h{XWe've had too many problems with celeryd daemonizing itself, so it was decided it has to be removed. Example startup scripts has been added to rR rS }rT (hAXWe've had too many problems with celeryd daemonizing itself, so it was decided it has to be removed. Example startup scripts has been added to hNjN ubh)rU }rV (hAX ``contrib/``hB}rW (hD]hK]hF]hE]hL]uhNjN hr]rX h{Xcontrib/rY rZ }r[ (hAUhNjU ubahjhubh{X:r\ }r] (hAX:hNjN ubeubha)r^ }r_ (hAUhB}r` (hX*hE]hF]hD]hK]hL]uhNjJ hr]ra (h^)rb }rc (hAXpDebian, Ubuntu, (start-stop-daemon) ``contrib/debian/init.d/celeryd`` ``contrib/debian/init.d/celerybeat`` hB}rd (hD]hK]hF]hE]hL]uhNj^ hr]re (h)rf }rg (hAX#Debian, Ubuntu, (start-stop-daemon)rh hNjb hihIhjhhB}ri (hD]hK]hF]hE]hL]uhpM:hr]rj h{X#Debian, Ubuntu, (start-stop-daemon)rk rl }rm (hAjh hNjf ubaubhZ)rn }ro (hAUhB}rp (hD]hK]hF]hE]hL]uhNjb hr]rq h)rr }rs (hAXF``contrib/debian/init.d/celeryd`` ``contrib/debian/init.d/celerybeat``hNjn hihIhjhhB}rt (hD]hK]hF]hE]hL]uhpM<hr]ru (h)rv }rw (hAX!``contrib/debian/init.d/celeryd``hB}rx (hD]hK]hF]hE]hL]uhNjr hr]ry h{Xcontrib/debian/init.d/celerydrz r{ }r| (hAUhNjv ubahjhubh{X r} }r~ (hAX hNjr ubh)r }r (hAX$``contrib/debian/init.d/celerybeat``hB}r (hD]hK]hF]hE]hL]uhNjr hr]r h{X contrib/debian/init.d/celerybeatr r }r (hAUhNj ubahjhubeubahjj+ubehjhubh^)r }r (hAXMac OS X launchd ``contrib/mac/org.celeryq.celeryd.plist`` ``contrib/mac/org.celeryq.celerybeat.plist`` ``contrib/mac/org.celeryq.celerymon.plist`` hB}r (hD]hK]hF]hE]hL]uhNj^ hr]r (h)r }r (hAXMac OS X launchdr hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpM?hr]r h{XMac OS X launchdr r }r (hAj hNj ubaubhZ)r }r (hAUhB}r (hD]hK]hF]hE]hL]uhNj hr]r h)r }r (hAX``contrib/mac/org.celeryq.celeryd.plist`` ``contrib/mac/org.celeryq.celerybeat.plist`` ``contrib/mac/org.celeryq.celerymon.plist``hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMAhr]r (h)r }r (hAX)``contrib/mac/org.celeryq.celeryd.plist``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X%contrib/mac/org.celeryq.celeryd.plistr r }r (hAUhNj ubahjhubh{X r }r (hAX hNj ubh)r }r (hAX,``contrib/mac/org.celeryq.celerybeat.plist``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X(contrib/mac/org.celeryq.celerybeat.plistr r }r (hAUhNj ubahjhubh{X r }r (hAX hNj ubh)r }r (hAX+``contrib/mac/org.celeryq.celerymon.plist``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X'contrib/mac/org.celeryq.celerymon.plistr r }r (hAUhNj ubahjhubeubahjj+ubehjhubh^)r }r (hAXQSupervisord (http://supervisord.org) ``contrib/supervisord/supervisord.conf`` hB}r (hD]hK]hF]hE]hL]uhNj^ hr]r (h)r }r (hAX$Supervisord (http://supervisord.org)hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMEhr]r (h{X Supervisord (r r }r (hAX Supervisord (hNj ubjC)r }r (hAXhttp://supervisord.orgr hB}r (Urefurij hE]hF]hD]hK]hL]uhNj hr]r h{Xhttp://supervisord.orgr r }r (hAUhNj ubahjjLubh{X)r }r (hAX)hNj ubeubhZ)r }r (hAUhB}r (hD]hK]hF]hE]hL]uhNj hr]r h)r }r (hAX(``contrib/supervisord/supervisord.conf``r hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMGhr]r h)r }r (hAj hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X$contrib/supervisord/supervisord.confr r }r (hAUhNj ubahjhubaubahjj+ubehjhubehjhubh)r }r (hAXIn addition to ``--detach``, the following program arguments has been removed: ``--uid``, ``--gid``, ``--workdir``, ``--chroot``, ``--pidfile``, ``--umask``. All good daemonization tools should support equivalent functionality, so don't worry.hNjJ hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMIhr]r (h{XIn addition to r r }r (hAXIn addition to hNj ubh)r }r (hAX ``--detach``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X--detachr r }r (hAUhNj ubahjhubh{X4, the following program arguments has been removed: r r }r (hAX4, the following program arguments has been removed: hNj ubh)r }r (hAX ``--uid``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X--uidr r }r (hAUhNj ubahjhubh{X, r r }r (hAX, hNj ubh)r }r (hAX ``--gid``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X--gidr r }r (hAUhNj ubahjhubh{X, r r }r (hAX, hNj ubh)r }r (hAX ``--workdir``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X --workdirr r }r (hAUhNj ubahjhubh{X, r r }r (hAX, hNj ubh)r }r (hAX ``--chroot``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X--chrootr r }r (hAUhNj ubahjhubh{X, r r }r (hAX, hNj ubh)r }r (hAX ``--pidfile``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X --pidfiler r }r (hAUhNj ubahjhubh{X, r r }r (hAX, hNj ubh)r }r (hAX ``--umask``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X--umaskr r }r! (hAUhNj ubahjhubh{XW. All good daemonization tools should support equivalent functionality, so don't worry.r" r# }r$ (hAXW. All good daemonization tools should support equivalent functionality, so don't worry.hNj ubeubh)r% }r& (hAX~Also the following configuration keys has been removed: ``CELERYD_PID_FILE``, ``CELERYBEAT_PID_FILE``, ``CELERYMON_PID_FILE``.hNjJ hihIhjhhB}r' (hD]hK]hF]hE]hL]uhpMNhr]r( (h{X8Also the following configuration keys has been removed: r) r* }r+ (hAX8Also the following configuration keys has been removed: hNj% ubh)r, }r- (hAX``CELERYD_PID_FILE``hB}r. (hD]hK]hF]hE]hL]uhNj% hr]r/ h{XCELERYD_PID_FILEr0 r1 }r2 (hAUhNj, ubahjhubh{X, r3 r4 }r5 (hAX, hNj% ubh)r6 }r7 (hAX``CELERYBEAT_PID_FILE``hB}r8 (hD]hK]hF]hE]hL]uhNj% hr]r9 h{XCELERYBEAT_PID_FILEr: r; }r< (hAUhNj6 ubahjhubh{X, r= r> }r? (hAX, hNj% ubh)r@ }rA (hAX``CELERYMON_PID_FILE``hB}rB (hD]hK]hF]hE]hL]uhNj% hr]rC h{XCELERYMON_PID_FILErD rE }rF (hAUhNj@ ubahjhubh{X.rG }rH (hAX.hNj% ubeubehjj+ubeubh^)rI }rJ (hAXsDefault celeryd loglevel is now ``WARN``, to enable the previous log level start celeryd with ``--loglevel=INFO``. hNj: hihIhjhhB}rK (hD]hK]hF]hE]hL]uhpNhqhhr]rL h)rM }rN (hAXrDefault celeryd loglevel is now ``WARN``, to enable the previous log level start celeryd with ``--loglevel=INFO``.hNjI hihIhjhhB}rO (hD]hK]hF]hE]hL]uhpMQhr]rP (h{X Default celeryd loglevel is now rQ rR }rS (hAX Default celeryd loglevel is now hNjM ubh)rT }rU (hAX``WARN``hB}rV (hD]hK]hF]hE]hL]uhNjM hr]rW h{XWARNrX rY }rZ (hAUhNjT ubahjhubh{X6, to enable the previous log level start celeryd with r[ r\ }r] (hAX6, to enable the previous log level start celeryd with hNjM ubh)r^ }r_ (hAX``--loglevel=INFO``hB}r` (hD]hK]hF]hE]hL]uhNjM hr]ra h{X--loglevel=INFOrb rc }rd (hAUhNj^ ubahjhubh{X.re }rf (hAX.hNjM ubeubaubh^)rg }rh (hAX;Tasks are automatically registered. This means you no longer have to register your tasks manually. You don't have to change your old code right away, as it doesn't matter if a task is registered twice. If you don't want your task to be automatically registered you can set the ``abstract`` attribute .. code-block:: python class MyTask(Task): abstract = True By using ``abstract`` only tasks subclassing this task will be automatically registered (this works like the Django ORM). If you don't want subclasses to be registered either, you can set the ``autoregister`` attribute to ``False``. Incidentally, this change also fixes the problems with automatic name assignment and relative imports. So you also don't have to specify a task name anymore if you use relative imports. hNj: hihIhjhhB}ri (hD]hK]hF]hE]hL]uhpNhqhhr]rj (h)rk }rl (hAX#Tasks are automatically registered.rm hNjg hihIhjhhB}rn (hD]hK]hF]hE]hL]uhpMThr]ro h{X#Tasks are automatically registered.rp rq }rr (hAjm hNjk ubaubhZ)rs }rt (hAUhB}ru (hD]hK]hF]hE]hL]uhNjg hr]rv (h)rw }rx (hAXThis means you no longer have to register your tasks manually. You don't have to change your old code right away, as it doesn't matter if a task is registered twice.ry hNjs hihIhjhhB}rz (hD]hK]hF]hE]hL]uhpMVhr]r{ h{XThis means you no longer have to register your tasks manually. You don't have to change your old code right away, as it doesn't matter if a task is registered twice.r| r} }r~ (hAjy hNjw ubaubh)r }r (hAXaIf you don't want your task to be automatically registered you can set the ``abstract`` attributehNjs hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMZhr]r (h{XKIf you don't want your task to be automatically registered you can set the r r }r (hAXKIf you don't want your task to be automatically registered you can set the hNj ubh)r }r (hAX ``abstract``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{Xabstractr r }r (hAUhNj ubahjhubh{X attributer r }r (hAX attributehNj ubeubh)r }r (hAX'class MyTask(Task): abstract = TruehNjs hihIhjhhB}r (jDjEXpythonhhhE]hF]hD]hK]hL]uhpM]hr]r h{X'class MyTask(Task): abstract = Truer r }r (hAUhNj ubaubh)r }r (hAXyBy using ``abstract`` only tasks subclassing this task will be automatically registered (this works like the Django ORM).hNjs hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMbhr]r (h{X By using r r }r (hAX By using hNj ubh)r }r (hAX ``abstract``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{Xabstractr r }r (hAUhNj ubahjhubh{Xd only tasks subclassing this task will be automatically registered (this works like the Django ORM).r r }r (hAXd only tasks subclassing this task will be automatically registered (this works like the Django ORM).hNj ubeubh)r }r (hAXnIf you don't want subclasses to be registered either, you can set the ``autoregister`` attribute to ``False``.hNjs hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMehr]r (h{XFIf you don't want subclasses to be registered either, you can set the r r }r (hAXFIf you don't want subclasses to be registered either, you can set the hNj ubh)r }r (hAX``autoregister``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X autoregisterr r }r (hAUhNj ubahjhubh{X attribute to r r }r (hAX attribute to hNj ubh)r }r (hAX ``False``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{XFalser r }r (hAUhNj ubahjhubh{X.r }r (hAX.hNj ubeubh)r }r (hAXIncidentally, this change also fixes the problems with automatic name assignment and relative imports. So you also don't have to specify a task name anymore if you use relative imports.r hNjs hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhhr]r h{XIncidentally, this change also fixes the problems with automatic name assignment and relative imports. So you also don't have to specify a task name anymore if you use relative imports.r r }r (hAj hNj ubaubehjj+ubeubh^)r }r (hAXYou can no longer use regular functions as tasks. This change was added because it makes the internals a lot more clean and simple. However, you can now turn functions into tasks by using the ``@task`` decorator: .. code-block:: python from celery.decorators import task @task def add(x, y): return x + y See the User Guide: :doc:`userguide/tasks` for more information. hNj: hihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r (h)r }r (hAX1You can no longer use regular functions as tasks.r hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMlhr]r h{X1You can no longer use regular functions as tasks.r r }r (hAj hNj ubaubhZ)r }r (hAUhB}r (hD]hK]hF]hE]hL]uhNj hr]r (h)r }r (hAXThis change was added because it makes the internals a lot more clean and simple. However, you can now turn functions into tasks by using the ``@task`` decorator:hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMnhr]r (h{XThis change was added because it makes the internals a lot more clean and simple. However, you can now turn functions into tasks by using the r r }r (hAXThis change was added because it makes the internals a lot more clean and simple. However, you can now turn functions into tasks by using the hNj ubh)r }r (hAX ``@task``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X@taskr r }r (hAUhNj ubahjhubh{X decorator:r r }r (hAX decorator:hNj ubeubh)r }r (hAXIfrom celery.decorators import task @task def add(x, y): return x + yhNj hihIhjhhB}r (jDjEXpythonhhhE]hF]hD]hK]hL]uhpMrhr]r h{XIfrom celery.decorators import task @task def add(x, y): return x + yr r }r (hAUhNj ubaubh)r }r (hAX@See the User Guide: :doc:`userguide/tasks` for more information.hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMzhr]r (h{XSee the User Guide: r r }r (hAXSee the User Guide: hNj ubj)r }r (hAX:doc:`userguide/tasks`r hNj hihIhjjhB}r (UreftypeXdocr jjXuserguide/tasksU refdomainUhE]hF]U refexplicithD]hK]hL]jjuhpMzhr]r h)r }r (hAj hB}r (hD]hK]r (j#j ehF]hE]hL]uhNj hr]r h{Xuserguide/tasksr r }r (hAUhNj ubahjhubaubh{X for more information.r r }r (hAX for more information.hNj ubeubehjj+ubeubh^)r }r (hAX!The periodic task system has been rewritten to a centralized solution. This means ``celeryd`` no longer schedules periodic tasks by default, but a new daemon has been introduced: ``celerybeat``. To launch the periodic task scheduler you have to run celerybeat:: $ celerybeat Make sure this is running on one server only, if you run it twice, all periodic tasks will also be executed twice. If you only have one worker server you can embed it into celeryd like this:: $ celeryd --beat # Embed celerybeat in celeryd. hNj: hihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r (h)r }r (hAXFThe periodic task system has been rewritten to a centralized solution.r hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpM|hr]r h{XFThe periodic task system has been rewritten to a centralized solution.r r }r (hAj hNj ubaubhZ)r }r (hAUhB}r (hD]hK]hF]hE]hL]uhNj hr]r (h)r }r (hAX{This means ``celeryd`` no longer schedules periodic tasks by default, but a new daemon has been introduced: ``celerybeat``.hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpM~hr]r (h{X This means r r }r (hAX This means hNj ubh)r! }r" (hAX ``celeryd``hB}r# (hD]hK]hF]hE]hL]uhNj hr]r$ h{Xcelerydr% r& }r' (hAUhNj! ubahjhubh{XV no longer schedules periodic tasks by default, but a new daemon has been introduced: r( r) }r* (hAXV no longer schedules periodic tasks by default, but a new daemon has been introduced: hNj ubh)r+ }r, (hAX``celerybeat``hB}r- (hD]hK]hF]hE]hL]uhNj hr]r. h{X celerybeatr/ r0 }r1 (hAUhNj+ ubahjhubh{X.r2 }r3 (hAX.hNj ubeubh)r4 }r5 (hAXBTo launch the periodic task scheduler you have to run celerybeat::hNj hihIhjhhB}r6 (hD]hK]hF]hE]hL]uhpMhr]r7 h{XATo launch the periodic task scheduler you have to run celerybeat:r8 r9 }r: (hAXATo launch the periodic task scheduler you have to run celerybeat:hNj4 ubaubh)r; }r< (hAX $ celerybeathNj hjhhB}r= (hhhE]hF]hD]hK]hL]uhpMhr]r> h{X $ celerybeatr? r@ }rA (hAUhNj; ubaubh)rB }rC (hAXrMake sure this is running on one server only, if you run it twice, all periodic tasks will also be executed twice.rD hNj hihIhjhhB}rE (hD]hK]hF]hE]hL]uhpMhr]rF h{XrMake sure this is running on one server only, if you run it twice, all periodic tasks will also be executed twice.rG rH }rI (hAjD hNjB ubaubh)rJ }rK (hAXLIf you only have one worker server you can embed it into celeryd like this::hNj hihIhjhhB}rL (hD]hK]hF]hE]hL]uhpMhr]rM h{XKIf you only have one worker server you can embed it into celeryd like this:rN rO }rP (hAXKIf you only have one worker server you can embed it into celeryd like this:hNjJ ubaubh)rQ }rR (hAX/$ celeryd --beat # Embed celerybeat in celeryd.hNj hjhhB}rS (hhhE]hF]hD]hK]hL]uhpMhr]rT h{X/$ celeryd --beat # Embed celerybeat in celeryd.rU rV }rW (hAUhNjQ ubaubehjj+ubeubh^)rX }rY (hAXThe supervisor has been removed. This means the ``-S`` and ``--supervised`` options to ``celeryd`` is no longer supported. Please use something like http://supervisord.org instead. hNj: hihIhjhhB}rZ (hD]hK]hF]hE]hL]uhpNhqhhr]r[ (h)r\ }r] (hAX The supervisor has been removed.r^ hNjX hihIhjhhB}r_ (hD]hK]hF]hE]hL]uhpMhr]r` h{X The supervisor has been removed.ra rb }rc (hAj^ hNj\ ubaubhZ)rd }re (hAUhB}rf (hD]hK]hF]hE]hL]uhNjX hr]rg h)rh }ri (hAXThis means the ``-S`` and ``--supervised`` options to ``celeryd`` is no longer supported. Please use something like http://supervisord.org instead.hNjd hihIhjhhB}rj (hD]hK]hF]hE]hL]uhpMhr]rk (h{XThis means the rl rm }rn (hAXThis means the hNjh ubh)ro }rp (hAX``-S``hB}rq (hD]hK]hF]hE]hL]uhNjh hr]rr h{X-Srs rt }ru (hAUhNjo ubahjhubh{X and rv rw }rx (hAX and hNjh ubh)ry }rz (hAX``--supervised``hB}r{ (hD]hK]hF]hE]hL]uhNjh hr]r| h{X --supervisedr} r~ }r (hAUhNjy ubahjhubh{X options to r r }r (hAX options to hNjh ubh)r }r (hAX ``celeryd``hB}r (hD]hK]hF]hE]hL]uhNjh hr]r h{Xcelerydr r }r (hAUhNj ubahjhubh{X3 is no longer supported. Please use something like r r }r (hAX3 is no longer supported. Please use something like hNjh ubjC)r }r (hAXhttp://supervisord.orgr hB}r (Urefurij hE]hF]hD]hK]hL]uhNjh hr]r h{Xhttp://supervisord.orgr r }r (hAUhNj ubahjjLubh{X instead.r r }r (hAX instead.hNjh ubeubahjj+ubeubh^)r }r (hAXG``TaskSet.join`` has been removed, use ``TaskSetResult.join`` instead. hNj: hihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAXF``TaskSet.join`` has been removed, use ``TaskSetResult.join`` instead.hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r (h)r }r (hAX``TaskSet.join``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X TaskSet.joinr r }r (hAUhNj ubahjhubh{X has been removed, use r r }r (hAX has been removed, use hNj ubh)r }r (hAX``TaskSetResult.join``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{XTaskSetResult.joinr r }r (hAUhNj ubahjhubh{X instead.r r }r (hAX instead.hNj ubeubaubh^)r }r (hAX<The task status ``"DONE"`` has been renamed to `"SUCCESS"`. hNj: hihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAX;The task status ``"DONE"`` has been renamed to `"SUCCESS"`.hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r (h{XThe task status r r }r (hAXThe task status hNj ubh)r }r (hAX ``"DONE"``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X"DONE"r r }r (hAUhNj ubahjhubh{X has been renamed to r r }r (hAX has been renamed to hNj ubcdocutils.nodes title_reference r )r }r (hAX `"SUCCESS"`hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X "SUCCESS"r r }r (hAUhNj ubahjUtitle_referencer ubh{X.r }r (hAX.hNj ubeubaubh^)r }r (hAXR``AsyncResult.is_done`` has been removed, use ``AsyncResult.successful`` instead. hNj: hihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAXQ``AsyncResult.is_done`` has been removed, use ``AsyncResult.successful`` instead.hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r (h)r }r (hAX``AsyncResult.is_done``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{XAsyncResult.is_doner r }r (hAUhNj ubahjhubh{X has been removed, use r r }r (hAX has been removed, use hNj ubh)r }r (hAX``AsyncResult.successful``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{XAsyncResult.successfulr r }r (hAUhNj ubahjhubh{X instead.r r }r (hAX instead.hNj ubeubaubh^)r }r (hAXThe worker no longer stores errors if ``Task.ignore_result`` is set, to revert to the previous behaviour set ``CELERY_STORE_ERRORS_EVEN_IF_IGNORED`` to ``True``. hNj: hihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAXThe worker no longer stores errors if ``Task.ignore_result`` is set, to revert to the previous behaviour set ``CELERY_STORE_ERRORS_EVEN_IF_IGNORED`` to ``True``.hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r (h{X&The worker no longer stores errors if r r }r (hAX&The worker no longer stores errors if hNj ubh)r }r (hAX``Task.ignore_result``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{XTask.ignore_resultr r}r(hAUhNj ubahjhubh{X1 is set, to revert to the previous behaviour set rr}r(hAX1 is set, to revert to the previous behaviour set hNj ubh)r}r(hAX'``CELERY_STORE_ERRORS_EVEN_IF_IGNORED``hB}r(hD]hK]hF]hE]hL]uhNj hr]rh{X#CELERY_STORE_ERRORS_EVEN_IF_IGNOREDr r }r (hAUhNjubahjhubh{X to r r }r(hAX to hNj ubh)r}r(hAX``True``hB}r(hD]hK]hF]hE]hL]uhNj hr]rh{XTruerr}r(hAUhNjubahjhubh{X.r}r(hAX.hNj ubeubaubh^)r}r(hAXThe staticstics functionality has been removed in favor of events, so the ``-S`` and ``--statistics`` switches has been removed. hNj: hihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXThe staticstics functionality has been removed in favor of events, so the ``-S`` and ``--statistics`` switches has been removed.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XJThe staticstics functionality has been removed in favor of events, so the r r!}r"(hAXJThe staticstics functionality has been removed in favor of events, so the hNjubh)r#}r$(hAX``-S``hB}r%(hD]hK]hF]hE]hL]uhNjhr]r&h{X-Sr'r(}r)(hAUhNj#ubahjhubh{X and r*r+}r,(hAX and hNjubh)r-}r.(hAX``--statistics``hB}r/(hD]hK]hF]hE]hL]uhNjhr]r0h{X --statisticsr1r2}r3(hAUhNj-ubahjhubh{X switches has been removed.r4r5}r6(hAX switches has been removed.hNjubeubaubh^)r7}r8(hAX6The module ``celery.task.strategy`` has been removed. hNj: hihIhjhhB}r9(hD]hK]hF]hE]hL]uhpNhqhhr]r:h)r;}r<(hAX5The module ``celery.task.strategy`` has been removed.hNj7hihIhjhhB}r=(hD]hK]hF]hE]hL]uhpMhr]r>(h{X The module r?r@}rA(hAX The module hNj;ubh)rB}rC(hAX``celery.task.strategy``hB}rD(hD]hK]hF]hE]hL]uhNj;hr]rEh{Xcelery.task.strategyrFrG}rH(hAUhNjBubahjhubh{X has been removed.rIrJ}rK(hAX has been removed.hNj;ubeubaubh^)rL}rM(hAX``celery.discovery`` has been removed, and it's ``autodiscover`` function is now in ``celery.loaders.djangoapp``. Reason: Internal API. hNj: hihIhjhhB}rN(hD]hK]hF]hE]hL]uhpNhqhhr]rOh)rP}rQ(hAX``celery.discovery`` has been removed, and it's ``autodiscover`` function is now in ``celery.loaders.djangoapp``. Reason: Internal API.hNjLhihIhjhhB}rR(hD]hK]hF]hE]hL]uhpMhr]rS(h)rT}rU(hAX``celery.discovery``hB}rV(hD]hK]hF]hE]hL]uhNjPhr]rWh{Xcelery.discoveryrXrY}rZ(hAUhNjTubahjhubh{X has been removed, and it's r[r\}r](hAX has been removed, and it's hNjPubh)r^}r_(hAX``autodiscover``hB}r`(hD]hK]hF]hE]hL]uhNjPhr]rah{X autodiscoverrbrc}rd(hAUhNj^ubahjhubh{X function is now in rerf}rg(hAX function is now in hNjPubh)rh}ri(hAX``celery.loaders.djangoapp``hB}rj(hD]hK]hF]hE]hL]uhNjPhr]rkh{Xcelery.loaders.djangoapprlrm}rn(hAUhNjhubahjhubh{X. Reason: Internal API.rorp}rq(hAX. Reason: Internal API.hNjPubeubaubh^)rr}rs(hAX``CELERY_LOADER`` now needs loader class name in addition to module name, E.g. where you previously had: ``"celery.loaders.default"``, you now need ``"celery.loaders.default.Loader"``, using the previous syntax will result in a DeprecationWarning. hNj: hihIhjhhB}rt(hD]hK]hF]hE]hL]uhpNhqhhr]ru(h)rv}rw(hAXI``CELERY_LOADER`` now needs loader class name in addition to module name,hNjrhihIhjhhB}rx(hD]hK]hF]hE]hL]uhpMhr]ry(h)rz}r{(hAX``CELERY_LOADER``hB}r|(hD]hK]hF]hE]hL]uhNjvhr]r}h{X CELERY_LOADERr~r}r(hAUhNjzubahjhubh{X8 now needs loader class name in addition to module name,rr}r(hAX8 now needs loader class name in addition to module name,hNjvubeubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjrhr]rh)r}r(hAXE.g. where you previously had: ``"celery.loaders.default"``, you now need ``"celery.loaders.default.Loader"``, using the previous syntax will result in a DeprecationWarning.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XE.g. where you previously had: rr}r(hAXE.g. where you previously had: hNjubh)r}r(hAX``"celery.loaders.default"``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X"celery.loaders.default"rr}r(hAUhNjubahjhubh{X, you now need rr}r(hAX, you now need hNjubh)r}r(hAX#``"celery.loaders.default.Loader"``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X"celery.loaders.default.Loader"rr}r(hAUhNjubahjhubh{X@, using the previous syntax will result in a DeprecationWarning.rr}r(hAX@, using the previous syntax will result in a DeprecationWarning.hNjubeubahjj+ubeubh^)r}r(hAXDetecting the loader is now lazy, and so is not done when importing ``celery.loaders``. To make this happen ``celery.loaders.settings`` has been renamed to ``load_settings`` and is now a function returning the settings object. ``celery.loaders.current_loader`` is now also a function, returning the current loader. So:: loader = current_loader needs to be changed to:: loader = current_loader() hNj: hihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAXWDetecting the loader is now lazy, and so is not done when importing ``celery.loaders``.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XDDetecting the loader is now lazy, and so is not done when importing rr}r(hAXDDetecting the loader is now lazy, and so is not done when importing hNjubh)r}r(hAX``celery.loaders``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcelery.loadersrr}r(hAUhNjubahjhubh{X.r}r(hAX.hNjubeubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]r(h)r}r(hAXTo make this happen ``celery.loaders.settings`` has been renamed to ``load_settings`` and is now a function returning the settings object. ``celery.loaders.current_loader`` is now also a function, returning the current loader.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XTo make this happen rr}r(hAXTo make this happen hNjubh)r}r(hAX``celery.loaders.settings``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcelery.loaders.settingsrr}r(hAUhNjubahjhubh{X has been renamed to rr}r(hAX has been renamed to hNjubh)r}r(hAX``load_settings``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X load_settingsrr}r(hAUhNjubahjhubh{X6 and is now a function returning the settings object. rr}r(hAX6 and is now a function returning the settings object. hNjubh)r}r(hAX!``celery.loaders.current_loader``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcelery.loaders.current_loaderrr}r(hAUhNjubahjhubh{X6 is now also a function, returning the current loader.rr}r(hAX6 is now also a function, returning the current loader.hNjubeubh)r}r(hAXSo::hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XSo:rr}r(hAXSo:hNjubaubh)r}r(hAXloader = current_loaderhNjhjhhB}r(hhhE]hF]hD]hK]hL]uhpMhr]rh{Xloader = current_loaderrr}r(hAUhNjubaubh)r}r(hAXneeds to be changed to::hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{Xneeds to be changed to:rr}r(hAXneeds to be changed to:hNjubaubh)r}r(hAXloader = current_loader()hNjhjhhB}r(hhhE]hF]hD]hK]hL]uhpMhr]rh{Xloader = current_loader()rr}r(hAUhNjubaubehjj+ubeubeubeubhd)r}r(hAUhNj hihIhjhkhB}r(hD]hK]hF]hE]rU deprecationsrahL]rhauhpMhqhhr]r(ht)r}r(hAX DEPRECATIONSrhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpMhqhhr]rh{X DEPRECATIONSrr }r (hAjhNjubaubha)r }r (hAUhNjhihIhjhhB}r (hX*hE]hF]hD]hK]hL]uhpMhqhhr]r(h^)r}r(hAXThe following configuration variables has been renamed and will be deprecated in v1.2: * CELERYD_DAEMON_LOG_FORMAT -> CELERYD_LOG_FORMAT * CELERYD_DAEMON_LOG_LEVEL -> CELERYD_LOG_LEVEL * CELERY_AMQP_CONNECTION_TIMEOUT -> CELERY_BROKER_CONNECTION_TIMEOUT * CELERY_AMQP_CONNECTION_RETRY -> CELERY_BROKER_CONNECTION_RETRY * CELERY_AMQP_CONNECTION_MAX_RETRIES -> CELERY_BROKER_CONNECTION_MAX_RETRIES * SEND_CELERY_TASK_ERROR_EMAILS -> CELERY_SEND_TASK_ERROR_EMAILS hNj hihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAXVThe following configuration variables has been renamed and will be deprecated in v1.2:rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XVThe following configuration variables has been renamed and will be deprecated in v1.2:rr}r(hAjhNjubaubha)r}r(hAUhNjhiNhjhhB}r(hX*hE]hF]hD]hK]hL]uhpNhqhhr]r(h^)r}r (hAX/CELERYD_DAEMON_LOG_FORMAT -> CELERYD_LOG_FORMATr!hB}r"(hD]hK]hF]hE]hL]uhNjhr]r#h)r$}r%(hAj!hNjhihIhjhhB}r&(hD]hK]hF]hE]hL]uhpMhr]r'h{X/CELERYD_DAEMON_LOG_FORMAT -> CELERYD_LOG_FORMATr(r)}r*(hAj!hNj$ubaubahjhubh^)r+}r,(hAX-CELERYD_DAEMON_LOG_LEVEL -> CELERYD_LOG_LEVELr-hB}r.(hD]hK]hF]hE]hL]uhNjhr]r/h)r0}r1(hAj-hNj+hihIhjhhB}r2(hD]hK]hF]hE]hL]uhpMhr]r3h{X-CELERYD_DAEMON_LOG_LEVEL -> CELERYD_LOG_LEVELr4r5}r6(hAj-hNj0ubaubahjhubh^)r7}r8(hAXBCELERY_AMQP_CONNECTION_TIMEOUT -> CELERY_BROKER_CONNECTION_TIMEOUTr9hB}r:(hD]hK]hF]hE]hL]uhNjhr]r;h)r<}r=(hAj9hNj7hihIhjhhB}r>(hD]hK]hF]hE]hL]uhpMhr]r?h{XBCELERY_AMQP_CONNECTION_TIMEOUT -> CELERY_BROKER_CONNECTION_TIMEOUTr@rA}rB(hAj9hNj<ubaubahjhubh^)rC}rD(hAX>CELERY_AMQP_CONNECTION_RETRY -> CELERY_BROKER_CONNECTION_RETRYrEhB}rF(hD]hK]hF]hE]hL]uhNjhr]rGh)rH}rI(hAjEhNjChihIhjhhB}rJ(hD]hK]hF]hE]hL]uhpMhr]rKh{X>CELERY_AMQP_CONNECTION_RETRY -> CELERY_BROKER_CONNECTION_RETRYrLrM}rN(hAjEhNjHubaubahjhubh^)rO}rP(hAXJCELERY_AMQP_CONNECTION_MAX_RETRIES -> CELERY_BROKER_CONNECTION_MAX_RETRIESrQhB}rR(hD]hK]hF]hE]hL]uhNjhr]rSh)rT}rU(hAjQhNjOhihIhjhhB}rV(hD]hK]hF]hE]hL]uhpMhr]rWh{XJCELERY_AMQP_CONNECTION_MAX_RETRIES -> CELERY_BROKER_CONNECTION_MAX_RETRIESrXrY}rZ(hAjQhNjTubaubahjhubh^)r[}r\(hAX?SEND_CELERY_TASK_ERROR_EMAILS -> CELERY_SEND_TASK_ERROR_EMAILS hB}r](hD]hK]hF]hE]hL]uhNjhr]r^h)r_}r`(hAX>SEND_CELERY_TASK_ERROR_EMAILS -> CELERY_SEND_TASK_ERROR_EMAILSrahNj[hihIhjhhB}rb(hD]hK]hF]hE]hL]uhpMhr]rch{X>SEND_CELERY_TASK_ERROR_EMAILS -> CELERY_SEND_TASK_ERROR_EMAILSrdre}rf(hAjahNj_ubaubahjhubeubeubh^)rg}rh(hAXTThe public api names in celery.conf has also changed to a consistent naming scheme. hNj hihIhjhhB}ri(hD]hK]hF]hE]hL]uhpNhqhhr]rjh)rk}rl(hAXSThe public api names in celery.conf has also changed to a consistent naming scheme.rmhNjghihIhjhhB}rn(hD]hK]hF]hE]hL]uhpMhr]roh{XSThe public api names in celery.conf has also changed to a consistent naming scheme.rprq}rr(hAjmhNjkubaubaubh^)rs}rt(hAXOWe now support consuming from an arbitrary number of queues. To do this we had to rename the configuration syntax. If you use any of the custom AMQP routing options (queue/exchange/routing_key, etc), you should read the new FAQ entry: http://bit.ly/aiWoH. The previous syntax is deprecated and scheduled for removal in v1.2. hNj hihIhjhhB}ru(hD]hK]hF]hE]hL]uhpNhqhhr]rv(h)rw}rx(hAX<We now support consuming from an arbitrary number of queues.ryhNjshihIhjhhB}rz(hD]hK]hF]hE]hL]uhpMhr]r{h{X<We now support consuming from an arbitrary number of queues.r|r}}r~(hAjyhNjwubaubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjshr]r(h)r}r(hAXTo do this we had to rename the configuration syntax. If you use any of the custom AMQP routing options (queue/exchange/routing_key, etc), you should read the new FAQ entry: http://bit.ly/aiWoH.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XTo do this we had to rename the configuration syntax. If you use any of the custom AMQP routing options (queue/exchange/routing_key, etc), you should read the new FAQ entry: rr}r(hAXTo do this we had to rename the configuration syntax. If you use any of the custom AMQP routing options (queue/exchange/routing_key, etc), you should read the new FAQ entry: hNjubjC)r}r(hAXhttp://bit.ly/aiWoHrhB}r(UrefurijhE]hF]hD]hK]hL]uhNjhr]rh{Xhttp://bit.ly/aiWoHrr}r(hAUhNjubahjjLubh{X.r}r(hAX.hNjubeubh)r}r(hAXDThe previous syntax is deprecated and scheduled for removal in v1.2.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XDThe previous syntax is deprecated and scheduled for removal in v1.2.rr}r(hAjhNjubaubehjj+ubeubh^)r}r(hAX``TaskSet.run`` has been renamed to ``TaskSet.apply_async``. ``TaskSet.run`` has now been deprecated, and is scheduled for removal in v1.2. hNj hihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX<``TaskSet.run`` has been renamed to ``TaskSet.apply_async``.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h)r}r(hAX``TaskSet.run``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X TaskSet.runrr}r(hAUhNjubahjhubh{X has been renamed to rr}r(hAX has been renamed to hNjubh)r}r(hAX``TaskSet.apply_async``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XTaskSet.apply_asyncrr}r(hAUhNjubahjhubh{X.r}r(hAX.hNjubeubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXN``TaskSet.run`` has now been deprecated, and is scheduled for removal in v1.2.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h)r}r(hAX``TaskSet.run``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X TaskSet.runrr}r(hAUhNjubahjhubh{X? has now been deprecated, and is scheduled for removal in v1.2.rr}r(hAX? has now been deprecated, and is scheduled for removal in v1.2.hNjubeubahjj+ubeubeubeubhd)r}r(hAUjKhNj hihIhjhkhB}r(hD]rjahK]hF]hE]rUid5rahL]uhpMhqhhr]r(ht)r}r(hAXNEWSrhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpMhqhhr]rh{XNEWSrr}r(hAjhNjubaubha)r}r(hAUhNjhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpMhqhhr]r(h^)r}r(hAX4Rate limiting support (per task type, or globally). hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX3Rate limiting support (per task type, or globally).rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X3Rate limiting support (per task type, or globally).rr}r(hAjhNjubaubaubh^)r}r(hAXNew periodic task system. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXNew periodic task system.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XNew periodic task system.rr}r(hAjhNjubaubaubh^)r}r(hAXAutomatic registration. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXAutomatic registration.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XAutomatic registration.rr}r(hAjhNjubaubaubh^)r}r(hAX New cool task decorator syntax. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXNew cool task decorator syntax.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XNew cool task decorator syntax.r r }r (hAjhNjubaubaubh^)r }r (hAXceleryd now sends events if enabled with the ``-E`` argument. Excellent for monitoring tools, one is already in the making (http://github.com/ask/celerymon). Current events include: worker-heartbeat, task-[received/succeeded/failed/retried], worker-online, worker-offline. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX=celeryd now sends events if enabled with the ``-E`` argument.hNj hihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{X-celeryd now sends events if enabled with the rr}r(hAX-celeryd now sends events if enabled with the hNjubh)r}r(hAX``-E``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X-Err}r(hAUhNjubahjhubh{X argument.rr}r (hAX argument.hNjubeubhZ)r!}r"(hAUhB}r#(hD]hK]hF]hE]hL]uhNj hr]r$(h)r%}r&(hAX_Excellent for monitoring tools, one is already in the making (http://github.com/ask/celerymon).hNj!hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpMhr]r((h{X>Excellent for monitoring tools, one is already in the making (r)r*}r+(hAX>Excellent for monitoring tools, one is already in the making (hNj%ubjC)r,}r-(hAXhttp://github.com/ask/celerymonr.hB}r/(Urefurij.hE]hF]hD]hK]hL]uhNj%hr]r0h{Xhttp://github.com/ask/celerymonr1r2}r3(hAUhNj,ubahjjLubh{X).r4r5}r6(hAX).hNj%ubeubh)r7}r8(hAXrCurrent events include: worker-heartbeat, task-[received/succeeded/failed/retried], worker-online, worker-offline.r9hNj!hihIhjhhB}r:(hD]hK]hF]hE]hL]uhpMhr]r;h{XrCurrent events include: worker-heartbeat, task-[received/succeeded/failed/retried], worker-online, worker-offline.r<r=}r>(hAj9hNj7ubaubehjj+ubeubh^)r?}r@(hAXAYou can now delete (revoke) tasks that has already been applied. hNjhihIhjhhB}rA(hD]hK]hF]hE]hL]uhpNhqhhr]rBh)rC}rD(hAX@You can now delete (revoke) tasks that has already been applied.rEhNj?hihIhjhhB}rF(hD]hK]hF]hE]hL]uhpMhr]rGh{X@You can now delete (revoke) tasks that has already been applied.rHrI}rJ(hAjEhNjCubaubaubh^)rK}rL(hAXVYou can now set the hostname celeryd identifies as using the ``--hostname`` argument. hNjhihIhjhhB}rM(hD]hK]hF]hE]hL]uhpNhqhhr]rNh)rO}rP(hAXUYou can now set the hostname celeryd identifies as using the ``--hostname`` argument.hNjKhihIhjhhB}rQ(hD]hK]hF]hE]hL]uhpMhr]rR(h{X=You can now set the hostname celeryd identifies as using the rSrT}rU(hAX=You can now set the hostname celeryd identifies as using the hNjOubh)rV}rW(hAX``--hostname``hB}rX(hD]hK]hF]hE]hL]uhNjOhr]rYh{X --hostnamerZr[}r\(hAUhNjVubahjhubh{X argument.r]r^}r_(hAX argument.hNjOubeubaubh^)r`}ra(hAX;Cache backend now respects ``CELERY_TASK_RESULT_EXPIRES``. hNjhihIhjhhB}rb(hD]hK]hF]hE]hL]uhpNhqhhr]rch)rd}re(hAX:Cache backend now respects ``CELERY_TASK_RESULT_EXPIRES``.hNj`hihIhjhhB}rf(hD]hK]hF]hE]hL]uhpMhr]rg(h{XCache backend now respects rhri}rj(hAXCache backend now respects hNjdubh)rk}rl(hAX``CELERY_TASK_RESULT_EXPIRES``hB}rm(hD]hK]hF]hE]hL]uhNjdhr]rnh{XCELERY_TASK_RESULT_EXPIRESrorp}rq(hAUhNjkubahjhubh{X.rr}rs(hAX.hNjdubeubaubh^)rt}ru(hAXaMessage format has been standardized and now uses ISO-8601 format for dates instead of datetime. hNjhihIhjhhB}rv(hD]hK]hF]hE]hL]uhpNhqhhr]rwh)rx}ry(hAX`Message format has been standardized and now uses ISO-8601 format for dates instead of datetime.rzhNjthihIhjhhB}r{(hD]hK]hF]hE]hL]uhpMhr]r|h{X`Message format has been standardized and now uses ISO-8601 format for dates instead of datetime.r}r~}r(hAjzhNjxubaubaubh^)r}r(hAXE``celeryd`` now responds to the ``HUP`` signal by restarting itself. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXD``celeryd`` now responds to the ``HUP`` signal by restarting itself.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h)r}r(hAX ``celeryd``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcelerydrr}r(hAUhNjubahjhubh{X now responds to the rr}r(hAX now responds to the hNjubh)r}r(hAX``HUP``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XHUPrr}r(hAUhNjubahjhubh{X signal by restarting itself.rr}r(hAX signal by restarting itself.hNjubeubaubh^)r}r(hAXPeriodic tasks are now scheduled on the clock. I.e. ``timedelta(hours=1)`` means every hour at :00 minutes, not every hour from the server starts. To revert to the previous behaviour you can set ``PeriodicTask.relative = True``. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX.Periodic tasks are now scheduled on the clock.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X.Periodic tasks are now scheduled on the clock.rr}r(hAjhNjubaubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXI.e. ``timedelta(hours=1)`` means every hour at :00 minutes, not every hour from the server starts. To revert to the previous behaviour you can set ``PeriodicTask.relative = True``.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XI.e. rr}r(hAXI.e. hNjubh)r}r(hAX``timedelta(hours=1)``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xtimedelta(hours=1)rr}r(hAUhNjubahjhubh{Xz means every hour at :00 minutes, not every hour from the server starts. To revert to the previous behaviour you can set rr}r(hAXz means every hour at :00 minutes, not every hour from the server starts. To revert to the previous behaviour you can set hNjubh)r}r(hAX ``PeriodicTask.relative = True``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XPeriodicTask.relative = Truerr}r(hAUhNjubahjhubh{X.r}r(hAX.hNjubeubahjj+ubeubh^)r}r(hAXNow supports passing execute options to a TaskSets list of args, e.g.: >>> ts = TaskSet(add, [([2, 2], {}, {"countdown": 1}), ... ([4, 4], {}, {"countdown": 2}), ... ([8, 8], {}, {"countdown": 3})]) >>> ts.run() hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAXFNow supports passing execute options to a TaskSets list of args, e.g.:rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XFNow supports passing execute options to a TaskSets list of args, e.g.:rr}r(hAjhNjubaubj)r}r(hAX>>> ts = TaskSet(add, [([2, 2], {}, {"countdown": 1}), ... ([4, 4], {}, {"countdown": 2}), ... ([8, 8], {}, {"countdown": 3})]) >>> ts.run()hNjhiNhjjhB}r(hhhE]hF]hD]hK]hL]uhpNhqhhr]rh{X>>> ts = TaskSet(add, [([2, 2], {}, {"countdown": 1}), ... ([4, 4], {}, {"countdown": 2}), ... ([8, 8], {}, {"countdown": 3})]) >>> ts.run()rr}r(hAUhNjubaubeubh^)r}r(hAXGot a 3x performance gain by setting the prefetch count to four times the concurrency, (from an average task round-trip of 0.1s to 0.03s!). A new setting has been added: ``CELERYD_PREFETCH_MULTIPLIER``, which is set to ``4`` by default. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAXGot a 3x performance gain by setting the prefetch count to four times the concurrency, (from an average task round-trip of 0.1s to 0.03s!).rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XGot a 3x performance gain by setting the prefetch count to four times the concurrency, (from an average task round-trip of 0.1s to 0.03s!).rr}r(hAjhNjubaubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAX`A new setting has been added: ``CELERYD_PREFETCH_MULTIPLIER``, which is set to ``4`` by default.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM hr]r(h{XA new setting has been added: rr}r(hAXA new setting has been added: hNjubh)r}r(hAX``CELERYD_PREFETCH_MULTIPLIER``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XCELERYD_PREFETCH_MULTIPLIERrr}r(hAUhNjubahjhubh{X, which is set to rr}r(hAX, which is set to hNjubh)r}r(hAX``4``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X4r}r(hAUhNjubahjhubh{X by default.rr}r(hAX by default.hNjubeubahjj+ubeubh^)r}r(hAXImproved support for webhook tasks. ``celery.task.rest`` is now deprecated, replaced with the new and shiny :mod:`celery.task.http`. With more reflective names, sensible interface, and it's possible to override the methods used to perform HTTP requests. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX#Improved support for webhook tasks.r hNjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpM hr]r h{X#Improved support for webhook tasks.r r }r(hAj hNjubaubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAX``celery.task.rest`` is now deprecated, replaced with the new and shiny :mod:`celery.task.http`. With more reflective names, sensible interface, and it's possible to override the methods used to perform HTTP requests.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h)r}r(hAX``celery.task.rest``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcelery.task.restrr}r(hAUhNjubahjhubh{X4 is now deprecated, replaced with the new and shiny rr}r (hAX4 is now deprecated, replaced with the new and shiny hNjubj)r!}r"(hAX:mod:`celery.task.http`r#hNjhihIhjjhB}r$(UreftypeXmodjjXcelery.task.httpU refdomainXpyr%hE]hF]U refexplicithD]hK]hL]jjjNjNuhpMhr]r&h)r'}r((hAj#hB}r)(hD]hK]r*(j#j%Xpy-modr+ehF]hE]hL]uhNj!hr]r,h{Xcelery.task.httpr-r.}r/(hAUhNj'ubahjhubaubh{Xz. With more reflective names, sensible interface, and it's possible to override the methods used to perform HTTP requests.r0r1}r2(hAXz. With more reflective names, sensible interface, and it's possible to override the methods used to perform HTTP requests.hNjubeubahjj+ubeubh^)r3}r4(hAXLThe results of tasksets are now cached by storing it in the result backend. hNjhihIhjhhB}r5(hD]hK]hF]hE]hL]uhpNhqhhr]r6h)r7}r8(hAXKThe results of tasksets are now cached by storing it in the result backend.r9hNj3hihIhjhhB}r:(hD]hK]hF]hE]hL]uhpMhr]r;h{XKThe results of tasksets are now cached by storing it in the result backend.r<r=}r>(hAj9hNj7ubaubaubeubeubhd)r?}r@(hAUjKhNj hihIhjhkhB}rA(hD]rBjahK]hF]hE]rCUid6rDahL]uhpMhqhhr]rE(ht)rF}rG(hAXCHANGESrHhNj?hihIhjhxhB}rI(hD]hK]hF]hE]hL]uhpMhqhhr]rJh{XCHANGESrKrL}rM(hAjHhNjFubaubha)rN}rO(hAUhNj?hihIhjhhB}rP(hX*hE]hF]hD]hK]hL]uhpMhqhhr]rQ(h^)rR}rS(hAXNow depends on carrot >= 0.8.1 hNjNhihIhjhhB}rT(hD]hK]hF]hE]hL]uhpNhqhhr]rUh)rV}rW(hAXNow depends on carrot >= 0.8.1rXhNjRhihIhjhhB}rY(hD]hK]hF]hE]hL]uhpMhr]rZh{XNow depends on carrot >= 0.8.1r[r\}r](hAjXhNjVubaubaubh^)r^}r_(hAX@New dependencies: billiard, python-dateutil, django-picklefield hNjNhihIhjhhB}r`(hD]hK]hF]hE]hL]uhpNhqhhr]rah)rb}rc(hAX?New dependencies: billiard, python-dateutil, django-picklefieldrdhNj^hihIhjhhB}re(hD]hK]hF]hE]hL]uhpMhr]rfh{X?New dependencies: billiard, python-dateutil, django-picklefieldrgrh}ri(hAjdhNjbubaubaubh^)rj}rk(hAX#No longer depends on python-daemon hNjNhihIhjhhB}rl(hD]hK]hF]hE]hL]uhpNhqhhr]rmh)rn}ro(hAX"No longer depends on python-daemonrphNjjhihIhjhhB}rq(hD]hK]hF]hE]hL]uhpMhr]rrh{X"No longer depends on python-daemonrsrt}ru(hAjphNjnubaubaubh^)rv}rw(hAXLThe ``uuid`` distribution is added as a dependency when running Python 2.4. hNjNhihIhjhhB}rx(hD]hK]hF]hE]hL]uhpNhqhhr]ryh)rz}r{(hAXKThe ``uuid`` distribution is added as a dependency when running Python 2.4.hNjvhihIhjhhB}r|(hD]hK]hF]hE]hL]uhpMhr]r}(h{XThe r~r}r(hAXThe hNjzubh)r}r(hAX``uuid``hB}r(hD]hK]hF]hE]hL]uhNjzhr]rh{Xuuidrr}r(hAUhNjubahjhubh{X? distribution is added as a dependency when running Python 2.4.rr}r(hAX? distribution is added as a dependency when running Python 2.4.hNjzubeubaubh^)r}r(hAXNow remembers the previously detected loader by keeping it in the ``CELERY_LOADER`` environment variable. This may help on windows where fork emulation is used. hNjNhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAXiNow remembers the previously detected loader by keeping it in the ``CELERY_LOADER`` environment variable.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM hr]r(h{XBNow remembers the previously detected loader by keeping it in the rr}r(hAXBNow remembers the previously detected loader by keeping it in the hNjubh)r}r(hAX``CELERY_LOADER``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X CELERY_LOADERrr}r(hAUhNjubahjhubh{X environment variable.rr}r(hAX environment variable.hNjubeubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAX6This may help on windows where fork emulation is used.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM#hr]rh{X6This may help on windows where fork emulation is used.rr}r(hAjhNjubaubahjj+ubeubh^)r}r(hAXETA no longer sends datetime objects, but uses ISO 8601 date format in a string for better compatibility with other platforms. hNjNhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX~ETA no longer sends datetime objects, but uses ISO 8601 date format in a string for better compatibility with other platforms.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM%hr]rh{X~ETA no longer sends datetime objects, but uses ISO 8601 date format in a string for better compatibility with other platforms.rr}r(hAjhNjubaubaubh^)r}r(hAX/No longer sends error mails for retried tasks. hNjNhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX.No longer sends error mails for retried tasks.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM(hr]rh{X.No longer sends error mails for retried tasks.rr}r(hAjhNjubaubaubh^)r}r(hAX9Task can now override the backend used to store results. hNjNhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX8Task can now override the backend used to store results.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM*hr]rh{X8Task can now override the backend used to store results.rr}r(hAjhNjubaubaubh^)r}r(hAXwRefactored the ExecuteWrapper, ``apply`` and ``CELERY_ALWAYS_EAGER`` now also executes the task callbacks and signals. hNjNhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXvRefactored the ExecuteWrapper, ``apply`` and ``CELERY_ALWAYS_EAGER`` now also executes the task callbacks and signals.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM,hr]r(h{XRefactored the ExecuteWrapper, rr}r(hAXRefactored the ExecuteWrapper, hNjubh)r}r(hAX ``apply``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xapplyrr}r(hAUhNjubahjhubh{X and rr}r(hAX and hNjubh)r}r(hAX``CELERY_ALWAYS_EAGER``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XCELERY_ALWAYS_EAGERrr}r(hAUhNjubahjhubh{X2 now also executes the task callbacks and signals.rr}r(hAX2 now also executes the task callbacks and signals.hNjubeubaubh^)r}r(hAXNow using a proper scheduler for the tasks with an ETA. This means waiting eta tasks are sorted by time, so we don't have to poll the whole list all the time. hNjNhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX7Now using a proper scheduler for the tasks with an ETA.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM/hr]rh{X7Now using a proper scheduler for the tasks with an ETA.rr}r(hAjhNjubaubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXfThis means waiting eta tasks are sorted by time, so we don't have to poll the whole list all the time.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM1hr]rh{XfThis means waiting eta tasks are sorted by time, so we don't have to poll the whole list all the time.rr}r(hAjhNjubaubahjj+ubeubh^)r}r(hAX\Now also imports modules listed in CELERY_IMPORTS when running with django (as documented). hNjNhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAX[Now also imports modules listed in CELERY_IMPORTS when running with django (as documented).r hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM4hr]rh{X[Now also imports modules listed in CELERY_IMPORTS when running with django (as documented).rr}r(hAj hNj ubaubaubh^)r}r(hAX6Loglevel for stdout/stderr changed from INFO to ERROR hNjNhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX5Loglevel for stdout/stderr changed from INFO to ERRORrhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM7hr]rh{X5Loglevel for stdout/stderr changed from INFO to ERRORrr}r(hAjhNjubaubaubh^)r}r (hAXEImportErrors are now properly propogated when autodiscovering tasks. hNjNhihIhjhhB}r!(hD]hK]hF]hE]hL]uhpNhqhhr]r"h)r#}r$(hAXDImportErrors are now properly propogated when autodiscovering tasks.r%hNjhihIhjhhB}r&(hD]hK]hF]hE]hL]uhpM9hr]r'h{XDImportErrors are now properly propogated when autodiscovering tasks.r(r)}r*(hAj%hNj#ubaubaubh^)r+}r,(hAXcYou can now use ``celery.messaging.establish_connection`` to establish a connection to the broker. hNjNhihIhjhhB}r-(hD]hK]hF]hE]hL]uhpNhqhhr]r.h)r/}r0(hAXbYou can now use ``celery.messaging.establish_connection`` to establish a connection to the broker.hNj+hihIhjhhB}r1(hD]hK]hF]hE]hL]uhpM;hr]r2(h{XYou can now use r3r4}r5(hAXYou can now use hNj/ubh)r6}r7(hAX)``celery.messaging.establish_connection``hB}r8(hD]hK]hF]hE]hL]uhNj/hr]r9h{X%celery.messaging.establish_connectionr:r;}r<(hAUhNj6ubahjhubh{X) to establish a connection to the broker.r=r>}r?(hAX) to establish a connection to the broker.hNj/ubeubaubh^)r@}rA(hAXWhen running as a separate service the periodic task scheduler does some smart moves to not poll too regularly. If you need faster poll times you can lower the value of ``CELERYBEAT_MAX_LOOP_INTERVAL``. hNjNhihIhjhhB}rB(hD]hK]hF]hE]hL]uhpNhqhhr]rC(h)rD}rE(hAXoWhen running as a separate service the periodic task scheduler does some smart moves to not poll too regularly.rFhNj@hihIhjhhB}rG(hD]hK]hF]hE]hL]uhpM>hr]rHh{XoWhen running as a separate service the periodic task scheduler does some smart moves to not poll too regularly.rIrJ}rK(hAjFhNjDubaubhZ)rL}rM(hAUhB}rN(hD]hK]hF]hE]hL]uhNj@hr]rOh)rP}rQ(hAXZIf you need faster poll times you can lower the value of ``CELERYBEAT_MAX_LOOP_INTERVAL``.hNjLhihIhjhhB}rR(hD]hK]hF]hE]hL]uhpMAhr]rS(h{X9If you need faster poll times you can lower the value of rTrU}rV(hAX9If you need faster poll times you can lower the value of hNjPubh)rW}rX(hAX ``CELERYBEAT_MAX_LOOP_INTERVAL``hB}rY(hD]hK]hF]hE]hL]uhNjPhr]rZh{XCELERYBEAT_MAX_LOOP_INTERVALr[r\}r](hAUhNjWubahjhubh{X.r^}r_(hAX.hNjPubeubahjj+ubeubh^)r`}ra(hAXYou can now change periodic task intervals at runtime, by making ``run_every`` a property, or subclassing ``PeriodicTask.is_due``. hNjNhihIhjhhB}rb(hD]hK]hF]hE]hL]uhpNhqhhr]rch)rd}re(hAXYou can now change periodic task intervals at runtime, by making ``run_every`` a property, or subclassing ``PeriodicTask.is_due``.hNj`hihIhjhhB}rf(hD]hK]hF]hE]hL]uhpMDhr]rg(h{XAYou can now change periodic task intervals at runtime, by making rhri}rj(hAXAYou can now change periodic task intervals at runtime, by making hNjdubh)rk}rl(hAX ``run_every``hB}rm(hD]hK]hF]hE]hL]uhNjdhr]rnh{X run_everyrorp}rq(hAUhNjkubahjhubh{X a property, or subclassing rrrs}rt(hAX a property, or subclassing hNjdubh)ru}rv(hAX``PeriodicTask.is_due``hB}rw(hD]hK]hF]hE]hL]uhNjdhr]rxh{XPeriodicTask.is_dueryrz}r{(hAUhNjuubahjhubh{X.r|}r}(hAX.hNjdubeubaubh^)r~}r(hAXThe worker now supports control commands enabled through the use of a broadcast queue, you can remotely revoke tasks or set the rate limit for a task type. See :mod:`celery.task.control`. hNjNhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXThe worker now supports control commands enabled through the use of a broadcast queue, you can remotely revoke tasks or set the rate limit for a task type. See :mod:`celery.task.control`.hNj~hihIhjhhB}r(hD]hK]hF]hE]hL]uhpMGhr]r(h{XThe worker now supports control commands enabled through the use of a broadcast queue, you can remotely revoke tasks or set the rate limit for a task type. See rr}r(hAXThe worker now supports control commands enabled through the use of a broadcast queue, you can remotely revoke tasks or set the rate limit for a task type. See hNjubj)r}r(hAX:mod:`celery.task.control`rhNjhihIhjjhB}r(UreftypeXmodjjXcelery.task.controlU refdomainXpyrhE]hF]U refexplicithD]hK]hL]jjjNjNuhpMGhr]rh)r}r(hAjhB}r(hD]hK]r(j#jXpy-modrehF]hE]hL]uhNjhr]rh{Xcelery.task.controlrr}r(hAUhNjubahjhubaubh{X.r}r(hAX.hNjubeubaubh^)r}r(hAX~The services now sets informative process names (as shown in ``ps`` listings) if the :mod:`setproctitle` module is installed. hNjNhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX}The services now sets informative process names (as shown in ``ps`` listings) if the :mod:`setproctitle` module is installed.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMKhr]r(h{X=The services now sets informative process names (as shown in rr}r(hAX=The services now sets informative process names (as shown in hNjubh)r}r(hAX``ps``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xpsrr}r(hAUhNjubahjhubh{X listings) if the rr}r(hAX listings) if the hNjubj)r}r(hAX:mod:`setproctitle`rhNjhihIhjjhB}r(UreftypeXmodjjX setproctitleU refdomainXpyrhE]hF]U refexplicithD]hK]hL]jjjNjNuhpMKhr]rh)r}r(hAjhB}r(hD]hK]r(j#jXpy-modrehF]hE]hL]uhNjhr]rh{X setproctitlerr}r(hAUhNjubahjhubaubh{X module is installed.rr}r(hAX module is installed.hNjubeubaubh^)r}r(hAX:exc:`celery.exceptions.NotRegistered` now inherits from :exc:`KeyError`, and ``TaskRegistry.__getitem__``+``pop`` raises ``NotRegistered`` instead hNjNhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX:exc:`celery.exceptions.NotRegistered` now inherits from :exc:`KeyError`, and ``TaskRegistry.__getitem__``+``pop`` raises ``NotRegistered`` insteadhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMNhr]r(j)r}r(hAX&:exc:`celery.exceptions.NotRegistered`rhNjhihIhjjhB}r(UreftypeXexcjjXcelery.exceptions.NotRegisteredU refdomainXpyrhE]hF]U refexplicithD]hK]hL]jjjNjNuhpMNhr]rh)r}r(hAjhB}r(hD]hK]r(j#jXpy-excrehF]hE]hL]uhNjhr]rh{Xcelery.exceptions.NotRegisteredrr}r(hAUhNjubahjhubaubh{X now inherits from rr}r(hAX now inherits from hNjubj)r}r(hAX:exc:`KeyError`rhNjhihIhjjhB}r(UreftypeXexcjjXKeyErrorU refdomainXpyrhE]hF]U refexplicithD]hK]hL]jjjNjNuhpMNhr]rh)r}r(hAjhB}r(hD]hK]r(j#jXpy-excrehF]hE]hL]uhNjhr]rh{XKeyErrorrr}r(hAUhNjubahjhubaubh{X, and rr}r(hAX, and hNjubh)r}r(hAX$``TaskRegistry.__getitem__``+``pop``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X TaskRegistry.__getitem__``+``poprr}r(hAUhNjubahjhubh{X raises rr}r(hAX raises hNjubh)r}r(hAX``NotRegistered``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X NotRegisteredrr}r(hAUhNjubahjhubh{X insteadrr}r(hAX insteadhNjubeubaubh^)r}r(hAXGYou can set the loader via the ``CELERY_LOADER`` environment variable. hNjNhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXFYou can set the loader via the ``CELERY_LOADER`` environment variable.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMQhr]r(h{XYou can set the loader via the r r }r (hAXYou can set the loader via the hNjubh)r }r (hAX``CELERY_LOADER``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X CELERY_LOADERrr}r(hAUhNj ubahjhubh{X environment variable.rr}r(hAX environment variable.hNjubeubaubh^)r}r(hAXYou can now set ``CELERY_IGNORE_RESULT`` to ignore task results by default (if enabled, tasks doesn't save results or errors to the backend used). hNjNhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXYou can now set ``CELERY_IGNORE_RESULT`` to ignore task results by default (if enabled, tasks doesn't save results or errors to the backend used).hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMShr]r(h{XYou can now set rr}r (hAXYou can now set hNjubh)r!}r"(hAX``CELERY_IGNORE_RESULT``hB}r#(hD]hK]hF]hE]hL]uhNjhr]r$h{XCELERY_IGNORE_RESULTr%r&}r'(hAUhNj!ubahjhubh{Xj to ignore task results by default (if enabled, tasks doesn't save results or errors to the backend used).r(r)}r*(hAXj to ignore task results by default (if enabled, tasks doesn't save results or errors to the backend used).hNjubeubaubh^)r+}r,(hAXvceleryd now correctly handles malformed messages by throwing away and acknowledging the message, instead of crashing. hNjNhihIhjhhB}r-(hD]hK]hF]hE]hL]uhpNhqhhr]r.h)r/}r0(hAXuceleryd now correctly handles malformed messages by throwing away and acknowledging the message, instead of crashing.r1hNj+hihIhjhhB}r2(hD]hK]hF]hE]hL]uhpMVhr]r3h{Xuceleryd now correctly handles malformed messages by throwing away and acknowledging the message, instead of crashing.r4r5}r6(hAj1hNj/ubaubaubeubeubhd)r7}r8(hAUhNj hihIhjhkhB}r9(hD]hK]hF]hE]r:Ubugsr;ahL]r<h0auhpMZhqhhr]r=(ht)r>}r?(hAXBUGSr@hNj7hihIhjhxhB}rA(hD]hK]hF]hE]hL]uhpMZhqhhr]rBh{XBUGSrCrD}rE(hAj@hNj>ubaubha)rF}rG(hAUhNj7hihIhjhhB}rH(hX*hE]hF]hD]hK]hL]uhpM\hqhhr]rIh^)rJ}rK(hAXUFixed a race condition that could happen while storing task results in the database. hNjFhihIhjhhB}rL(hD]hK]hF]hE]hL]uhpNhqhhr]rMh)rN}rO(hAXTFixed a race condition that could happen while storing task results in the database.rPhNjJhihIhjhhB}rQ(hD]hK]hF]hE]hL]uhpM\hr]rRh{XTFixed a race condition that could happen while storing task results in the database.rSrT}rU(hAjPhNjNubaubaubaubeubhd)rV}rW(hAUhNj hihIhjhkhB}rX(hD]hK]hF]hE]rYU documentationrZahL]r[h.auhpM`hqhhr]r\(ht)r]}r^(hAX DOCUMENTATIONr_hNjVhihIhjhxhB}r`(hD]hK]hF]hE]hL]uhpM`hqhhr]rah{X DOCUMENTATIONrbrc}rd(hAj_hNj]ubaubha)re}rf(hAUhNjVhihIhjhhB}rg(hX*hE]hF]hD]hK]hL]uhpMbhqhhr]rhh^)ri}rj(hAXTReference now split into two sections; API reference and internal module reference. hNjehihIhjhhB}rk(hD]hK]hF]hE]hL]uhpNhqhhr]rlh)rm}rn(hAXSReference now split into two sections; API reference and internal module reference.rohNjihihIhjhhB}rp(hD]hK]hF]hE]hL]uhpMbhr]rqh{XSReference now split into two sections; API reference and internal module reference.rrrs}rt(hAjohNjmubaubaubaubeubhd)ru}rv(hAUhNj hihIhjhkhB}rw(hD]hK]hF]hE]rxUid7ryahL]rzh1auhpMfhqhhr]r{(ht)r|}r}(hAX!0.8.4 [2010-02-05 01:52 P.M CEST]r~hNjuhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpMfhqhhr]rh{X!0.8.4 [2010-02-05 01:52 P.M CEST]rr}r(hAj~hNj|ubaubha)r}r(hAUhNjuhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpMhhqhhr]r(h^)r}r(hAXNow emits a warning if the --detach argument is used. --detach should not be used anymore, as it has several not easily fixed bugs related to it. Instead, use something like start-stop-daemon, supervisord or launchd (os x). hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXNow emits a warning if the --detach argument is used. --detach should not be used anymore, as it has several not easily fixed bugs related to it. Instead, use something like start-stop-daemon, supervisord or launchd (os x).rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhhr]rh{XNow emits a warning if the --detach argument is used. --detach should not be used anymore, as it has several not easily fixed bugs related to it. Instead, use something like start-stop-daemon, supervisord or launchd (os x).rr}r(hAjhNjubaubaubh^)r}r(hAXIMake sure logger class is process aware, even if running Python >= 2.6. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXGMake sure logger class is process aware, even if running Python >= 2.6.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMnhr]rh{XGMake sure logger class is process aware, even if running Python >= 2.6.rr}r(hAjhNjubaubaubh^)r}r(hAX>Error e-mails are not sent anymore when the task is retried. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX<Error e-mails are not sent anymore when the task is retried.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMqhr]rh{X<Error e-mails are not sent anymore when the task is retried.rr}r(hAjhNjubaubaubeubeubhd)r}r(hAUhNj hihIhjhkhB}r(hD]hK]hF]hE]rUid8rahL]rhauhpMuhqhhr]r(ht)r}r(hAX!0.8.3 [2009-12-22 09:43 A.M CEST]rhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpMuhqhhr]rh{X!0.8.3 [2009-12-22 09:43 A.M CEST]rr}r(hAjhNjubaubha)r}r(hAUhNjhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpMwhqhhr]r(h^)r}r(hAXuFixed a possible race condition that could happen when storing/querying task results using the the database backend. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXtFixed a possible race condition that could happen when storing/querying task results using the the database backend.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMwhr]rh{XtFixed a possible race condition that could happen when storing/querying task results using the the database backend.rr}r(hAjhNjubaubaubh^)r}r(hAXNow has console script entry points in the setup.py file, so tools like buildout will correctly install the programs celerybin and celeryinit. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXNow has console script entry points in the setup.py file, so tools like buildout will correctly install the programs celerybin and celeryinit.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMzhr]rh{XNow has console script entry points in the setup.py file, so tools like buildout will correctly install the programs celerybin and celeryinit.rr}r(hAjhNjubaubaubeubeubhd)r}r(hAUhNj hihIhjhkhB}r(hD]hK]hF]hE]rUid9rahL]rh+auhpM~hqhhr]r(ht)r}r(hAX!0.8.2 [2009-11-20 03:40 P.M CEST]rhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpM~hqhhr]rh{X!0.8.2 [2009-11-20 03:40 P.M CEST]rr}r(hAjhNjubaubha)r}r(hAUhNjhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpMhqhhr]rh^)r}r(hAXQOS Prefetch count was not applied properly, as it was set for every message received (which apparently behaves like, "receive one more"), instead of only set when our wanted value cahnged. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXQOS Prefetch count was not applied properly, as it was set for every message received (which apparently behaves like, "receive one more"), instead of only set when our wanted value cahnged.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XQOS Prefetch count was not applied properly, as it was set for every message received (which apparently behaves like, "receive one more"), instead of only set when our wanted value cahnged.rr}r(hAjhNjubaubaubaubeubeubhd)r}r(hAUhNhghihIhjhkhB}r(hD]hK]hF]hE]rUid10rahL]rhauhpMhqhhr]r(ht)r}r(hAX!0.8.1 [2009-11-16 05:21 P.M CEST]rhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpMhqhhr]rh{X!0.8.1 [2009-11-16 05:21 P.M CEST]rr}r(hAjhNjubaubhd)r}r(hAUhNjhihIhjhkhB}r(hD]hK]hF]hE]rUvery-important-noter ahL]r h%auhpMhqhhr]r (ht)r }r (hAXVERY IMPORTANT NOTErhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpMhqhhr]rh{XVERY IMPORTANT NOTErr}r(hAjhNj ubaubh)r}r(hAXThis release (with carrot 0.8.0) enables AMQP QoS (quality of service), which means the workers will only receive as many messages as it can handle at a time. As with any release, you should test this version upgrade on your development servers before rolling it out to production!rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhqhhr]rh{XThis release (with carrot 0.8.0) enables AMQP QoS (quality of service), which means the workers will only receive as many messages as it can handle at a time. As with any release, you should test this version upgrade on your development servers before rolling it out to production!rr}r(hAjhNjubaubeubhd)r}r(hAUjKhNjhihIhjhkhB}r(hD]rXimportant changesr ahK]hF]hE]r!Uimportant-changesr"ahL]uhpMhqhhr]r#(ht)r$}r%(hAXIMPORTANT CHANGESr&hNjhihIhjhxhB}r'(hD]hK]hF]hE]hL]uhpMhqhhr]r(h{XIMPORTANT CHANGESr)r*}r+(hAj&hNj$ubaubha)r,}r-(hAUhNjhihIhjhhB}r.(hX*hE]hF]hD]hK]hL]uhpMhqhhr]r/(h^)r0}r1(hAXyIf you're using Python < 2.6 and you use the multiprocessing backport, then multiprocessing version 2.6.2.1 is required. hNj,hihIhjhhB}r2(hD]hK]hF]hE]hL]uhpNhqhhr]r3h)r4}r5(hAXxIf you're using Python < 2.6 and you use the multiprocessing backport, then multiprocessing version 2.6.2.1 is required.r6hNj0hihIhjhhB}r7(hD]hK]hF]hE]hL]uhpMhr]r8h{XxIf you're using Python < 2.6 and you use the multiprocessing backport, then multiprocessing version 2.6.2.1 is required.r9r:}r;(hAj6hNj4ubaubaubh^)r<}r=(hAX#All AMQP_* settings has been renamed to BROKER_*, and in addition AMQP_SERVER has been renamed to BROKER_HOST, so before where you had:: AMQP_SERVER = "localhost" AMQP_PORT = 5678 AMQP_USER = "myuser" AMQP_PASSWORD = "mypassword" AMQP_VHOST = "celery" You need to change that to:: BROKER_HOST = "localhost" BROKER_PORT = 5678 BROKER_USER = "myuser" BROKER_PASSWORD = "mypassword" BROKER_VHOST = "celery" hNj,hihIhjhhB}r>(hD]hK]hF]hE]hL]uhpNhqhhr]r?(h)r@}rA(hAXAll AMQP_* settings has been renamed to BROKER_*, and in addition AMQP_SERVER has been renamed to BROKER_HOST, so before where you had::hNj<hihIhjhhB}rB(hD]hK]hF]hE]hL]uhpMhr]rCh{XAll AMQP_* settings has been renamed to BROKER_*, and in addition AMQP_SERVER has been renamed to BROKER_HOST, so before where you had:rDrE}rF(hAXAll AMQP_* settings has been renamed to BROKER_*, and in addition AMQP_SERVER has been renamed to BROKER_HOST, so before where you had:hNj@ubaubh)rG}rH(hAXrAMQP_SERVER = "localhost" AMQP_PORT = 5678 AMQP_USER = "myuser" AMQP_PASSWORD = "mypassword" AMQP_VHOST = "celery"hNj<hjhhB}rI(hhhE]hF]hD]hK]hL]uhpMhr]rJh{XrAMQP_SERVER = "localhost" AMQP_PORT = 5678 AMQP_USER = "myuser" AMQP_PASSWORD = "mypassword" AMQP_VHOST = "celery"rKrL}rM(hAUhNjGubaubh)rN}rO(hAXYou need to change that to::hNj<hihIhjhhB}rP(hD]hK]hF]hE]hL]uhpMhr]rQh{XYou need to change that to:rRrS}rT(hAXYou need to change that to:hNjNubaubh)rU}rV(hAXzBROKER_HOST = "localhost" BROKER_PORT = 5678 BROKER_USER = "myuser" BROKER_PASSWORD = "mypassword" BROKER_VHOST = "celery"hNj<hjhhB}rW(hhhE]hF]hD]hK]hL]uhpMhr]rXh{XzBROKER_HOST = "localhost" BROKER_PORT = 5678 BROKER_USER = "myuser" BROKER_PASSWORD = "mypassword" BROKER_VHOST = "celery"rYrZ}r[(hAUhNjUubaubeubh^)r\}r](hAXdCustom carrot backends now need to include the backend class name, so before where you had:: CARROT_BACKEND = "mycustom.backend.module" you need to change it to:: CARROT_BACKEND = "mycustom.backend.module.Backend" where ``Backend`` is the class name. This is probably ``"Backend"``, as that was the previously implied name. hNj,hihIhjhhB}r^(hD]hK]hF]hE]hL]uhpNhqhhr]r_(h)r`}ra(hAX\Custom carrot backends now need to include the backend class name, so before where you had::hNj\hihIhjhhB}rb(hD]hK]hF]hE]hL]uhpMhr]rch{X[Custom carrot backends now need to include the backend class name, so before where you had:rdre}rf(hAX[Custom carrot backends now need to include the backend class name, so before where you had:hNj`ubaubh)rg}rh(hAX*CARROT_BACKEND = "mycustom.backend.module"hNj\hjhhB}ri(hhhE]hF]hD]hK]hL]uhpMhr]rjh{X*CARROT_BACKEND = "mycustom.backend.module"rkrl}rm(hAUhNjgubaubh)rn}ro(hAXyou need to change it to::hNj\hihIhjhhB}rp(hD]hK]hF]hE]hL]uhpMhr]rqh{Xyou need to change it to:rrrs}rt(hAXyou need to change it to:hNjnubaubh)ru}rv(hAX2CARROT_BACKEND = "mycustom.backend.module.Backend"hNj\hjhhB}rw(hhhE]hF]hD]hK]hL]uhpMhr]rxh{X2CARROT_BACKEND = "mycustom.backend.module.Backend"ryrz}r{(hAUhNjuubaubh)r|}r}(hAXmwhere ``Backend`` is the class name. This is probably ``"Backend"``, as that was the previously implied name.hNj\hihIhjhhB}r~(hD]hK]hF]hE]hL]uhpMhr]r(h{Xwhere rr}r(hAXwhere hNj|ubh)r}r(hAX ``Backend``hB}r(hD]hK]hF]hE]hL]uhNj|hr]rh{XBackendrr}r(hAUhNjubahjhubh{X% is the class name. This is probably rr}r(hAX% is the class name. This is probably hNj|ubh)r}r(hAX ``"Backend"``hB}r(hD]hK]hF]hE]hL]uhNj|hr]rh{X "Backend"rr}r(hAUhNjubahjhubh{X*, as that was the previously implied name.rr}r(hAX*, as that was the previously implied name.hNj|ubeubeubh^)r}r(hAX*New version requirement for carrot: 0.8.0 hNj,hihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX)New version requirement for carrot: 0.8.0rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X)New version requirement for carrot: 0.8.0rr}r(hAjhNjubaubaubeubeubhd)r}r(hAUjKhNjhihIhjhkhB}r(hD]rXchangesrahK]hF]hE]rUid11rahL]uhpMhqhhr]r(ht)r}r(hAXCHANGESrhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpMhqhhr]rh{XCHANGESrr}r(hAjhNjubaubha)r}r(hAUhNjhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpMhqhhr]r(h^)r}r(hAXVIncorporated the multiprocessing backport patch that fixes the ``processName`` error. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXUIncorporated the multiprocessing backport patch that fixes the ``processName`` error.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{X?Incorporated the multiprocessing backport patch that fixes the rr}r(hAX?Incorporated the multiprocessing backport patch that fixes the hNjubh)r}r(hAX``processName``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X processNamerr}r(hAUhNjubahjhubh{X error.rr}r(hAX error.hNjubeubaubh^)r}r(hAX0Ignore the result of PeriodicTask's by default. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX/Ignore the result of PeriodicTask's by default.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X/Ignore the result of PeriodicTask's by default.rr}r(hAjhNjubaubaubh^)r}r(hAX#Added a Redis result store backend hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX"Added a Redis result store backendrhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X"Added a Redis result store backendrr}r(hAjhNjubaubaubh^)r}r(hAXUAllow /etc/default/celeryd to define additional options for the celeryd init script. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXTAllow /etc/default/celeryd to define additional options for the celeryd init script.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XTAllow /etc/default/celeryd to define additional options for the celeryd init script.rr}r(hAjhNjubaubaubh^)r}r(hAXGMongoDB periodic tasks issue when using different time than UTC fixed. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXFMongoDB periodic tasks issue when using different time than UTC fixed.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XFMongoDB periodic tasks issue when using different time than UTC fixed.rr}r(hAjhNjubaubaubh^)r}r(hAXGWindows specific: Negate test for available os.fork (thanks miracle2k) hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXFWindows specific: Negate test for available os.fork (thanks miracle2k)rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XFWindows specific: Negate test for available os.fork (thanks miracle2k)rr}r(hAjhNjubaubaubh^)r}r (hAX&Now tried to handle broken PID files. hNjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAX%Now tried to handle broken PID files.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X%Now tried to handle broken PID files.rr}r(hAjhNj ubaubaubh^)r}r(hAXqAdded a Django test runner to contrib that sets CELERY_ALWAYS_EAGER = True for testing with the database backend hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXpAdded a Django test runner to contrib that sets CELERY_ALWAYS_EAGER = True for testing with the database backendrhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XpAdded a Django test runner to contrib that sets CELERY_ALWAYS_EAGER = True for testing with the database backendrr}r(hAjhNjubaubaubh^)r }r!(hAXeAdded a CELERY_CACHE_BACKEND setting for using something other than the django-global cache backend. hNjhihIhjhhB}r"(hD]hK]hF]hE]hL]uhpNhqhhr]r#h)r$}r%(hAXdAdded a CELERY_CACHE_BACKEND setting for using something other than the django-global cache backend.r&hNj hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpMhr]r(h{XdAdded a CELERY_CACHE_BACKEND setting for using something other than the django-global cache backend.r)r*}r+(hAj&hNj$ubaubaubh^)r,}r-(hAXUse custom implementation of functools.partial (curry) for Python 2.4 support (Probably still problems with running on 2.4, but it will eventually be supported) hNjhihIhjhhB}r.(hD]hK]hF]hE]hL]uhpNhqhhr]r/h)r0}r1(hAXUse custom implementation of functools.partial (curry) for Python 2.4 support (Probably still problems with running on 2.4, but it will eventually be supported)r2hNj,hihIhjhhB}r3(hD]hK]hF]hE]hL]uhpMhr]r4h{XUse custom implementation of functools.partial (curry) for Python 2.4 support (Probably still problems with running on 2.4, but it will eventually be supported)r5r6}r7(hAj2hNj0ubaubaubh^)r8}r9(hAXGPrepare exception to pickle when saving RETRY status for all backends. hNjhihIhjhhB}r:(hD]hK]hF]hE]hL]uhpNhqhhr]r;h)r<}r=(hAXFPrepare exception to pickle when saving RETRY status for all backends.r>hNj8hihIhjhhB}r?(hD]hK]hF]hE]hL]uhpMhr]r@h{XFPrepare exception to pickle when saving RETRY status for all backends.rArB}rC(hAj>hNj<ubaubaubh^)rD}rE(hAXPSQLite no concurrency limit should only be effective if the db backend is used. hNjhihIhjhhB}rF(hD]hK]hF]hE]hL]uhpNhqhhr]rGh)rH}rI(hAXOSQLite no concurrency limit should only be effective if the db backend is used.rJhNjDhihIhjhhB}rK(hD]hK]hF]hE]hL]uhpMhr]rLh{XOSQLite no concurrency limit should only be effective if the db backend is used.rMrN}rO(hAjJhNjHubaubaubeubeubeubhd)rP}rQ(hAUhNhghihIhjhkhB}rR(hD]hK]hF]hE]rSUid12rTahL]rUh3auhpMhqhhr]rV(ht)rW}rX(hAX!0.8.0 [2009-09-22 03:06 P.M CEST]rYhNjPhihIhjhxhB}rZ(hD]hK]hF]hE]hL]uhpMhqhhr]r[h{X!0.8.0 [2009-09-22 03:06 P.M CEST]r\r]}r^(hAjYhNjWubaubhd)r_}r`(hAUjKhNjPhihIhjhkhB}ra(hD]rbj. ahK]hF]hE]rcUid13rdahL]uhpMhqhhr]re(ht)rf}rg(hAXBACKWARD INCOMPATIBLE CHANGESrhhNj_hihIhjhxhB}ri(hD]hK]hF]hE]hL]uhpMhqhhr]rjh{XBACKWARD INCOMPATIBLE CHANGESrkrl}rm(hAjhhNjfubaubha)rn}ro(hAUhNj_hihIhjhhB}rp(hX*hE]hF]hD]hK]hL]uhpMhqhhr]rq(h^)rr}rs(hAXAdd traceback to result value on failure. **NOTE** If you use the database backend you have to re-create the database table ``celery_taskmeta``. Contact the mailinglist or IRC channel listed in README for help doing this. hNjnhiNhjhhB}rt(hD]hK]hF]hE]hL]uhpNhqhhr]ruhV)rv}rw(hAUhB}rx(hD]hK]hF]hE]hL]uhNjrhr]ryhS)rz}r{(hAXAdd traceback to result value on failure. **NOTE** If you use the database backend you have to re-create the database table ``celery_taskmeta``. Contact the mailinglist or IRC channel listed in README for help doing this. hNjvhihIhjUdefinition_list_itemr|hB}r}(hD]hK]hF]hE]hL]uhpMhr]r~(cdocutils.nodes term r)r}r(hAX)Add traceback to result value on failure.rhNjzhihIhjUtermrhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X)Add traceback to result value on failure.rr}r(hAjhNjubaubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjzhr]r(h)r}r(hAXf**NOTE** If you use the database backend you have to re-create the database table ``celery_taskmeta``.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(j)r}r(hAX**NOTE**hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XNOTErr}r(hAUhNjubahjjubh{XJ If you use the database backend you have to re-create the database table rr}r(hAXJ If you use the database backend you have to re-create the database table hNjubh)r}r(hAX``celery_taskmeta``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcelery_taskmetarr}r(hAUhNjubahjhubh{X.r}r(hAX.hNjubeubh)r}r(hAXLContact the mailinglist or IRC channel listed in README for help doing this.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XLContact the mailinglist or IRC channel listed in README for help doing this.rr}r(hAjhNjubaubehjU definitionrubeubahjUdefinition_listrubaubh^)r}r(hAXDatabase tables are now only created if the database backend is used, so if you change back to the database backend at some point, be sure to initialize tables (django: ``syncdb``, python: ``celeryinit``). (Note: This is only the case when using Django 1.1 or higher) hNjnhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAX Database tables are now only created if the database backend is used, so if you change back to the database backend at some point, be sure to initialize tables (django: ``syncdb``, python: ``celeryinit``). (Note: This is only the case when using Django 1.1 or higher) hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMhr]r(j)r}r(hAXEDatabase tables are now only created if the database backend is used,rhNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XEDatabase tables are now only created if the database backend is used,rr}r(hAjhNjubaubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXso if you change back to the database backend at some point, be sure to initialize tables (django: ``syncdb``, python: ``celeryinit``). (Note: This is only the case when using Django 1.1 or higher)hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{Xcso if you change back to the database backend at some point, be sure to initialize tables (django: rr}r(hAXcso if you change back to the database backend at some point, be sure to initialize tables (django: hNjubh)r}r(hAX ``syncdb``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xsyncdbrr}r(hAUhNjubahjhubh{X , python: rr}r(hAX , python: hNjubh)r}r(hAX``celeryinit``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X celeryinitrr}r(hAUhNjubahjhubh{X@). (Note: This is only the case when using Django 1.1 or higher)rr}r(hAX@). (Note: This is only the case when using Django 1.1 or higher)hNjubeubahjjubeubahjjubaubh^)r}r(hAX)Now depends on ``carrot`` version 0.6.0. hNjnhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX(Now depends on ``carrot`` version 0.6.0.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XNow depends on rr}r(hAXNow depends on hNjubh)r}r(hAX ``carrot``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcarrotrr}r(hAUhNjubahjhubh{X version 0.6.0.rr}r(hAX version 0.6.0.hNjubeubaubh^)r}r(hAX#Now depends on python-daemon 1.4.8 hNjnhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX"Now depends on python-daemon 1.4.8rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X"Now depends on python-daemon 1.4.8rr}r(hAjhNjubaubaubeubeubhd)r}r(hAUjKhNjPhihIhjhkhB}r(hD]rj ahK]hF]hE]rUid14rahL]uhpMhqhhr]r(ht)r }r (hAXIMPORTANT CHANGESr hNjhihIhjhxhB}r (hD]hK]hF]hE]hL]uhpMhqhhr]r h{XIMPORTANT CHANGESrr}r(hAj hNj ubaubha)r}r(hAUhNjhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpMhqhhr]rh^)r}r(hAXCelery can now be used in pure Python (outside of a Django project). This means celery is no longer Django specific. For more information see the FAQ entry `Can I use celery without Django?`_. hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXCelery can now be used in pure Python (outside of a Django project). This means celery is no longer Django specific. For more information see the FAQ entry `Can I use celery without Django?`_. hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMhr]r (j)r!}r"(hAXDCelery can now be used in pure Python (outside of a Django project).r#hNjhihIhjjhB}r$(hD]hK]hF]hE]hL]uhpMhr]r%h{XDCelery can now be used in pure Python (outside of a Django project).r&r'}r((hAj#hNj!ubaubhO)r)}r*(hAUhB}r+(hD]hK]hF]hE]hL]uhNjhr]r,(h)r-}r.(hAX/This means celery is no longer Django specific.r/hNj)hihIhjhhB}r0(hD]hK]hF]hE]hL]uhpMhr]r1h{X/This means celery is no longer Django specific.r2r3}r4(hAj/hNj-ubaubh)r5}r6(hAXKFor more information see the FAQ entry `Can I use celery without Django?`_.hNj)hihIhjhhB}r7(hD]hK]hF]hE]hL]uhpMhr]r8(h{X'For more information see the FAQ entry r9r:}r;(hAX'For more information see the FAQ entry hNj5ubjC)r<}r=(hAX#`Can I use celery without Django?`_Uresolvedr>KhNj5hjjLhB}r?(UnameX Can I use celery without Django?Urefurir@XEhttp://ask.github.com/celery/faq.html#can-i-use-celery-without-djangorAhE]hF]hD]hK]hL]uhr]rBh{X Can I use celery without Django?rCrD}rE(hAUhNj<ubaubh{X.rF}rG(hAX.hNj5ubeubehjjubeubahjjubaubaubj)rH}rI(hAXu.. _`Can I use celery without Django?`: http://ask.github.com/celery/faq.html#can-i-use-celery-without-djangojKhNjhihIhjjhB}rJ(j@jAhE]rKUcan-i-use-celery-without-djangorLahF]hD]hK]hL]rMh$auhpMhqhhr]ubha)rN}rO(hAUhNjhihIhjhhB}rP(hX*hE]hF]hD]hK]hL]uhpMhqhhr]rQh^)rR}rS(hAX_Celery now supports task retries. See `Cookbook: Retrying Tasks`_ for more information. hNjNhihIhjhhB}rT(hD]hK]hF]hE]hL]uhpNhqhhr]rU(h)rV}rW(hAX!Celery now supports task retries.rXhNjRhihIhjhhB}rY(hD]hK]hF]hE]hL]uhpMhr]rZh{X!Celery now supports task retries.r[r\}r](hAjXhNjVubaubhZ)r^}r_(hAUhB}r`(hD]hK]hF]hE]hL]uhNjRhr]rah)rb}rc(hAX5See `Cookbook: Retrying Tasks`_ for more information.hNj^hihIhjhhB}rd(hD]hK]hF]hE]hL]uhpMhr]re(h{XSee rfrg}rh(hAXSee hNjbubjC)ri}rj(hAX`Cookbook: Retrying Tasks`_j>KhNjbhjjLhB}rk(UnameXCookbook: Retrying Tasksj@X7http://ask.github.com/celery/cookbook/task-retries.htmlrlhE]hF]hD]hK]hL]uhr]rmh{XCookbook: Retrying Tasksrnro}rp(hAUhNjiubaubh{X for more information.rqrr}rs(hAX for more information.hNjbubeubahjj+ubeubaubj)rt}ru(hAX_.. _`Cookbook: Retrying Tasks`: http://ask.github.com/celery/cookbook/task-retries.htmljKhNjhihIhjjhB}rv(j@jlhE]rwUcookbook-retrying-tasksrxahF]hD]hK]hL]ryh*auhpMhqhhr]ubha)rz}r{(hAUhNjhihIhjhhB}r|(hX*hE]hF]hD]hK]hL]uhpMhqhhr]r}(h^)r~}r(hAXWe now have an AMQP result store backend. It uses messages to publish task return value and status. And it's incredibly fast! See http://github.com/ask/celery/issues/closed#issue/6 for more info! hNjzhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX)We now have an AMQP result store backend.rhNj~hihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X)We now have an AMQP result store backend.rr}r(hAjhNjubaubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNj~hr]r(h)r}r(hAXSIt uses messages to publish task return value and status. And it's incredibly fast!rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XSIt uses messages to publish task return value and status. And it's incredibly fast!rr}r(hAjhNjubaubh)r}r(hAXESee http://github.com/ask/celery/issues/closed#issue/6 for more info!hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XSee rr}r(hAXSee hNjubjC)r}r(hAX2http://github.com/ask/celery/issues/closed#issue/6rhB}r(UrefurijhE]hF]hD]hK]hL]uhNjhr]rh{X2http://github.com/ask/celery/issues/closed#issue/6rr}r(hAUhNjubahjjLubh{X for more info!rr}r(hAX for more info!hNjubeubehjj+ubeubh^)r}r(hAXcAMQP QoS (prefetch count) implemented: This to not receive more messages than we can handle. hNjzhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAX]AMQP QoS (prefetch count) implemented: This to not receive more messages than we can handle. hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMhr]r(j)r}r(hAX&AMQP QoS (prefetch count) implemented:rhNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X&AMQP QoS (prefetch count) implemented:rr}r(hAjhNjubaubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAX5This to not receive more messages than we can handle.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X5This to not receive more messages than we can handle.rr}r(hAjhNjubaubahjjubeubahjjubaubh^)r}r(hAXANow redirects stdout/stderr to the celeryd logfile when detached hNjzhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX@Now redirects stdout/stderr to the celeryd logfile when detachedrhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X@Now redirects stdout/stderr to the celeryd logfile when detachedrr}r(hAjhNjubaubaubh^)r}r(hAXXNow uses ``inspect.getargspec`` to only pass default arguments the task supports. hNjzhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXRNow uses ``inspect.getargspec`` to only pass default arguments the task supports. hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpM hr]r(j)r}r(hAX>Now uses ``inspect.getargspec`` to only pass default argumentshNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpM hr]r(h{X Now uses rr}r(hAX Now uses hNjubh)r}r(hAX``inspect.getargspec``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xinspect.getargspecrr}r(hAUhNjubahjhubh{X to only pass default argumentsrr}r(hAX to only pass default argumentshNjubeubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXthe task supports.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM hr]rh{Xthe task supports.rr}r(hAjhNjubaubahjjubeubahjjubaubh^)r}r(hAXAdd Task.on_success, .on_retry, .on_failure handlers See :meth:`celery.task.base.Task.on_success`, :meth:`celery.task.base.Task.on_retry`, :meth:`celery.task.base.Task.on_failure`, hNjzhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXAdd Task.on_success, .on_retry, .on_failure handlers See :meth:`celery.task.base.Task.on_success`, :meth:`celery.task.base.Task.on_retry`, :meth:`celery.task.base.Task.on_failure`, hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMhr]r(j)r }r (hAX4Add Task.on_success, .on_retry, .on_failure handlersr hNjhihIhjjhB}r (hD]hK]hF]hE]hL]uhpMhr]r h{X4Add Task.on_success, .on_retry, .on_failure handlersrr}r(hAj hNj ubaubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXSee :meth:`celery.task.base.Task.on_success`, :meth:`celery.task.base.Task.on_retry`, :meth:`celery.task.base.Task.on_failure`, hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMhr]r(j)r}r(hAX-See :meth:`celery.task.base.Task.on_success`,hNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpMhr]r (h{XSee r!r"}r#(hAXSee hNjubj)r$}r%(hAX(:meth:`celery.task.base.Task.on_success`r&hNjhihIhjjhB}r'(UreftypeXmethjjX celery.task.base.Task.on_successU refdomainXpyr(hE]hF]U refexplicithD]hK]hL]jjjNjNuhpMhr]r)h)r*}r+(hAj&hB}r,(hD]hK]r-(j#j(Xpy-methr.ehF]hE]hL]uhNj$hr]r/h{X"celery.task.base.Task.on_success()r0r1}r2(hAUhNj*ubahjhubaubh{X,r3}r4(hAX,hNjubeubhO)r5}r6(hAUhB}r7(hD]hK]hF]hE]hL]uhNjhr]r8hV)r9}r:(hAUhB}r;(hD]hK]hF]hE]hL]uhNj5hr]r<hS)r=}r>(hAXR:meth:`celery.task.base.Task.on_retry`, :meth:`celery.task.base.Task.on_failure`, hNj9hihIhjj|hB}r?(hD]hK]hF]hE]hL]uhpMhr]r@(j)rA}rB(hAX':meth:`celery.task.base.Task.on_retry`,hNj=hihIhjjhB}rC(hD]hK]hF]hE]hL]uhpMhr]rD(j)rE}rF(hAX&:meth:`celery.task.base.Task.on_retry`rGhNjAhihIhjjhB}rH(UreftypeXmethjjXcelery.task.base.Task.on_retryU refdomainXpyrIhE]hF]U refexplicithD]hK]hL]jjjNjNuhpMhr]rJh)rK}rL(hAjGhB}rM(hD]hK]rN(j#jIXpy-methrOehF]hE]hL]uhNjEhr]rPh{X celery.task.base.Task.on_retry()rQrR}rS(hAUhNjKubahjhubaubh{X,rT}rU(hAX,hNjAubeubhO)rV}rW(hAUhB}rX(hD]hK]hF]hE]hL]uhNj=hr]rYh)rZ}r[(hAX):meth:`celery.task.base.Task.on_failure`,hNjVhihIhjhhB}r\(hD]hK]hF]hE]hL]uhpMhr]r](j)r^}r_(hAX(:meth:`celery.task.base.Task.on_failure`r`hNjZhihIhjjhB}ra(UreftypeXmethjjX celery.task.base.Task.on_failureU refdomainXpyrbhE]hF]U refexplicithD]hK]hL]jjjNjNuhpMhr]rch)rd}re(hAj`hB}rf(hD]hK]rg(j#jbXpy-methrhehF]hE]hL]uhNj^hr]rih{X"celery.task.base.Task.on_failure()rjrk}rl(hAUhNjdubahjhubaubh{X,rm}rn(hAX,hNjZubeubahjjubeubahjjubahjjubeubahjjubahjjubeubahjjubaubh^)ro}rp(hAXV``celery.utils.gen_unique_id``: Workaround for http://bugs.python.org/issue4607 hNjzhiNhjhhB}rq(hD]hK]hF]hE]hL]uhpNhqhhr]rrhV)rs}rt(hAUhB}ru(hD]hK]hF]hE]hL]uhNjohr]rvhS)rw}rx(hAXP``celery.utils.gen_unique_id``: Workaround for http://bugs.python.org/issue4607 hNjshihIhjj|hB}ry(hD]hK]hF]hE]hL]uhpMhr]rz(j)r{}r|(hAX.``celery.utils.gen_unique_id``: Workaround forhNjwhihIhjjhB}r}(hD]hK]hF]hE]hL]uhpMhr]r~(h)r}r(hAX``celery.utils.gen_unique_id``hB}r(hD]hK]hF]hE]hL]uhNj{hr]rh{Xcelery.utils.gen_unique_idrr}r(hAUhNjubahjhubh{X: Workaround forrr}r(hAX: Workaround forhNj{ubeubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjwhr]rh)r}r(hAX http://bugs.python.org/issue4607rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rjC)r}r(hAjhB}r(UrefurijhE]hF]hD]hK]hL]uhNjhr]rh{X http://bugs.python.org/issue4607rr}r(hAUhNjubahjjLubaubahjjubeubahjjubaubh^)r}r(hAXYou can now customize what happens at worker start, at process init, etc by creating your own loaders. (see :mod:`celery.loaders.default`, :mod:`celery.loaders.djangoapp`, :mod:`celery.loaders`.) hNjzhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXYou can now customize what happens at worker start, at process init, etc by creating your own loaders. (see :mod:`celery.loaders.default`, :mod:`celery.loaders.djangoapp`, :mod:`celery.loaders`.) hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMhr]r(j)r}r(hAXHYou can now customize what happens at worker start, at process init, etcrhNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XHYou can now customize what happens at worker start, at process init, etcrr}r(hAjhNjubaubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXzby creating your own loaders. (see :mod:`celery.loaders.default`, :mod:`celery.loaders.djangoapp`, :mod:`celery.loaders`.)hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{X#by creating your own loaders. (see rr}r(hAX#by creating your own loaders. (see hNjubj)r}r(hAX:mod:`celery.loaders.default`rhNjhihIhjjhB}r(UreftypeXmodjjXcelery.loaders.defaultU refdomainXpyrhE]hF]U refexplicithD]hK]hL]jjjNjNuhpMhr]rh)r}r(hAjhB}r(hD]hK]r(j#jXpy-modrehF]hE]hL]uhNjhr]rh{Xcelery.loaders.defaultrr}r(hAUhNjubahjhubaubh{X, rr}r(hAX, hNjubj)r}r(hAX:mod:`celery.loaders.djangoapp`rhNjhihIhjjhB}r(UreftypeXmodjjXcelery.loaders.djangoappU refdomainXpyrhE]hF]U refexplicithD]hK]hL]jjjNjNuhpMhr]rh)r}r(hAjhB}r(hD]hK]r(j#jXpy-modrehF]hE]hL]uhNjhr]rh{Xcelery.loaders.djangoapprr}r(hAUhNjubahjhubaubh{X, rr}r(hAX, hNjubj)r}r(hAX:mod:`celery.loaders`rhNjhihIhjjhB}r(UreftypeXmodjjXcelery.loadersU refdomainXpyrhE]hF]U refexplicithD]hK]hL]jjjNjNuhpMhr]rh)r}r(hAjhB}r(hD]hK]r(j#jXpy-modrehF]hE]hL]uhNjhr]rh{Xcelery.loadersrr}r(hAUhNjubahjhubaubh{X.)rr}r(hAX.)hNjubeubahjjubeubahjjubaubh^)r}r(hAXSupport for multiple AMQP exchanges and queues. This feature misses documentation and tests, so anyone interested is encouraged to improve this situation. hNjzhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX/Support for multiple AMQP exchanges and queues.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X/Support for multiple AMQP exchanges and queues.rr}r(hAjhNjubaubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXjThis feature misses documentation and tests, so anyone interested is encouraged to improve this situation.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XjThis feature misses documentation and tests, so anyone interested is encouraged to improve this situation.rr}r(hAjhNjubaubahjj+ubeubh^)r}r(hAX:celeryd now survives a restart of the AMQP server! Automatically re-establish AMQP broker connection if it's lost. New settings: * AMQP_CONNECTION_RETRY Set to ``True`` to enable connection retries. * AMQP_CONNECTION_MAX_RETRIES. Maximum number of restarts before we give up. Default: ``100``. hNjzhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r (h)r }r (hAX2celeryd now survives a restart of the AMQP server!r hNjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]rh{X2celeryd now survives a restart of the AMQP server!rr}r(hAj hNj ubaubh)r}r(hAX?Automatically re-establish AMQP broker connection if it's lost.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X?Automatically re-establish AMQP broker connection if it's lost.rr}r(hAjhNjubaubh)r}r(hAX New settings:rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM hr]rh{X New settings:rr }r!(hAjhNjubaubha)r"}r#(hAUhNjhiNhjhhB}r$(hX*hE]hF]hD]hK]hL]uhpNhqhhr]r%(h^)r&}r'(hAXFAMQP_CONNECTION_RETRY Set to ``True`` to enable connection retries. hB}r((hD]hK]hF]hE]hL]uhNj"hr]r)hV)r*}r+(hAUhB}r,(hD]hK]hF]hE]hL]uhNj&hr]r-hS)r.}r/(hAXDAMQP_CONNECTION_RETRY Set to ``True`` to enable connection retries. hNj*hihIhjj|hB}r0(hD]hK]hF]hE]hL]uhpM#hr]r1(j)r2}r3(hAXAMQP_CONNECTION_RETRYr4hNj.hihIhjjhB}r5(hD]hK]hF]hE]hL]uhpM#hr]r6h{XAMQP_CONNECTION_RETRYr7r8}r9(hAj4hNj2ubaubhO)r:}r;(hAUhB}r<(hD]hK]hF]hE]hL]uhNj.hr]r=h)r>}r?(hAX-Set to ``True`` to enable connection retries.hNj:hihIhjhhB}r@(hD]hK]hF]hE]hL]uhpM#hr]rA(h{XSet to rBrC}rD(hAXSet to hNj>ubh)rE}rF(hAX``True``hB}rG(hD]hK]hF]hE]hL]uhNj>hr]rHh{XTruerIrJ}rK(hAUhNjEubahjhubh{X to enable connection retries.rLrM}rN(hAX to enable connection retries.hNj>ubeubahjjubeubahjjubahjhubh^)rO}rP(hAX_AMQP_CONNECTION_MAX_RETRIES. Maximum number of restarts before we give up. Default: ``100``. hB}rQ(hD]hK]hF]hE]hL]uhNj"hr]rRhV)rS}rT(hAUhB}rU(hD]hK]hF]hE]hL]uhNjOhr]rVhS)rW}rX(hAX]AMQP_CONNECTION_MAX_RETRIES. Maximum number of restarts before we give up. Default: ``100``. hNjShihIhjj|hB}rY(hD]hK]hF]hE]hL]uhpM&hr]rZ(j)r[}r\(hAXAMQP_CONNECTION_MAX_RETRIES.r]hNjWhihIhjjhB}r^(hD]hK]hF]hE]hL]uhpM&hr]r_h{XAMQP_CONNECTION_MAX_RETRIES.r`ra}rb(hAj]hNj[ubaubhO)rc}rd(hAUhB}re(hD]hK]hF]hE]hL]uhNjWhr]rfh)rg}rh(hAX?Maximum number of restarts before we give up. Default: ``100``.rihNjchihIhjhhB}rj(hD]hK]hF]hE]hL]uhpM&hr]rk(h{X7Maximum number of restarts before we give up. Default: rlrm}rn(hAX7Maximum number of restarts before we give up. Default: hNjgubh)ro}rp(hAX``100``hB}rq(hD]hK]hF]hE]hL]uhNjghr]rrh{X100rsrt}ru(hAUhNjoubahjhubh{X.rv}rw(hAX.hNjgubeubahjjubeubahjjubahjhubeubeubeubeubhd)rx}ry(hAUjKhNjPhihIhjhkhB}rz(hD]r{Xnewsr|ahK]hF]hE]r}Uid15r~ahL]uhpM)hqhhr]r(ht)r}r(hAXNEWSrhNjxhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpM)hqhhr]rh{XNEWSrr}r(hAjhNjubaubha)r}r(hAUhNjxhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpM+hqhhr]r(h^)r}r(hAXFix an incompatibility between python-daemon and multiprocessing, which resulted in the ``[Errno 10] No child processes`` problem when detaching. hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXFix an incompatibility between python-daemon and multiprocessing, which resulted in the ``[Errno 10] No child processes`` problem when detaching. hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpM-hr]r(j)r}r(hAXAFix an incompatibility between python-daemon and multiprocessing,rhNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpM-hr]rh{XAFix an incompatibility between python-daemon and multiprocessing,rr}r(hAjhNjubaubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXOwhich resulted in the ``[Errno 10] No child processes`` problem when detaching.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM,hr]r(h{Xwhich resulted in the rr}r(hAXwhich resulted in the hNjubh)r}r(hAX!``[Errno 10] No child processes``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X[Errno 10] No child processesrr}r(hAUhNjubahjhubh{X problem when detaching.rr}r(hAX problem when detaching.hNjubeubahjjubeubahjjubaubh^)r}r(hAX{Fixed a possible DjangoUnicodeDecodeError being raised when saving pickled data to Django's memcached cache backend. hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXuFixed a possible DjangoUnicodeDecodeError being raised when saving pickled data to Django's memcached cache backend. hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpM0hr]r(j)r}r(hAXJFixed a possible DjangoUnicodeDecodeError being raised when saving pickledrhNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpM0hr]rh{XJFixed a possible DjangoUnicodeDecodeError being raised when saving pickledrr}r(hAjhNjubaubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAX)data to Django's memcached cache backend.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM0hr]rh{X)data to Django's memcached cache backend.rr}r(hAjhNjubaubahjjubeubahjjubaubh^)r}r(hAXBetter Windows compatibility. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXBetter Windows compatibility.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM2hr]rh{XBetter Windows compatibility.rr}r(hAjhNjubaubaubh^)r}r(hAX`New version of the pickled field (taken from http://www.djangosnippets.org/snippets/513/) hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXZNew version of the pickled field (taken from http://www.djangosnippets.org/snippets/513/) hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpM5hr]r(j)r}r(hAX,New version of the pickled field (taken fromrhNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpM5hr]rh{X,New version of the pickled field (taken fromrr}r(hAjhNjubaubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAX,http://www.djangosnippets.org/snippets/513/)hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM5hr]r(jC)r}r(hAX+http://www.djangosnippets.org/snippets/513/rhB}r(UrefurijhE]hF]hD]hK]hL]uhNjhr]rh{X+http://www.djangosnippets.org/snippets/513/rr}r(hAUhNjubahjjLubh{X)r}r(hAX)hNjubeubahjjubeubahjjubaubh^)r}r(hAXNew signals introduced: ``task_sent``, ``task_prerun`` and ``task_postrun``, see :mod:`celery.signals` for more information. hNjhiNhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r hV)r }r (hAUhB}r (hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAX}New signals introduced: ``task_sent``, ``task_prerun`` and ``task_postrun``, see :mod:`celery.signals` for more information. hNj hihIhjj|hB}r(hD]hK]hF]hE]hL]uhpM8hr]r(j)r}r(hAX:New signals introduced: ``task_sent``, ``task_prerun`` andhNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpM8hr]r(h{XNew signals introduced: rr}r(hAXNew signals introduced: hNjubh)r}r(hAX ``task_sent``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X task_sentrr}r (hAUhNjubahjhubh{X, r!r"}r#(hAX, hNjubh)r$}r%(hAX``task_prerun``hB}r&(hD]hK]hF]hE]hL]uhNjhr]r'h{X task_prerunr(r)}r*(hAUhNj$ubahjhubh{X andr+r,}r-(hAX andhNjubeubhO)r.}r/(hAUhB}r0(hD]hK]hF]hE]hL]uhNjhr]r1h)r2}r3(hAXA``task_postrun``, see :mod:`celery.signals` for more information.hNj.hihIhjhhB}r4(hD]hK]hF]hE]hL]uhpM8hr]r5(h)r6}r7(hAX``task_postrun``hB}r8(hD]hK]hF]hE]hL]uhNj2hr]r9h{X task_postrunr:r;}r<(hAUhNj6ubahjhubh{X, see r=r>}r?(hAX, see hNj2ubj)r@}rA(hAX:mod:`celery.signals`rBhNj2hihIhjjhB}rC(UreftypeXmodjjXcelery.signalsU refdomainXpyrDhE]hF]U refexplicithD]hK]hL]jjjNjNuhpM8hr]rEh)rF}rG(hAjBhB}rH(hD]hK]rI(j#jDXpy-modrJehF]hE]hL]uhNj@hr]rKh{Xcelery.signalsrLrM}rN(hAUhNjFubahjhubaubh{X for more information.rOrP}rQ(hAX for more information.hNj2ubeubahjjubeubahjjubaubh^)rR}rS(hAXj``TaskSetResult.join`` caused ``TypeError`` when ``timeout=None``. Thanks Jerzy Kozera. Closes #31 hNjhiNhjhhB}rT(hD]hK]hF]hE]hL]uhpNhqhhr]rUhV)rV}rW(hAUhB}rX(hD]hK]hF]hE]hL]uhNjRhr]rYhS)rZ}r[(hAXd``TaskSetResult.join`` caused ``TypeError`` when ``timeout=None``. Thanks Jerzy Kozera. Closes #31 hNjVhihIhjj|hB}r\(hD]hK]hF]hE]hL]uhpM;hr]r](j)r^}r_(hAXB``TaskSetResult.join`` caused ``TypeError`` when ``timeout=None``.hNjZhihIhjjhB}r`(hD]hK]hF]hE]hL]uhpM;hr]ra(h)rb}rc(hAX``TaskSetResult.join``hB}rd(hD]hK]hF]hE]hL]uhNj^hr]reh{XTaskSetResult.joinrfrg}rh(hAUhNjbubahjhubh{X caused rirj}rk(hAX caused hNj^ubh)rl}rm(hAX ``TypeError``hB}rn(hD]hK]hF]hE]hL]uhNj^hr]roh{X TypeErrorrprq}rr(hAUhNjlubahjhubh{X when rsrt}ru(hAX when hNj^ubh)rv}rw(hAX``timeout=None``hB}rx(hD]hK]hF]hE]hL]uhNj^hr]ryh{X timeout=Nonerzr{}r|(hAUhNjvubahjhubh{X.r}}r~(hAX.hNj^ubeubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjZhr]rh)r}r(hAX Thanks Jerzy Kozera. Closes #31rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM;hr]rh{X Thanks Jerzy Kozera. Closes #31rr}r(hAjhNjubaubahjjubeubahjjubaubh^)r}r(hAXb``views.apply`` should return ``HttpResponse`` instance. Thanks to Jerzy Kozera. Closes #32 hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAX\``views.apply`` should return ``HttpResponse`` instance. Thanks to Jerzy Kozera. Closes #32 hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpM>hr]r(j)r}r(hAX8``views.apply`` should return ``HttpResponse`` instance.hNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpM>hr]r(h)r}r(hAX``views.apply``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X views.applyrr}r(hAUhNjubahjhubh{X should return rr}r(hAX should return hNjubh)r}r(hAX``HttpResponse``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X HttpResponserr}r(hAUhNjubahjhubh{X instance.rr}r(hAX instance.hNjubeubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAX"Thanks to Jerzy Kozera. Closes #32rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM>hr]rh{X"Thanks to Jerzy Kozera. Closes #32rr}r(hAjhNjubaubahjjubeubahjjubaubh^)r}r(hAX``PeriodicTask``: Save conversion of ``run_every`` from ``int`` to ``timedelta`` to the class attribute instead of on the instance. hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAX``PeriodicTask``: Save conversion of ``run_every`` from ``int`` to ``timedelta`` to the class attribute instead of on the instance. hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMAhr]r(j)r}r(hAX?``PeriodicTask``: Save conversion of ``run_every`` from ``int``hNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpMAhr]r(h)r}r(hAX``PeriodicTask``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X PeriodicTaskrr}r(hAUhNjubahjhubh{X: Save conversion of rr}r(hAX: Save conversion of hNjubh)r}r(hAX ``run_every``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X run_everyrr}r(hAUhNjubahjhubh{X from rr}r(hAX from hNjubh)r}r(hAX``int``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xintrr}r(hAUhNjubahjhubeubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXCto ``timedelta`` to the class attribute instead of on the instance.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMAhr]r(h{Xto rr}r(hAXto hNjubh)r}r(hAX ``timedelta``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X timedeltarr}r(hAUhNjubahjhubh{X3 to the class attribute instead of on the instance.rr}r(hAX3 to the class attribute instead of on the instance.hNjubeubahjjubeubahjjubaubh^)r}r(hAXjExceptions has been moved to ``celery.exceptions``, but are still available in the previous module. hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXdExceptions has been moved to ``celery.exceptions``, but are still available in the previous module. hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMDhr]r(j)r}r(hAXAExceptions has been moved to ``celery.exceptions``, but are stillhNjhihIhjjhB}r (hD]hK]hF]hE]hL]uhpMDhr]r (h{XExceptions has been moved to r r }r (hAXExceptions has been moved to hNjubh)r}r(hAX``celery.exceptions``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcelery.exceptionsrr}r(hAUhNjubahjhubh{X, but are stillrr}r(hAX, but are stillhNjubeubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAX!available in the previous module.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMDhr]r h{X!available in the previous module.r!r"}r#(hAjhNjubaubahjjubeubahjjubaubh^)r$}r%(hAXTry to rollback transaction and retry saving result if an error happens while setting task status with the database backend. hNjhiNhjhhB}r&(hD]hK]hF]hE]hL]uhpNhqhhr]r'hV)r(}r)(hAUhB}r*(hD]hK]hF]hE]hL]uhNj$hr]r+hS)r,}r-(hAX}Try to rollback transaction and retry saving result if an error happens while setting task status with the database backend. hNj(hihIhjj|hB}r.(hD]hK]hF]hE]hL]uhpMGhr]r/(j)r0}r1(hAXGTry to rollback transaction and retry saving result if an error happensr2hNj,hihIhjjhB}r3(hD]hK]hF]hE]hL]uhpMGhr]r4h{XGTry to rollback transaction and retry saving result if an error happensr5r6}r7(hAj2hNj0ubaubhO)r8}r9(hAUhB}r:(hD]hK]hF]hE]hL]uhNj,hr]r;h)r<}r=(hAX4while setting task status with the database backend.r>hNj8hihIhjhhB}r?(hD]hK]hF]hE]hL]uhpMGhr]r@h{X4while setting task status with the database backend.rArB}rC(hAj>hNj<ubaubahjjubeubahjjubaubh^)rD}rE(hAX?jail() refactored into :class:`celery.execute.ExecuteWrapper`. hNjhihIhjhhB}rF(hD]hK]hF]hE]hL]uhpNhqhhr]rGh)rH}rI(hAX>jail() refactored into :class:`celery.execute.ExecuteWrapper`.hNjDhihIhjhhB}rJ(hD]hK]hF]hE]hL]uhpMIhr]rK(h{Xjail() refactored into rLrM}rN(hAXjail() refactored into hNjHubj)rO}rP(hAX&:class:`celery.execute.ExecuteWrapper`rQhNjHhihIhjjhB}rR(UreftypeXclassjjXcelery.execute.ExecuteWrapperU refdomainXpyrShE]hF]U refexplicithD]hK]hL]jjjNjNuhpMIhr]rTh)rU}rV(hAjQhB}rW(hD]hK]rX(j#jSXpy-classrYehF]hE]hL]uhNjOhr]rZh{Xcelery.execute.ExecuteWrapperr[r\}r](hAUhNjUubahjhubaubh{X.r^}r_(hAX.hNjHubeubaubh^)r`}ra(hAXB``views.apply`` now correctly sets mimetype to "application/json" hNjhihIhjhhB}rb(hD]hK]hF]hE]hL]uhpNhqhhr]rch)rd}re(hAXA``views.apply`` now correctly sets mimetype to "application/json"hNj`hihIhjhhB}rf(hD]hK]hF]hE]hL]uhpMKhr]rg(h)rh}ri(hAX``views.apply``hB}rj(hD]hK]hF]hE]hL]uhNjdhr]rkh{X views.applyrlrm}rn(hAUhNjhubahjhubh{X2 now correctly sets mimetype to "application/json"rorp}rq(hAX2 now correctly sets mimetype to "application/json"hNjdubeubaubh^)rr}rs(hAX?``views.task_status`` now returns exception if status is RETRY hNjhihIhjhhB}rt(hD]hK]hF]hE]hL]uhpNhqhhr]ruh)rv}rw(hAX>``views.task_status`` now returns exception if status is RETRYhNjrhihIhjhhB}rx(hD]hK]hF]hE]hL]uhpMMhr]ry(h)rz}r{(hAX``views.task_status``hB}r|(hD]hK]hF]hE]hL]uhNjvhr]r}h{Xviews.task_statusr~r}r(hAUhNjzubahjhubh{X) now returns exception if status is RETRYrr}r(hAX) now returns exception if status is RETRYhNjvubeubaubh^)r}r(hAXT``views.task_status`` now returns traceback if status is "FAILURE" or "RETRY" hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXN``views.task_status`` now returns traceback if status is "FAILURE" or "RETRY" hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMPhr]r(j)r}r(hAXB``views.task_status`` now returns traceback if status is "FAILURE"hNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpMPhr]r(h)r}r(hAX``views.task_status``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xviews.task_statusrr}r(hAUhNjubahjhubh{X- now returns traceback if status is "FAILURE"rr}r(hAX- now returns traceback if status is "FAILURE"hNjubeubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAX or "RETRY"rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMPhr]rh{X or "RETRY"rr}r(hAjhNjubaubahjjubeubahjjubaubh^)r}r(hAX#Documented default task arguments. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX"Documented default task arguments.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMRhr]rh{X"Documented default task arguments.rr}r(hAjhNjubaubaubh^)r}r(hAX>Add a sensible __repr__ to ExceptionInfo for easier debugging hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX=Add a sensible __repr__ to ExceptionInfo for easier debuggingrhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMThr]rh{X=Add a sensible __repr__ to ExceptionInfo for easier debuggingrr}r(hAjhNjubaubaubh^)r}r(hAXWFix documentation typo ``.. import map`` -> ``.. import dmap``. Thanks mikedizon hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXQFix documentation typo ``.. import map`` -> ``.. import dmap``. Thanks mikedizon hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMWhr]r(j)r}r(hAX?Fix documentation typo ``.. import map`` -> ``.. import dmap``.hNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpMWhr]r(h{XFix documentation typo rr}r(hAXFix documentation typo hNjubh)r}r(hAX``.. import map``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X .. import maprr}r(hAUhNjubahjhubh{X -> rr}r(hAX -> hNjubh)r}r(hAX``.. import dmap``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X.. import dmaprr}r(hAUhNjubahjhubh{X.r}r(hAX.hNjubeubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXThanks mikedizonrhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMWhr]rh{XThanks mikedizonrr}r(hAjhNjubaubahjjubeubahjjubaubeubeubeubhd)r}r(hAUhNhghihIhjhkhB}r(hD]hK]hF]hE]rUa-m-cetrahL]rhauhpMZhqhhr]r(ht)r}r(hAX 0.6.0 [2009-08-07 06:54 A.M CET]rhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpMZhqhhr]rh{X 0.6.0 [2009-08-07 06:54 A.M CET]rr}r(hAjhNjubaubhd)r}r(hAUjKhNjhihIhjhkhB}r(hD]rXimportant changesrahK]hF]hE]rUid16r ahL]uhpM]hqhhr]r (ht)r }r (hAXIMPORTANT CHANGESr hNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpM]hqhhr]rh{XIMPORTANT CHANGESrr}r(hAj hNj ubaubha)r}r(hAUhNjhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpM_hqhhr]r(h^)r}r(hAXFixed a bug where tasks raising unpickleable exceptions crashed pool workers. So if you've had pool workers mysteriously dissapearing, or problems with celeryd stopping working, this has been fixed in this version. hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r (hAXFixed a bug where tasks raising unpickleable exceptions crashed pool workers. So if you've had pool workers mysteriously dissapearing, or problems with celeryd stopping working, this has been fixed in this version. hNjhihIhjj|hB}r!(hD]hK]hF]hE]hL]uhpMbhr]r"(j)r#}r$(hAXDFixed a bug where tasks raising unpickleable exceptions crashed poolr%hNjhihIhjjhB}r&(hD]hK]hF]hE]hL]uhpMbhr]r'h{XDFixed a bug where tasks raising unpickleable exceptions crashed poolr(r)}r*(hAj%hNj#ubaubhO)r+}r,(hAUhB}r-(hD]hK]hF]hE]hL]uhNjhr]r.h)r/}r0(hAXworkers. So if you've had pool workers mysteriously dissapearing, or problems with celeryd stopping working, this has been fixed in this version.r1hNj+hihIhjhhB}r2(hD]hK]hF]hE]hL]uhpM`hr]r3h{Xworkers. So if you've had pool workers mysteriously dissapearing, or problems with celeryd stopping working, this has been fixed in this version.r4r5}r6(hAj1hNj/ubaubahjjubeubahjjubaubh^)r7}r8(hAX,Fixed a race condition with periodic tasks. hNjhihIhjhhB}r9(hD]hK]hF]hE]hL]uhpNhqhhr]r:h)r;}r<(hAX+Fixed a race condition with periodic tasks.r=hNj7hihIhjhhB}r>(hD]hK]hF]hE]hL]uhpMdhr]r?h{X+Fixed a race condition with periodic tasks.r@rA}rB(hAj=hNj;ubaubaubh^)rC}rD(hAXThe task pool is now supervised, so if a pool worker crashes, goes away or stops responding, it is automatically replaced with a new one. hNjhiNhjhhB}rE(hD]hK]hF]hE]hL]uhpNhqhhr]rFhV)rG}rH(hAUhB}rI(hD]hK]hF]hE]hL]uhNjChr]rJhS)rK}rL(hAXThe task pool is now supervised, so if a pool worker crashes, goes away or stops responding, it is automatically replaced with a new one. hNjGhihIhjj|hB}rM(hD]hK]hF]hE]hL]uhpMhhr]rN(j)rO}rP(hAX=The task pool is now supervised, so if a pool worker crashes,rQhNjKhihIhjjhB}rR(hD]hK]hF]hE]hL]uhpMhhr]rSh{X=The task pool is now supervised, so if a pool worker crashes,rTrU}rV(hAjQhNjOubaubhO)rW}rX(hAUhB}rY(hD]hK]hF]hE]hL]uhNjKhr]rZh)r[}r\(hAXKgoes away or stops responding, it is automatically replaced with a new one.r]hNjWhihIhjhhB}r^(hD]hK]hF]hE]hL]uhpMghr]r_h{XKgoes away or stops responding, it is automatically replaced with a new one.r`ra}rb(hAj]hNj[ubaubahjjubeubahjjubaubh^)rc}rd(hAXTask.name is now automatically generated out of class module+name, e.g. ``"djangotwitter.tasks.UpdateStatusesTask"``. Very convenient. No idea why we didn't do this before. Some documentation is updated to not manually specify a task name. hNjhiNhjhhB}re(hD]hK]hF]hE]hL]uhpNhqhhr]rfhV)rg}rh(hAUhB}ri(hD]hK]hF]hE]hL]uhNjchr]rjhS)rk}rl(hAXTask.name is now automatically generated out of class module+name, e.g. ``"djangotwitter.tasks.UpdateStatusesTask"``. Very convenient. No idea why we didn't do this before. Some documentation is updated to not manually specify a task name. hNjghihIhjj|hB}rm(hD]hK]hF]hE]hL]uhpMmhr]rn(j)ro}rp(hAXGTask.name is now automatically generated out of class module+name, e.g.rqhNjkhihIhjjhB}rr(hD]hK]hF]hE]hL]uhpMmhr]rsh{XGTask.name is now automatically generated out of class module+name, e.g.rtru}rv(hAjqhNjoubaubhO)rw}rx(hAUhB}ry(hD]hK]hF]hE]hL]uhNjkhr]rzh)r{}r|(hAX``"djangotwitter.tasks.UpdateStatusesTask"``. Very convenient. No idea why we didn't do this before. Some documentation is updated to not manually specify a task name.hNjwhihIhjhhB}r}(hD]hK]hF]hE]hL]uhpMkhr]r~(h)r}r(hAX,``"djangotwitter.tasks.UpdateStatusesTask"``hB}r(hD]hK]hF]hE]hL]uhNj{hr]rh{X("djangotwitter.tasks.UpdateStatusesTask"rr}r(hAUhNjubahjhubh{X{. Very convenient. No idea why we didn't do this before. Some documentation is updated to not manually specify a task name.rr}r(hAX{. Very convenient. No idea why we didn't do this before. Some documentation is updated to not manually specify a task name.hNj{ubeubahjjubeubahjjubaubeubeubhd)r}r(hAUjKhNjhihIhjhkhB}r(hD]rXnewsrahK]hF]hE]rUid17rahL]uhpMphqhhr]r(ht)r}r(hAXNEWSrhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpMphqhhr]rh{XNEWSrr}r(hAjhNjubaubha)r}r(hAUhNjhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpMrhqhhr]r(h^)r}r(hAXTested with Django 1.1 hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXTested with Django 1.1rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMrhr]rh{XTested with Django 1.1rr}r(hAjhNjubaubaubh^)r}r(hAX?New Tutorial: Creating a click counter using carrot and celery hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX>New Tutorial: Creating a click counter using carrot and celeryrhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMthr]rh{X>New Tutorial: Creating a click counter using carrot and celeryrr}r(hAjhNjubaubaubh^)r}r(hAXDatabase entries for periodic tasks are now created at ``celeryd`` startup instead of for each check (which has been a forgotten TODO/XXX in the code for a long time) hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXDatabase entries for periodic tasks are now created at ``celeryd`` startup instead of for each check (which has been a forgotten TODO/XXX in the code for a long time) hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMxhr]r(j)r}r(hAXBDatabase entries for periodic tasks are now created at ``celeryd``hNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpMxhr]r(h{X7Database entries for periodic tasks are now created at rr}r(hAX7Database entries for periodic tasks are now created at hNjubh)r}r(hAX ``celeryd``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcelerydrr}r(hAUhNjubahjhubeubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXcstartup instead of for each check (which has been a forgotten TODO/XXX in the code for a long time)rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMwhr]rh{Xcstartup instead of for each check (which has been a forgotten TODO/XXX in the code for a long time)rr}r(hAjhNjubaubahjjubeubahjjubaubh^)r}r(hAXNew settings variable: ``CELERY_TASK_RESULT_EXPIRES`` Time (in seconds, or a `datetime.timedelta` object) for when after stored task results are deleted. For the moment this only works for the database backend. hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXNew settings variable: ``CELERY_TASK_RESULT_EXPIRES`` Time (in seconds, or a `datetime.timedelta` object) for when after stored task results are deleted. For the moment this only works for the database backend. hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpM}hr]r(j)r}r(hAX5New settings variable: ``CELERY_TASK_RESULT_EXPIRES``hNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpM}hr]r(h{XNew settings variable: rr}r(hAXNew settings variable: hNjubh)r}r(hAX``CELERY_TASK_RESULT_EXPIRES``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XCELERY_TASK_RESULT_EXPIRESrr}r(hAUhNjubahjhubeubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXTime (in seconds, or a `datetime.timedelta` object) for when after stored task results are deleted. For the moment this only works for the database backend.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpM{hr]r(h{XTime (in seconds, or a rr}r(hAXTime (in seconds, or a hNjubj )r}r(hAX`datetime.timedelta`hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xdatetime.timedeltarr}r(hAUhNjubahjj ubh{Xq object) for when after stored task results are deleted. For the moment this only works for the database backend.rr}r (hAXq object) for when after stored task results are deleted. For the moment this only works for the database backend.hNjubeubahjjubeubahjjubaubh^)r }r (hAX\``celeryd`` now emits a debug log message for which periodic tasks has been launched. hNjhiNhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r hV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNj hr]rhS)r}r(hAXV``celeryd`` now emits a debug log message for which periodic tasks has been launched. hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMhr]r(j)r}r(hAXB``celeryd`` now emits a debug log message for which periodic taskshNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h)r}r(hAX ``celeryd``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcelerydrr}r (hAUhNjubahjhubh{X7 now emits a debug log message for which periodic tasksr!r"}r#(hAX7 now emits a debug log message for which periodic taskshNjubeubhO)r$}r%(hAUhB}r&(hD]hK]hF]hE]hL]uhNjhr]r'h)r(}r)(hAXhas been launched.r*hNj$hihIhjhhB}r+(hD]hK]hF]hE]hL]uhpMhr]r,h{Xhas been launched.r-r.}r/(hAj*hNj(ubaubahjjubeubahjjubaubh^)r0}r1(hAXThe periodic task table is now locked for reading while getting periodic task status. (MySQL only so far, seeking patches for other engines) hNjhiNhjhhB}r2(hD]hK]hF]hE]hL]uhpNhqhhr]r3hV)r4}r5(hAUhB}r6(hD]hK]hF]hE]hL]uhNj0hr]r7hS)r8}r9(hAXThe periodic task table is now locked for reading while getting periodic task status. (MySQL only so far, seeking patches for other engines) hNj4hihIhjj|hB}r:(hD]hK]hF]hE]hL]uhpMhr]r;(j)r<}r=(hAX?The periodic task table is now locked for reading while gettingr>hNj8hihIhjjhB}r?(hD]hK]hF]hE]hL]uhpMhr]r@h{X?The periodic task table is now locked for reading while gettingrArB}rC(hAj>hNj<ubaubhO)rD}rE(hAUhB}rF(hD]hK]hF]hE]hL]uhNj8hr]rGh)rH}rI(hAXLperiodic task status. (MySQL only so far, seeking patches for other engines)rJhNjDhihIhjhhB}rK(hD]hK]hF]hE]hL]uhpMhr]rLh{XLperiodic task status. (MySQL only so far, seeking patches for other engines)rMrN}rO(hAjJhNjHubaubahjjubeubahjjubaubh^)rP}rQ(hAXuA lot more debugging information is now available by turning on the ``DEBUG`` loglevel (``--loglevel=DEBUG``). hNjhiNhjhhB}rR(hD]hK]hF]hE]hL]uhpNhqhhr]rShV)rT}rU(hAUhB}rV(hD]hK]hF]hE]hL]uhNjPhr]rWhS)rX}rY(hAXoA lot more debugging information is now available by turning on the ``DEBUG`` loglevel (``--loglevel=DEBUG``). hNjThihIhjj|hB}rZ(hD]hK]hF]hE]hL]uhpMhr]r[(j)r\}r](hAXCA lot more debugging information is now available by turning on ther^hNjXhihIhjjhB}r_(hD]hK]hF]hE]hL]uhpMhr]r`h{XCA lot more debugging information is now available by turning on therarb}rc(hAj^hNj\ubaubhO)rd}re(hAUhB}rf(hD]hK]hF]hE]hL]uhNjXhr]rgh)rh}ri(hAX*``DEBUG`` loglevel (``--loglevel=DEBUG``).hNjdhihIhjhhB}rj(hD]hK]hF]hE]hL]uhpMhr]rk(h)rl}rm(hAX ``DEBUG``hB}rn(hD]hK]hF]hE]hL]uhNjhhr]roh{XDEBUGrprq}rr(hAUhNjlubahjhubh{X loglevel (rsrt}ru(hAX loglevel (hNjhubh)rv}rw(hAX``--loglevel=DEBUG``hB}rx(hD]hK]hF]hE]hL]uhNjhhr]ryh{X--loglevel=DEBUGrzr{}r|(hAUhNjvubahjhubh{X).r}r~}r(hAX).hNjhubeubahjjubeubahjjubaubh^)r}r(hAX?Functions/methods with a timeout argument now works correctly. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX>Functions/methods with a timeout argument now works correctly.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X>Functions/methods with a timeout argument now works correctly.rr}r(hAjhNjubaubaubh^)r}r(hAXNew: ``celery.strategy.even_time_distribution``: With an iterator yielding task args, kwargs tuples, evenly distribute the processing of its tasks throughout the time window available. hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXNew: ``celery.strategy.even_time_distribution``: With an iterator yielding task args, kwargs tuples, evenly distribute the processing of its tasks throughout the time window available. hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMhr]r(j)r}r(hAX0New: ``celery.strategy.even_time_distribution``:hNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XNew: rr}r(hAXNew: hNjubh)r}r(hAX*``celery.strategy.even_time_distribution``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X&celery.strategy.even_time_distributionrr}r(hAUhNjubahjhubh{X:r}r(hAX:hNjubeubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXWith an iterator yielding task args, kwargs tuples, evenly distribute the processing of its tasks throughout the time window available.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XWith an iterator yielding task args, kwargs tuples, evenly distribute the processing of its tasks throughout the time window available.rr}r(hAjhNjubaubahjjubeubahjjubaubh^)r}r(hAXCLog message ``Unknown task ignored...`` now has loglevel ``ERROR`` hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXBLog message ``Unknown task ignored...`` now has loglevel ``ERROR``hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{X Log message rr}r(hAX Log message hNjubh)r}r(hAX``Unknown task ignored...``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XUnknown task ignored...rr}r(hAUhNjubahjhubh{X now has loglevel rr}r(hAX now has loglevel hNjubh)r}r(hAX ``ERROR``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XERRORrr}r(hAUhNjubahjhubeubaubh^)r}r(hAXLog message ``"Got task from broker"`` is now emitted for all tasks, even if the task has an ETA (estimated time of arrival). Also the message now includes the ETA for the task (if any). hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXLog message ``"Got task from broker"`` is now emitted for all tasks, even if the task has an ETA (estimated time of arrival). Also the message now includes the ETA for the task (if any). hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMhr]r(j)r}r(hAXLLog message ``"Got task from broker"`` is now emitted for all tasks, even ifhNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{X Log message rr}r(hAX Log message hNjubh)r}r(hAX``"Got task from broker"``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X"Got task from broker"rr}r(hAUhNjubahjhubh{X& is now emitted for all tasks, even ifrr}r(hAX& is now emitted for all tasks, even ifhNjubeubhO)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXmthe task has an ETA (estimated time of arrival). Also the message now includes the ETA for the task (if any).rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{Xmthe task has an ETA (estimated time of arrival). Also the message now includes the ETA for the task (if any).rr}r(hAjhNjubaubahjjubeubahjjubaubh^)r}r(hAXAcknowledgement now happens in the pool callback. Can't do ack in the job target, as it's not pickleable (can't share AMQP connection, etc)). hNjhiNhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rhV)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rhS)r}r(hAXAcknowledgement now happens in the pool callback. Can't do ack in the job target, as it's not pickleable (can't share AMQP connection, etc)). hNjhihIhjj|hB}r(hD]hK]hF]hE]hL]uhpMhr]r(j)r}r(hAXIAcknowledgement now happens in the pool callback. Can't do ack in the jobrhNjhihIhjjhB}r(hD]hK]hF]hE]hL]uhpMhr]r h{XIAcknowledgement now happens in the pool callback. Can't do ack in the jobr r }r (hAjhNjubaubhO)r }r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXCtarget, as it's not pickleable (can't share AMQP connection, etc)).rhNj hihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XCtarget, as it's not pickleable (can't share AMQP connection, etc)).rr}r(hAjhNjubaubahjjubeubahjjubaubh^)r}r(hAX*Added note about .delay hanging in README hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX)Added note about .delay hanging in READMErhNjhihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r!h{X)Added note about .delay hanging in READMEr"r#}r$(hAjhNjubaubaubh^)r%}r&(hAX Tests now passing in Django 1.1 hNjhihIhjhhB}r'(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r)}r*(hAXTests now passing in Django 1.1r+hNj%hihIhjhhB}r,(hD]hK]hF]hE]hL]uhpMhr]r-h{XTests now passing in Django 1.1r.r/}r0(hAj+hNj)ubaubaubh^)r1}r2(hAX6Fixed discovery to make sure app is in INSTALLED_APPS hNjhihIhjhhB}r3(hD]hK]hF]hE]hL]uhpNhqhhr]r4h)r5}r6(hAX5Fixed discovery to make sure app is in INSTALLED_APPSr7hNj1hihIhjhhB}r8(hD]hK]hF]hE]hL]uhpMhr]r9h{X5Fixed discovery to make sure app is in INSTALLED_APPSr:r;}r<(hAj7hNj5ubaubaubh^)r=}r>(hAXPreviously overrided pool behaviour (process reap, wait until pool worker available, etc.) is now handled by ``multiprocessing.Pool`` itself. hNjhiNhjhhB}r?(hD]hK]hF]hE]hL]uhpNhqhhr]r@hV)rA}rB(hAUhB}rC(hD]hK]hF]hE]hL]uhNj=hr]rDhS)rE}rF(hAXPreviously overrided pool behaviour (process reap, wait until pool worker available, etc.) is now handled by ``multiprocessing.Pool`` itself. hNjAhihIhjj|hB}rG(hD]hK]hF]hE]hL]uhpMhr]rH(j)rI}rJ(hAXIPreviously overrided pool behaviour (process reap, wait until pool workerrKhNjEhihIhjjhB}rL(hD]hK]hF]hE]hL]uhpMhr]rMh{XIPreviously overrided pool behaviour (process reap, wait until pool workerrNrO}rP(hAjKhNjIubaubhO)rQ}rR(hAUhB}rS(hD]hK]hF]hE]hL]uhNjEhr]rTh)rU}rV(hAXCavailable, etc.) is now handled by ``multiprocessing.Pool`` itself.hNjQhihIhjhhB}rW(hD]hK]hF]hE]hL]uhpMhr]rX(h{X#available, etc.) is now handled by rYrZ}r[(hAX#available, etc.) is now handled by hNjUubh)r\}r](hAX``multiprocessing.Pool``hB}r^(hD]hK]hF]hE]hL]uhNjUhr]r_h{Xmultiprocessing.Poolr`ra}rb(hAUhNj\ubahjhubh{X itself.rcrd}re(hAX itself.hNjUubeubahjjubeubahjjubaubh^)rf}rg(hAXCConvert statistics data to unicode for use as kwargs. Thanks Lucy! hNjhihIhjhhB}rh(hD]hK]hF]hE]hL]uhpNhqhhr]rih)rj}rk(hAXBConvert statistics data to unicode for use as kwargs. Thanks Lucy!rlhNjfhihIhjhhB}rm(hD]hK]hF]hE]hL]uhpMhr]rnh{XBConvert statistics data to unicode for use as kwargs. Thanks Lucy!rorp}rq(hAjlhNjjubaubaubeubeubeubhd)rr}rs(hAUhNhghihIhjhkhB}rt(hD]hK]hF]hE]ruUid18rvahL]rwh'auhpMhqhhr]rx(ht)ry}rz(hAX 0.4.1 [2009-07-02 01:42 P.M CET]r{hNjrhihIhjhxhB}r|(hD]hK]hF]hE]hL]uhpMhqhhr]r}h{X 0.4.1 [2009-07-02 01:42 P.M CET]r~r}r(hAj{hNjyubaubha)r}r(hAUhNjrhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpMhqhhr]rh^)r}r(hAXkFixed a bug with parsing the message options (``mandatory``, ``routing_key``, ``priority``, ``immediate``) hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXjFixed a bug with parsing the message options (``mandatory``, ``routing_key``, ``priority``, ``immediate``)hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{X.Fixed a bug with parsing the message options (rr}r(hAX.Fixed a bug with parsing the message options (hNjubh)r}r(hAX ``mandatory``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X mandatoryrr}r(hAUhNjubahjhubh{X, rr}r(hAX, hNjubh)r}r(hAX``routing_key``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X routing_keyrr}r(hAUhNjubahjhubh{X, rr}r(hAX, hNjubh)r}r(hAX ``priority``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xpriorityrr}r(hAUhNjubahjhubh{X, rr}r(hAX, hNjubh)r}r(hAX ``immediate``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X immediaterr}r(hAUhNjubahjhubh{X)r}r(hAX)hNjubeubaubaubeubhd)r}r(hAUhNhghihIhjhkhB}r(hD]hK]hF]hE]rUid19rahL]rh6auhpMhqhhr]r(ht)r}r(hAX 0.4.0 [2009-07-01 07:29 P.M CET]rhNjhihIhjhxhB}r(hD]hK]hF]hE]hL]uhpMhqhhr]rh{X 0.4.0 [2009-07-01 07:29 P.M CET]rr}r(hAjhNjubaubha)r}r(hAUhNjhihIhjhhB}r(hX*hE]hF]hD]hK]hL]uhpMhqhhr]r(h^)r}r(hAX1Adds eager execution. ``celery.execute.apply``|``Task.apply`` executes the function blocking until the task is done, for API compatiblity it returns an ``celery.result.EagerResult`` instance. You can configure celery to always run tasks locally by setting the ``CELERY_ALWAYS_EAGER`` setting to ``True``. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX0Adds eager execution. ``celery.execute.apply``|``Task.apply`` executes the function blocking until the task is done, for API compatiblity it returns an ``celery.result.EagerResult`` instance. You can configure celery to always run tasks locally by setting the ``CELERY_ALWAYS_EAGER`` setting to ``True``.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XAdds eager execution. rr}r(hAXAdds eager execution. hNjubh)r}r(hAX'``celery.execute.apply``|``Task.apply``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X#celery.execute.apply``|``Task.applyrr}r(hAUhNjubahjhubh{X[ executes the function blocking until the task is done, for API compatiblity it returns an rr}r(hAX[ executes the function blocking until the task is done, for API compatiblity it returns an hNjubh)r}r(hAX``celery.result.EagerResult``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcelery.result.EagerResultrr}r(hAUhNjubahjhubh{XO instance. You can configure celery to always run tasks locally by setting the rr}r(hAXO instance. You can configure celery to always run tasks locally by setting the hNjubh)r}r(hAX``CELERY_ALWAYS_EAGER``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XCELERY_ALWAYS_EAGERrr}r(hAUhNjubahjhubh{X setting to rr}r(hAX setting to hNjubh)r}r(hAX``True``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XTruerr}r(hAUhNjubahjhubh{X.r}r(hAX.hNjubeubaubh^)r}r(hAXNow depends on ``anyjson``. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXNow depends on ``anyjson``.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XNow depends on rr}r(hAXNow depends on hNjubh)r}r(hAX ``anyjson``hB}r (hD]hK]hF]hE]hL]uhNjhr]r h{Xanyjsonr r }r (hAUhNjubahjhubh{X.r}r(hAX.hNjubeubaubh^)r}r(hAX,99% coverage using python ``coverage`` 3.0. hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX+99% coverage using python ``coverage`` 3.0.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{X99% coverage using python rr}r(hAX99% coverage using python hNjubh)r}r(hAX ``coverage``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcoveragerr }r!(hAUhNjubahjhubh{X 3.0.r"r#}r$(hAX 3.0.hNjubeubaubeubeubhd)r%}r&(hAUhNhghihIhjhkhB}r'(hD]hK]hF]hE]r(Uid20r)ahL]r*h2auhpMhqhhr]r+(ht)r,}r-(hAX!0.3.20 [2009-06-25 08:42 P.M CET]r.hNj%hihIhjhxhB}r/(hD]hK]hF]hE]hL]uhpMhqhhr]r0h{X!0.3.20 [2009-06-25 08:42 P.M CET]r1r2}r3(hAj.hNj,ubaubha)r4}r5(hAUhNj%hihIhjhhB}r6(hX*hE]hF]hD]hK]hL]uhpMhqhhr]r7(h^)r8}r9(hAXNew arguments to ``apply_async`` (the advanced version of ``delay_task``), ``countdown`` and ``eta``; >>> # Run 10 seconds into the future. >>> res = apply_async(MyTask, countdown=10); >>> # Run 1 day from now >>> res = apply_async(MyTask, eta=datetime.now() + ... timedelta(days=1) hNj4hihIhjhhB}r:(hD]hK]hF]hE]hL]uhpNhqhhr]r;(h)r<}r=(hAXeNew arguments to ``apply_async`` (the advanced version of ``delay_task``), ``countdown`` and ``eta``;hNj8hihIhjhhB}r>(hD]hK]hF]hE]hL]uhpMhr]r?(h{XNew arguments to r@rA}rB(hAXNew arguments to hNj<ubh)rC}rD(hAX``apply_async``hB}rE(hD]hK]hF]hE]hL]uhNj<hr]rFh{X apply_asyncrGrH}rI(hAUhNjCubahjhubh{X (the advanced version of rJrK}rL(hAX (the advanced version of hNj<ubh)rM}rN(hAX``delay_task``hB}rO(hD]hK]hF]hE]hL]uhNj<hr]rPh{X delay_taskrQrR}rS(hAUhNjMubahjhubh{X), rTrU}rV(hAX), hNj<ubh)rW}rX(hAX ``countdown``hB}rY(hD]hK]hF]hE]hL]uhNj<hr]rZh{X countdownr[r\}r](hAUhNjWubahjhubh{X and r^r_}r`(hAX and hNj<ubh)ra}rb(hAX``eta``hB}rc(hD]hK]hF]hE]hL]uhNj<hr]rdh{Xetarerf}rg(hAUhNjaubahjhubh{X;rh}ri(hAX;hNj<ubeubj)rj}rk(hAXR>>> # Run 10 seconds into the future. >>> res = apply_async(MyTask, countdown=10);hNj8hiNhjjhB}rl(hhhE]hF]hD]hK]hL]uhpNhqhhr]rmh{XR>>> # Run 10 seconds into the future. >>> res = apply_async(MyTask, countdown=10);rnro}rp(hAUhNjjubaubj)rq}rr(hAX>>> # Run 1 day from now >>> res = apply_async(MyTask, eta=datetime.now() + ... timedelta(days=1)hNj8hiNhjjhB}rs(hhhE]hF]hD]hK]hL]uhpNhqhhr]rth{X>>> # Run 1 day from now >>> res = apply_async(MyTask, eta=datetime.now() + ... timedelta(days=1)rurv}rw(hAUhNjqubaubeubh^)rx}ry(hAX'Now unlinks the pidfile if it's stale. hNj4hihIhjhhB}rz(hD]hK]hF]hE]hL]uhpNhqhhr]r{h)r|}r}(hAX&Now unlinks the pidfile if it's stale.r~hNjxhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X&Now unlinks the pidfile if it's stale.rr}r(hAj~hNj|ubaubaubh^)r}r(hAXLots of more tests. hNj4hihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXLots of more tests.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{XLots of more tests.rr}r(hAjhNjubaubaubh^)r}r(hAX%Now compatible with carrot >= 0.5.0. hNj4hihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX$Now compatible with carrot >= 0.5.0.rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X$Now compatible with carrot >= 0.5.0.rr}r(hAjhNjubaubaubh^)r}r(hAX**IMPORTANT** The ``subtask_ids`` attribute on the ``TaskSetResult`` instance has been removed. To get this information instead use: >>> subtask_ids = [subtask.task_id for subtask in ts_res.subtasks] hNj4hihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX**IMPORTANT** The ``subtask_ids`` attribute on the ``TaskSetResult`` instance has been removed. To get this information instead use:hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(j)r}r(hAX **IMPORTANT**hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X IMPORTANTrr}r(hAUhNjubahjjubh{X The rr}r(hAX The hNjubh)r}r(hAX``subtask_ids``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X subtask_idsrr}r(hAUhNjubahjhubh{X attribute on the rr}r(hAX attribute on the hNjubh)r}r(hAX``TaskSetResult``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X TaskSetResultrr}r(hAUhNjubahjhubh{X@ instance has been removed. To get this information instead use:rr}r(hAX@ instance has been removed. To get this information instead use:hNjubeubj)r}r(hAXB>>> subtask_ids = [subtask.task_id for subtask in ts_res.subtasks]hNjhiNhjjhB}r(hhhE]hF]hD]hK]hL]uhpNhqhhr]rh{XB>>> subtask_ids = [subtask.task_id for subtask in ts_res.subtasks]rr}r(hAUhNjubaubeubh^)r}r(hAXJ``Taskset.run()`` now respects extra message options from the task class. hNj4hihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXI``Taskset.run()`` now respects extra message options from the task class.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h)r}r(hAX``Taskset.run()``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X Taskset.run()rr}r(hAUhNjubahjhubh{X8 now respects extra message options from the task class.rr}r(hAX8 now respects extra message options from the task class.hNjubeubaubh^)r}r(hAXSTask: Add attribute ``ignore_result``: Don't store the status and return value. This means you can't use the ``celery.result.AsyncResult`` to check if the task is done, or get its return value. Only use if you need the performance and is able live without these features. Any exceptions raised will store the return value/status as usual. hNj4hihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXRTask: Add attribute ``ignore_result``: Don't store the status and return value. This means you can't use the ``celery.result.AsyncResult`` to check if the task is done, or get its return value. Only use if you need the performance and is able live without these features. Any exceptions raised will store the return value/status as usual.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XTask: Add attribute rr}r(hAXTask: Add attribute hNjubh)r}r(hAX``ignore_result``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X ignore_resultrr}r(hAUhNjubahjhubh{XH: Don't store the status and return value. This means you can't use the rr}r(hAXH: Don't store the status and return value. This means you can't use the hNjubh)r}r(hAX``celery.result.AsyncResult``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcelery.result.AsyncResultrr}r(hAUhNjubahjhubh{X to check if the task is done, or get its return value. Only use if you need the performance and is able live without these features. Any exceptions raised will store the return value/status as usual.rr}r(hAX to check if the task is done, or get its return value. Only use if you need the performance and is able live without these features. Any exceptions raised will store the return value/status as usual.hNjubeubaubh^)r}r(hAX\Task: Add attribute ``disable_error_emails`` to disable sending error emails for that task. hNj4hihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAX[Task: Add attribute ``disable_error_emails`` to disable sending error emails for that task.hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XTask: Add attribute rr}r(hAXTask: Add attribute hNjubh)r}r(hAX``disable_error_emails``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xdisable_error_emailsr r }r (hAUhNjubahjhubh{X/ to disable sending error emails for that task.r r }r(hAX/ to disable sending error emails for that task.hNjubeubaubh^)r}r(hAXShould now work on Windows (although running in the background won't work, so using the ``--detach`` argument results in an exception being raised.) hNj4hihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]rh)r}r(hAXShould now work on Windows (although running in the background won't work, so using the ``--detach`` argument results in an exception being raised.)hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{XXShould now work on Windows (although running in the background won't work, so using the rr}r(hAXXShould now work on Windows (although running in the background won't work, so using the hNjubh)r}r(hAX ``--detach``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X--detachrr}r (hAUhNjubahjhubh{X0 argument results in an exception being raised.)r!r"}r#(hAX0 argument results in an exception being raised.)hNjubeubaubh^)r$}r%(hAXAdded support for statistics for profiling and monitoring. To start sending statistics start ``celeryd`` with the ``--statistics`` option. Then after a while you can dump the results by running ``python manage.py celerystats``. See ``celery.monitoring`` for more information. hNj4hihIhjhhB}r&(hD]hK]hF]hE]hL]uhpNhqhhr]r'h)r(}r)(hAXAdded support for statistics for profiling and monitoring. To start sending statistics start ``celeryd`` with the ``--statistics`` option. Then after a while you can dump the results by running ``python manage.py celerystats``. See ``celery.monitoring`` for more information.hNj$hihIhjhhB}r*(hD]hK]hF]hE]hL]uhpMhr]r+(h{X]Added support for statistics for profiling and monitoring. To start sending statistics start r,r-}r.(hAX]Added support for statistics for profiling and monitoring. To start sending statistics start hNj(ubh)r/}r0(hAX ``celeryd``hB}r1(hD]hK]hF]hE]hL]uhNj(hr]r2h{Xcelerydr3r4}r5(hAUhNj/ubahjhubh{X with the r6r7}r8(hAX with the hNj(ubh)r9}r:(hAX``--statistics``hB}r;(hD]hK]hF]hE]hL]uhNj(hr]r<h{X --statisticsr=r>}r?(hAUhNj9ubahjhubh{X@ option. Then after a while you can dump the results by running r@rA}rB(hAX@ option. Then after a while you can dump the results by running hNj(ubh)rC}rD(hAX ``python manage.py celerystats``hB}rE(hD]hK]hF]hE]hL]uhNj(hr]rFh{Xpython manage.py celerystatsrGrH}rI(hAUhNjCubahjhubh{X. See rJrK}rL(hAX. See hNj(ubh)rM}rN(hAX``celery.monitoring``hB}rO(hD]hK]hF]hE]hL]uhNj(hr]rPh{Xcelery.monitoringrQrR}rS(hAUhNjMubahjhubh{X for more information.rTrU}rV(hAX for more information.hNj(ubeubaubh^)rW}rX(hAXThe celery daemon can now be supervised (i.e it is automatically restarted if it crashes). To use this start celeryd with the ``--supervised`` option (or alternatively ``-S``). hNj4hihIhjhhB}rY(hD]hK]hF]hE]hL]uhpNhqhhr]rZh)r[}r\(hAXThe celery daemon can now be supervised (i.e it is automatically restarted if it crashes). To use this start celeryd with the ``--supervised`` option (or alternatively ``-S``).hNjWhihIhjhhB}r](hD]hK]hF]hE]hL]uhpMhr]r^(h{X~The celery daemon can now be supervised (i.e it is automatically restarted if it crashes). To use this start celeryd with the r_r`}ra(hAX~The celery daemon can now be supervised (i.e it is automatically restarted if it crashes). To use this start celeryd with the hNj[ubh)rb}rc(hAX``--supervised``hB}rd(hD]hK]hF]hE]hL]uhNj[hr]reh{X --supervisedrfrg}rh(hAUhNjbubahjhubh{X option (or alternatively rirj}rk(hAX option (or alternatively hNj[ubh)rl}rm(hAX``-S``hB}rn(hD]hK]hF]hE]hL]uhNj[hr]roh{X-Srprq}rr(hAUhNjlubahjhubh{X).rsrt}ru(hAX).hNj[ubeubaubh^)rv}rw(hAXviews.apply: View applying a task. Example:: http://e.com/celery/apply/task_name/arg1/arg2//?kwarg1=a&kwarg2=b **NOTE** Use with caution, preferably not make this publicly accessible without ensuring your code is safe! hNj4hihIhjhhB}rx(hD]hK]hF]hE]hL]uhpNhqhhr]ry(h)rz}r{(hAX,views.apply: View applying a task. Example::hNjvhihIhjhhB}r|(hD]hK]hF]hE]hL]uhpMhr]r}h{X+views.apply: View applying a task. Example:r~r}r(hAX+views.apply: View applying a task. Example:hNjzubaubh)r}r(hAXAhttp://e.com/celery/apply/task_name/arg1/arg2//?kwarg1=a&kwarg2=bhNjvhjhhB}r(hhhE]hF]hD]hK]hL]uhpMhr]rh{XAhttp://e.com/celery/apply/task_name/arg1/arg2//?kwarg1=a&kwarg2=brr}r(hAUhNjubaubh)r}r(hAXk**NOTE** Use with caution, preferably not make this publicly accessible without ensuring your code is safe!hNjvhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(j)r}r(hAX**NOTE**hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{XNOTErr}r(hAUhNjubahjjubh{Xc Use with caution, preferably not make this publicly accessible without ensuring your code is safe!rr}r(hAXc Use with caution, preferably not make this publicly accessible without ensuring your code is safe!hNjubeubeubh^)r}r(hAX1Refactored ``celery.task``. It's now split into three modules: * celery.task Contains ``apply_async``, ``delay_task``, ``discard_all``, and task shortcuts, plus imports objects from ``celery.task.base`` and ``celery.task.builtins`` * celery.task.base Contains task base classes: ``Task``, ``PeriodicTask``, ``TaskSet``, ``AsynchronousMapTask``, ``ExecuteRemoteTask``. * celery.task.builtins Built-in tasks: ``PingTask``, ``DeleteExpiredTaskMetaTask``. hNj4hihIhjhhB}r(hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r}r(hAX>Refactored ``celery.task``. It's now split into three modules:rhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{X Refactored rr}r(hAX Refactored hNjubh)r}r(hAX``celery.task``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X celery.taskrr}r(hAUhNjubahjhubh{X$. It's now split into three modules:rr}r(hAX$. It's now split into three modules:hNjubeubha)r}r(hAUhNjhiNhjhhB}r(hX*hE]hF]hD]hK]hL]uhpNhqhhr]r(h^)r}r(hAXcelery.task Contains ``apply_async``, ``delay_task``, ``discard_all``, and task shortcuts, plus imports objects from ``celery.task.base`` and ``celery.task.builtins`` hB}r(hD]hK]hF]hE]hL]uhNjhr]r(h)r}r(hAX celery.taskrhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{X celery.taskrr}r(hAjhNjubaubhZ)r}r(hAUhB}r(hD]hK]hF]hE]hL]uhNjhr]rh)r}r(hAXContains ``apply_async``, ``delay_task``, ``discard_all``, and task shortcuts, plus imports objects from ``celery.task.base`` and ``celery.task.builtins``hNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]r(h{X Contains rr}r(hAX Contains hNjubh)r}r(hAX``apply_async``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X apply_asyncrr}r(hAUhNjubahjhubh{X, rr}r(hAX, hNjubh)r}r(hAX``delay_task``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X delay_taskrr}r(hAUhNjubahjhubh{X, rr}r(hAX, hNjubh)r}r(hAX``discard_all``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{X discard_allrr}r(hAUhNjubahjhubh{X0, and task shortcuts, plus imports objects from rr}r(hAX0, and task shortcuts, plus imports objects from hNjubh)r}r(hAX``celery.task.base``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcelery.task.baserr}r(hAUhNjubahjhubh{X and rr}r(hAX and hNjubh)r}r(hAX``celery.task.builtins``hB}r(hD]hK]hF]hE]hL]uhNjhr]rh{Xcelery.task.builtinsrr}r(hAUhNjubahjhubeubahjj+ubehjhubh^)r}r(hAXcelery.task.base Contains task base classes: ``Task``, ``PeriodicTask``, ``TaskSet``, ``AsynchronousMapTask``, ``ExecuteRemoteTask``. hB}r(hD]hK]hF]hE]hL]uhNjhr]r(h)r}r(hAXcelery.task.baserhNjhihIhjhhB}r(hD]hK]hF]hE]hL]uhpMhr]rh{Xcelery.task.baserr }r (hAjhNjubaubhZ)r }r (hAUhB}r (hD]hK]hF]hE]hL]uhNjhr]r h)r }r (hAXtContains task base classes: ``Task``, ``PeriodicTask``, ``TaskSet``, ``AsynchronousMapTask``, ``ExecuteRemoteTask``.hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r (h{XContains task base classes: r r }r (hAXContains task base classes: hNj ubh)r }r (hAX``Task``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{XTaskr r }r (hAUhNj ubahjhubh{X, r r }r (hAX, hNj ubh)r }r (hAX``PeriodicTask``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X PeriodicTaskr r }r (hAUhNj ubahjhubh{X, r r }r (hAX, hNj ubh)r! }r" (hAX ``TaskSet``hB}r# (hD]hK]hF]hE]hL]uhNj hr]r$ h{XTaskSetr% r& }r' (hAUhNj! ubahjhubh{X, r( r) }r* (hAX, hNj ubh)r+ }r, (hAX``AsynchronousMapTask``hB}r- (hD]hK]hF]hE]hL]uhNj hr]r. h{XAsynchronousMapTaskr/ r0 }r1 (hAUhNj+ ubahjhubh{X, r2 r3 }r4 (hAX, hNj ubh)r5 }r6 (hAX``ExecuteRemoteTask``hB}r7 (hD]hK]hF]hE]hL]uhNj hr]r8 h{XExecuteRemoteTaskr9 r: }r; (hAUhNj5 ubahjhubh{X.r< }r= (hAX.hNj ubeubahjj+ubehjhubh^)r> }r? (hAXZcelery.task.builtins Built-in tasks: ``PingTask``, ``DeleteExpiredTaskMetaTask``. hB}r@ (hD]hK]hF]hE]hL]uhNjhr]rA (h)rB }rC (hAXcelery.task.builtinsrD hNj> hihIhjhhB}rE (hD]hK]hF]hE]hL]uhpMhr]rF h{Xcelery.task.builtinsrG rH }rI (hAjD hNjB ubaubhZ)rJ }rK (hAUhB}rL (hD]hK]hF]hE]hL]uhNj> hr]rM h)rN }rO (hAX<Built-in tasks: ``PingTask``, ``DeleteExpiredTaskMetaTask``.rP hNjJ hihIhjhhB}rQ (hD]hK]hF]hE]hL]uhpMhr]rR (h{XBuilt-in tasks: rS rT }rU (hAXBuilt-in tasks: hNjN ubh)rV }rW (hAX ``PingTask``hB}rX (hD]hK]hF]hE]hL]uhNjN hr]rY h{XPingTaskrZ r[ }r\ (hAUhNjV ubahjhubh{X, r] r^ }r_ (hAX, hNjN ubh)r` }ra (hAX``DeleteExpiredTaskMetaTask``hB}rb (hD]hK]hF]hE]hL]uhNjN hr]rc h{XDeleteExpiredTaskMetaTaskrd re }rf (hAUhNj` ubahjhubh{X.rg }rh (hAX.hNjN ubeubahjj+ubehjhubeubeubeubhd)ri }rj (hAUhNj%hihIhjhkhB}rk (hD]hK]hF]hE]rl Uid21rm ahL]rn h&auhpMhqhhr]ro (ht)rp }rq (hAX 0.3.7 [2008-06-16 11:41 P.M CET]rr hNji hihIhjhxhB}rs (hD]hK]hF]hE]hL]uhpMhqhhr]rt h{X 0.3.7 [2008-06-16 11:41 P.M CET]ru rv }rw (hAjr hNjp ubaubha)rx }ry (hAUhNji hihIhjhhB}rz (hX*hE]hF]hD]hK]hL]uhpMhqhhr]r{ (h^)r| }r} (hAX**IMPORTANT** Now uses AMQP's ``basic.consume`` instead of ``basic.get``. This means we're no longer polling the broker for new messages. hNjx hihIhjhhB}r~ (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAX**IMPORTANT** Now uses AMQP's ``basic.consume`` instead of ``basic.get``. This means we're no longer polling the broker for new messages.hNj| hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r (j)r }r (hAX **IMPORTANT**hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X IMPORTANTr r }r (hAUhNj ubahjjubh{X Now uses AMQP's r r }r (hAX Now uses AMQP's hNj ubh)r }r (hAX``basic.consume``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X basic.consumer r }r (hAUhNj ubahjhubh{X instead of r r }r (hAX instead of hNj ubh)r }r (hAX ``basic.get``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X basic.getr r }r (hAUhNj ubahjhubh{XA. This means we're no longer polling the broker for new messages.r r }r (hAXA. This means we're no longer polling the broker for new messages.hNj ubeubaubh^)r }r (hAXb**IMPORTANT** Default concurrency limit is now set to the number of CPUs available on the system. hNjx hihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAXa**IMPORTANT** Default concurrency limit is now set to the number of CPUs available on the system.hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r (j)r }r (hAX **IMPORTANT**hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X IMPORTANTr r }r (hAUhNj ubahjjubh{XT Default concurrency limit is now set to the number of CPUs available on the system.r r }r (hAXT Default concurrency limit is now set to the number of CPUs available on the system.hNj ubeubaubh^)r }r (hAX**IMPORTANT** ``tasks.register``: Renamed ``task_name`` argument to ``name``, so >>> tasks.register(func, task_name="mytask") has to be replaced with: >>> tasks.register(func, name="mytask") hNjx hihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r (h)r }r (hAXP**IMPORTANT** ``tasks.register``: Renamed ``task_name`` argument to ``name``, sohNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpM hr]r (j)r }r (hAX **IMPORTANT**hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X IMPORTANTr r }r (hAUhNj ubahjjubh{X r }r (hAX hNj ubh)r }r (hAX``tasks.register``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{Xtasks.registerr r }r (hAUhNj ubahjhubh{X : Renamed r r }r (hAX : Renamed hNj ubh)r }r (hAX ``task_name``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{X task_namer r }r (hAUhNj ubahjhubh{X argument to r r }r (hAX argument to hNj ubh)r }r (hAX``name``hB}r (hD]hK]hF]hE]hL]uhNj hr]r h{Xnamer r }r (hAUhNj ubahjhubh{X, sor r }r (hAX, sohNj ubeubj)r }r (hAX,>>> tasks.register(func, task_name="mytask")hNj hiNhjjhB}r (hhhE]hF]hD]hK]hL]uhpNhqhhr]r h{X,>>> tasks.register(func, task_name="mytask")r r }r (hAUhNj ubaubh)r }r (hAXhas to be replaced with:r hNj hihIhjhhB}r (hD]hK]hF]hE]hL]uhpMhr]r h{Xhas to be replaced with:r r }r (hAj hNj ubaubj)r }r (hAX'>>> tasks.register(func, name="mytask")r hNj hiNhjjhB}r (hhhE]hF]hD]hK]hL]uhpNhqhhr]r h{X'>>> tasks.register(func, name="mytask")r r }r (hAUhNj ubaubeubh^)r }r (hAX7The daemon now correctly runs if the pidlock is stale. hNjx hihIhjhhB}r (hD]hK]hF]hE]hL]uhpNhqhhr]r h)r }r (hAX6The daemon now correctly runs if the pidlock is stale.r!hNj hihIhjhhB}r!(hD]hK]hF]hE]hL]uhpMhr]r!h{X6The daemon now correctly runs if the pidlock is stale.r!r!}r!(hAj!hNj ubaubaubh^)r!}r!(hAX!Now compatible with carrot 0.4.5 hNjx hihIhjhhB}r!(hD]hK]hF]hE]hL]uhpNhqhhr]r !h)r !}r !(hAX Now compatible with carrot 0.4.5r !hNj!hihIhjhhB}r !(hD]hK]hF]hE]hL]uhpMhr]r!h{X Now compatible with carrot 0.4.5r!r!}r!(hAj !hNj !ubaubaubh^)r!}r!(hAX2Default AMQP connnection timeout is now 4 seconds.r!hNjx hihIhjhhB}r!(hD]hK]hF]hE]hL]uhpNhqhhr]r!h)r!}r!(hAj!hNj!hihIhjhhB}r!(hD]hK]hF]hE]hL]uhpMhr]r!h{X2Default AMQP connnection timeout is now 4 seconds.r!r!}r!(hAj!hNj!ubaubaubh^)r!}r!(hAX6``AsyncResult.read()`` was always returning ``True``. hNjx hihIhjhhB}r !(hD]hK]hF]hE]hL]uhpNhqhhr]r!!h)r"!}r#!(hAX5``AsyncResult.read()`` was always returning ``True``.hNj!hihIhjhhB}r$!(hD]hK]hF]hE]hL]uhpMhr]r%!(h)r&!}r'!(hAX``AsyncResult.read()``hB}r(!(hD]hK]hF]hE]hL]uhNj"!hr]r)!h{XAsyncResult.read()r*!r+!}r,!(hAUhNj&!ubahjhubh{X was always returning r-!r.!}r/!(hAX was always returning hNj"!ubh)r0!}r1!(hAX``True``hB}r2!(hD]hK]hF]hE]hL]uhNj"!hr]r3!h{XTruer4!r5!}r6!(hAUhNj0!ubahjhubh{X.r7!}r8!(hAX.hNj"!ubeubaubh^)r9!}r:!(hAXVOnly use README as long_description if the file exists so easy_install doesn't break. hNjx hihIhjhhB}r;!(hD]hK]hF]hE]hL]uhpNhqhhr]r!(hAXUOnly use README as long_description if the file exists so easy_install doesn't break.r?!hNj9!hihIhjhhB}r@!(hD]hK]hF]hE]hL]uhpMhr]rA!h{XUOnly use README as long_description if the file exists so easy_install doesn't break.rB!rC!}rD!(hAj?!hNj=!ubaubaubh^)rE!}rF!(hAX@``celery.view``: JSON responses now properly set its mime-type. hNjx hihIhjhhB}rG!(hD]hK]hF]hE]hL]uhpNhqhhr]rH!h)rI!}rJ!(hAX?``celery.view``: JSON responses now properly set its mime-type.hNjE!hihIhjhhB}rK!(hD]hK]hF]hE]hL]uhpMhr]rL!(h)rM!}rN!(hAX``celery.view``hB}rO!(hD]hK]hF]hE]hL]uhNjI!hr]rP!h{X celery.viewrQ!rR!}rS!(hAUhNjM!ubahjhubh{X0: JSON responses now properly set its mime-type.rT!rU!}rV!(hAX0: JSON responses now properly set its mime-type.hNjI!ubeubaubh^)rW!}rX!(hAX``apply_async`` now has a ``connection`` keyword argument so you can re-use the same AMQP connection if you want to execute more than one task. hNjx hihIhjhhB}rY!(hD]hK]hF]hE]hL]uhpNhqhhr]rZ!h)r[!}r\!(hAX``apply_async`` now has a ``connection`` keyword argument so you can re-use the same AMQP connection if you want to execute more than one task.hNjW!hihIhjhhB}r]!(hD]hK]hF]hE]hL]uhpM hr]r^!(h)r_!}r`!(hAX``apply_async``hB}ra!(hD]hK]hF]hE]hL]uhNj[!hr]rb!h{X apply_asyncrc!rd!}re!(hAUhNj_!ubahjhubh{X now has a rf!rg!}rh!(hAX now has a hNj[!ubh)ri!}rj!(hAX``connection``hB}rk!(hD]hK]hF]hE]hL]uhNj[!hr]rl!h{X connectionrm!rn!}ro!(hAUhNji!ubahjhubh{Xg keyword argument so you can re-use the same AMQP connection if you want to execute more than one task.rp!rq!}rr!(hAXg keyword argument so you can re-use the same AMQP connection if you want to execute more than one task.hNj[!ubeubaubh^)rs!}rt!(hAXCHandle failures in task_status view such that it won't throw 500s. hNjx hihIhjhhB}ru!(hD]hK]hF]hE]hL]uhpNhqhhr]rv!h)rw!}rx!(hAXBHandle failures in task_status view such that it won't throw 500s.ry!hNjs!hihIhjhhB}rz!(hD]hK]hF]hE]hL]uhpM$hr]r{!h{XBHandle failures in task_status view such that it won't throw 500s.r|!r}!}r~!(hAjy!hNjw!ubaubaubh^)r!}r!(hAX>Fixed typo ``AMQP_SERVER`` in documentation to ``AMQP_HOST``. hNjx hihIhjhhB}r!(hD]hK]hF]hE]hL]uhpNhqhhr]r!h)r!}r!(hAX=Fixed typo ``AMQP_SERVER`` in documentation to ``AMQP_HOST``.hNj!hihIhjhhB}r!(hD]hK]hF]hE]hL]uhpM&hr]r!(h{X Fixed typo r!r!}r!(hAX Fixed typo hNj!ubh)r!}r!(hAX``AMQP_SERVER``hB}r!(hD]hK]hF]hE]hL]uhNj!hr]r!h{X AMQP_SERVERr!r!}r!(hAUhNj!ubahjhubh{X in documentation to r!r!}r!(hAX in documentation to hNj!ubh)r!}r!(hAX ``AMQP_HOST``hB}r!(hD]hK]hF]hE]hL]uhNj!hr]r!h{X AMQP_HOSTr!r!}r!(hAUhNj!ubahjhubh{X.r!}r!(hAX.hNj!ubeubaubh^)r!}r!(hAX<Worker exception e-mails sent to admins now works properly. hNjx hihIhjhhB}r!(hD]hK]hF]hE]hL]uhpNhqhhr]r!h)r!}r!(hAX;Worker exception e-mails sent to admins now works properly.r!hNj!hihIhjhhB}r!(hD]hK]hF]hE]hL]uhpM(hr]r!h{X;Worker exception e-mails sent to admins now works properly.r!r!}r!(hAj!hNj!ubaubaubh^)r!}r!(hAXoNo longer depends on ``django``, so installing ``celery`` won't affect the preferred Django version installed. hNjx hihIhjhhB}r!(hD]hK]hF]hE]hL]uhpNhqhhr]r!h)r!}r!(hAXnNo longer depends on ``django``, so installing ``celery`` won't affect the preferred Django version installed.hNj!hihIhjhhB}r!(hD]hK]hF]hE]hL]uhpM*hr]r!(h{XNo longer depends on r!r!}r!(hAXNo longer depends on hNj!ubh)r!}r!(hAX ``django``hB}r!(hD]hK]hF]hE]hL]uhNj!hr]r!h{Xdjangor!r!}r!(hAUhNj!ubahjhubh{X, so installing r!r!}r!(hAX, so installing hNj!ubh)r!}r!(hAX ``celery``hB}r!(hD]hK]hF]hE]hL]uhNj!hr]r!h{Xceleryr!r!}r!(hAUhNj!ubahjhubh{X5 won't affect the preferred Django version installed.r!r!}r!(hAX5 won't affect the preferred Django version installed.hNj!ubeubaubh^)r!}r!(hAXWNow works with PostgreSQL (psycopg2) again by registering the ``PickledObject`` field. hNjx hihIhjhhB}r!(hD]hK]hF]hE]hL]uhpNhqhhr]r!h)r!}r!(hAXVNow works with PostgreSQL (psycopg2) again by registering the ``PickledObject`` field.hNj!hihIhjhhB}r!(hD]hK]hF]hE]hL]uhpM-hr]r!(h{X>Now works with PostgreSQL (psycopg2) again by registering the r!r!}r!(hAX>Now works with PostgreSQL (psycopg2) again by registering the hNj!ubh)r!}r!(hAX``PickledObject``hB}r!(hD]hK]hF]hE]hL]uhNj!hr]r!h{X PickledObjectr!r!}r!(hAUhNj!ubahjhubh{X field.r!r!}r!(hAX field.hNj!ubeubaubh^)r!}r!(hAX}``celeryd``: Added ``--detach`` option as an alias to ``--daemon``, and it's the term used in the documentation from now on. hNjx hihIhjhhB}r!(hD]hK]hF]hE]hL]uhpNhqhhr]r!h)r!}r!(hAX|``celeryd``: Added ``--detach`` option as an alias to ``--daemon``, and it's the term used in the documentation from now on.hNj!hihIhjhhB}r!(hD]hK]hF]hE]hL]uhpM0hr]r!(h)r!}r!(hAX ``celeryd``hB}r!(hD]hK]hF]hE]hL]uhNj!hr]r!h{Xcelerydr!r!}r!(hAUhNj!ubahjhubh{X: Added r!r!}r!(hAX: Added hNj!ubh)r!}r!(hAX ``--detach``hB}r!(hD]hK]hF]hE]hL]uhNj!hr]r!h{X--detachr!r!}r!(hAUhNj!ubahjhubh{X option as an alias to r!r!}r!(hAX option as an alias to hNj!ubh)r!}r!(hAX ``--daemon``hB}r!(hD]hK]hF]hE]hL]uhNj!hr]r!h{X--daemonr!r!}r!(hAUhNj!ubahjhubh{X:, and it's the term used in the documentation from now on.r"r"}r"(hAX:, and it's the term used in the documentation from now on.hNj!ubeubaubh^)r"}r"(hAXpMake sure the pool and periodic task worker thread is terminated properly at exit. (So ``Ctrl-C`` works again). hNjx hihIhjhhB}r"(hD]hK]hF]hE]hL]uhpNhqhhr]r"h)r"}r"(hAXoMake sure the pool and periodic task worker thread is terminated properly at exit. (So ``Ctrl-C`` works again).hNj"hihIhjhhB}r "(hD]hK]hF]hE]hL]uhpM3hr]r "(h{XWMake sure the pool and periodic task worker thread is terminated properly at exit. (So r "r "}r "(hAXWMake sure the pool and periodic task worker thread is terminated properly at exit. (So hNj"ubh)r"}r"(hAX ``Ctrl-C``hB}r"(hD]hK]hF]hE]hL]uhNj"hr]r"h{XCtrl-Cr"r"}r"(hAUhNj"ubahjhubh{X works again).r"r"}r"(hAX works again).hNj"ubeubaubh^)r"}r"(hAX"Now depends on ``python-daemon``. hNjx hihIhjhhB}r"(hD]hK]hF]hE]hL]uhpNhqhhr]r"h)r"}r"(hAX!Now depends on ``python-daemon``.hNj"hihIhjhhB}r"(hD]hK]hF]hE]hL]uhpM6hr]r"(h{XNow depends on r "r!"}r""(hAXNow depends on hNj"ubh)r#"}r$"(hAX``python-daemon``hB}r%"(hD]hK]hF]hE]hL]uhNj"hr]r&"h{X python-daemonr'"r("}r)"(hAUhNj#"ubahjhubh{X.r*"}r+"(hAX.hNj"ubeubaubh^)r,"}r-"(hAX%Removed dependency to ``simplejson`` hNjx hihIhjhhB}r."(hD]hK]hF]hE]hL]uhpNhqhhr]r/"h)r0"}r1"(hAX$Removed dependency to ``simplejson``hNj,"hihIhjhhB}r2"(hD]hK]hF]hE]hL]uhpM8hr]r3"(h{XRemoved dependency to r4"r5"}r6"(hAXRemoved dependency to hNj0"ubh)r7"}r8"(hAX``simplejson``hB}r9"(hD]hK]hF]hE]hL]uhNj0"hr]r:"h{X simplejsonr;"r<"}r="(hAUhNj7"ubahjhubeubaubh^)r>"}r?"(hAXwCache Backend: Re-establishes connection for every task process if the Django cache backend is memcached/libmemcached. hNjx hihIhjhhB}r@"(hD]hK]hF]hE]hL]uhpNhqhhr]rA"h)rB"}rC"(hAXvCache Backend: Re-establishes connection for every task process if the Django cache backend is memcached/libmemcached.rD"hNj>"hihIhjhhB}rE"(hD]hK]hF]hE]hL]uhpM:hr]rF"h{XvCache Backend: Re-establishes connection for every task process if the Django cache backend is memcached/libmemcached.rG"rH"}rI"(hAjD"hNjB"ubaubaubh^)rJ"}rK"(hAXKTyrant Backend: Now re-establishes the connection for every task executed. hNjx hihIhjhhB}rL"(hD]hK]hF]hE]hL]uhpNhqhhr]rM"h)rN"}rO"(hAXJTyrant Backend: Now re-establishes the connection for every task executed.rP"hNjJ"hihIhjhhB}rQ"(hD]hK]hF]hE]hL]uhpM=hr]rR"h{XJTyrant Backend: Now re-establishes the connection for every task executed.rS"rT"}rU"(hAjP"hNjN"ubaubaubeubeubeubhd)rV"}rW"(hAUhNhghihIhjhkhB}rX"(hD]hK]hF]hE]rY"Uid22rZ"ahL]r["hauhpMAhqhhr]r\"(ht)r]"}r^"(hAX 0.3.3 [2009-06-08 01:07 P.M CET]r_"hNjV"hihIhjhxhB}r`"(hD]hK]hF]hE]hL]uhpMAhqhhr]ra"h{X 0.3.3 [2009-06-08 01:07 P.M CET]rb"rc"}rd"(hAj_"hNj]"ubaubha)re"}rf"(hAUhNjV"hihIhjhhB}rg"(hX*hE]hF]hD]hK]hL]uhpMChqhhr]rh"h^)ri"}rj"(hAXgThe ``PeriodicWorkController`` now sleeps for 1 second between checking for periodic tasks to execute. hNje"hihIhjhhB}rk"(hD]hK]hF]hE]hL]uhpNhqhhr]rl"h)rm"}rn"(hAXfThe ``PeriodicWorkController`` now sleeps for 1 second between checking for periodic tasks to execute.hNji"hihIhjhhB}ro"(hD]hK]hF]hE]hL]uhpMChr]rp"(h{XThe rq"rr"}rs"(hAXThe hNjm"ubh)rt"}ru"(hAX``PeriodicWorkController``hB}rv"(hD]hK]hF]hE]hL]uhNjm"hr]rw"h{XPeriodicWorkControllerrx"ry"}rz"(hAUhNjt"ubahjhubh{XH now sleeps for 1 second between checking for periodic tasks to execute.r{"r|"}r}"(hAXH now sleeps for 1 second between checking for periodic tasks to execute.hNjm"ubeubaubaubeubhd)r~"}r"(hAUhNhghihIhjhkhB}r"(hD]hK]hF]hE]r"Uid23r"ahL]r"h5auhpMGhqhhr]r"(ht)r"}r"(hAX 0.3.2 [2009-06-08 01:07 P.M CET]r"hNj~"hihIhjhxhB}r"(hD]hK]hF]hE]hL]uhpMGhqhhr]r"h{X 0.3.2 [2009-06-08 01:07 P.M CET]r"r"}r"(hAj"hNj"ubaubha)r"}r"(hAUhNj~"hihIhjhhB}r"(hX*hE]hF]hD]hK]hL]uhpMIhqhhr]r"(h^)r"}r"(hAXZceleryd: Added option ``--discard``: Discard (delete!) all waiting messages in the queue. hNj"hihIhjhhB}r"(hD]hK]hF]hE]hL]uhpNhqhhr]r"h)r"}r"(hAXYceleryd: Added option ``--discard``: Discard (delete!) all waiting messages in the queue.hNj"hihIhjhhB}r"(hD]hK]hF]hE]hL]uhpMIhr]r"(h{Xceleryd: Added option r"r"}r"(hAXceleryd: Added option hNj"ubh)r"}r"(hAX ``--discard``hB}r"(hD]hK]hF]hE]hL]uhNj"hr]r"h{X --discardr"r"}r"(hAUhNj"ubahjhubh{X6: Discard (delete!) all waiting messages in the queue.r"r"}r"(hAX6: Discard (delete!) all waiting messages in the queue.hNj"ubeubaubh^)r"}r"(hAXCceleryd: The ``--wakeup-after`` option was not handled as a float. hNj"hihIhjhhB}r"(hD]hK]hF]hE]hL]uhpNhqhhr]r"h)r"}r"(hAXBceleryd: The ``--wakeup-after`` option was not handled as a float.hNj"hihIhjhhB}r"(hD]hK]hF]hE]hL]uhpMLhr]r"(h{X celeryd: The r"r"}r"(hAX celeryd: The hNj"ubh)r"}r"(hAX``--wakeup-after``hB}r"(hD]hK]hF]hE]hL]uhNj"hr]r"h{X--wakeup-afterr"r"}r"(hAUhNj"ubahjhubh{X# option was not handled as a float.r"r"}r"(hAX# option was not handled as a float.hNj"ubeubaubeubeubhd)r"}r"(hAUhNhghihIhjhkhB}r"(hD]hK]hF]hE]r"Uid24r"ahL]r"hauhpMOhqhhr]r"(ht)r"}r"(hAX 0.3.1 [2009-06-08 01:07 P.M CET]r"hNj"hihIhjhxhB}r"(hD]hK]hF]hE]hL]uhpMOhqhhr]r"h{X 0.3.1 [2009-06-08 01:07 P.M CET]r"r"}r"(hAj"hNj"ubaubha)r"}r"(hAUhNj"hihIhjhhB}r"(hX*hE]hF]hD]hK]hL]uhpMQhqhhr]r"(h^)r"}r"(hAXmThe `PeriodicTask`` worker is now running in its own thread instead of blocking the ``TaskController`` loop. hNj"hihIhjhhB}r"(hD]hK]hF]hE]hL]uhpNhqhhr]r"h)r"}r"(hAXlThe `PeriodicTask`` worker is now running in its own thread instead of blocking the ``TaskController`` loop.hNj"hihIhjhhB}r"(hD]hK]hF]hE]hL]uhpMQhr]r"(h{XThe r"r"}r"(hAXThe hNj"ubj )r"}r"(hAX`PeriodicTask``hB}r"(hD]hK]hF]hE]hL]uhNj"hr]r"h{X PeriodicTask`r"r"}r"(hAUhNj"ubahjj ubh{XA worker is now running in its own thread instead of blocking the r"r"}r"(hAXA worker is now running in its own thread instead of blocking the hNj"ubh)r"}r"(hAX``TaskController``hB}r"(hD]hK]hF]hE]hL]uhNj"hr]r"h{XTaskControllerr"r"}r"(hAUhNj"ubahjhubh{X loop.r"r"}r"(hAX loop.hNj"ubeubaubh^)r"}r"(hAXIDefault ``QUEUE_WAKEUP_AFTER`` has been lowered to ``0.1`` (was ``0.3``) hNj"hihIhjhhB}r"(hD]hK]hF]hE]hL]uhpNhqhhr]r"h)r"}r"(hAXHDefault ``QUEUE_WAKEUP_AFTER`` has been lowered to ``0.1`` (was ``0.3``)hNj"hihIhjhhB}r"(hD]hK]hF]hE]hL]uhpMThr]r"(h{XDefault r"r"}r"(hAXDefault hNj"ubh)r"}r"(hAX``QUEUE_WAKEUP_AFTER``hB}r"(hD]hK]hF]hE]hL]uhNj"hr]r"h{XQUEUE_WAKEUP_AFTERr"r"}r"(hAUhNj"ubahjhubh{X has been lowered to r"r#}r#(hAX has been lowered to hNj"ubh)r#}r#(hAX``0.1``hB}r#(hD]hK]hF]hE]hL]uhNj"hr]r#h{X0.1r#r#}r#(hAUhNj#ubahjhubh{X (was r #r #}r #(hAX (was hNj"ubh)r #}r #(hAX``0.3``hB}r#(hD]hK]hF]hE]hL]uhNj"hr]r#h{X0.3r#r#}r#(hAUhNj #ubahjhubh{X)r#}r#(hAX)hNj"ubeubaubeubeubhd)r#}r#(hAUhNhghihIhjhkhB}r#(hD]hK]hF]hE]r#Uid25r#ahL]r#hauhpMWhqhhr]r#(ht)r#}r#(hAX 0.3.0 [2009-06-08 12:41 P.M CET]r#hNj#hihIhjhxhB}r#(hD]hK]hF]hE]hL]uhpMWhqhhr]r #h{X 0.3.0 [2009-06-08 12:41 P.M CET]r!#r"#}r##(hAj#hNj#ubaubh)r$#}r%#(hAXZ**NOTE** This is a development version, for the stable release, please see versions 0.2.x.hNj#hihIhjhhB}r&#(hD]hK]hF]hE]hL]uhpMYhqhhr]r'#(j)r(#}r)#(hAX**NOTE**hB}r*#(hD]hK]hF]hE]hL]uhNj$#hr]r+#h{XNOTEr,#r-#}r.#(hAUhNj(#ubahjjubh{XR This is a development version, for the stable release, please see versions 0.2.x.r/#r0#}r1#(hAXR This is a development version, for the stable release, please see versions 0.2.x.hNj$#ubeubh)r2#}r3#(hAX**VERY IMPORTANT:** Pickle is now the encoder used for serializing task arguments, so be sure to flush your task queue before you upgrade.hNj#hihIhjhhB}r4#(hD]hK]hF]hE]hL]uhpM\hqhhr]r5#(j)r6#}r7#(hAX**VERY IMPORTANT:**hB}r8#(hD]hK]hF]hE]hL]uhNj2#hr]r9#h{XVERY IMPORTANT:r:#r;#}r<#(hAUhNj6#ubahjjubh{Xw Pickle is now the encoder used for serializing task arguments, so be sure to flush your task queue before you upgrade.r=#r>#}r?#(hAXw Pickle is now the encoder used for serializing task arguments, so be sure to flush your task queue before you upgrade.hNj2#ubeubha)r@#}rA#(hAUhNj#hihIhjhhB}rB#(hX*hE]hF]hD]hK]hL]uhpM_hqhhr]rC#(h^)rD#}rE#(hAX**IMPORTANT** TaskSet.run() now returns a celery.result.TaskSetResult instance, which lets you inspect the status and return values of a taskset as it was a single entity. hNj@#hihIhjhhB}rF#(hD]hK]hF]hE]hL]uhpNhqhhr]rG#h)rH#}rI#(hAX**IMPORTANT** TaskSet.run() now returns a celery.result.TaskSetResult instance, which lets you inspect the status and return values of a taskset as it was a single entity.hNjD#hihIhjhhB}rJ#(hD]hK]hF]hE]hL]uhpM_hr]rK#(j)rL#}rM#(hAX **IMPORTANT**hB}rN#(hD]hK]hF]hE]hL]uhNjH#hr]rO#h{X IMPORTANTrP#rQ#}rR#(hAUhNjL#ubahjjubh{X TaskSet.run() now returns a celery.result.TaskSetResult instance, which lets you inspect the status and return values of a taskset as it was a single entity.rS#rT#}rU#(hAX TaskSet.run() now returns a celery.result.TaskSetResult instance, which lets you inspect the status and return values of a taskset as it was a single entity.hNjH#ubeubaubh^)rV#}rW#(hAX5**IMPORTANT** Celery now depends on carrot >= 0.4.1. hNj@#hihIhjhhB}rX#(hD]hK]hF]hE]hL]uhpNhqhhr]rY#h)rZ#}r[#(hAX4**IMPORTANT** Celery now depends on carrot >= 0.4.1.hNjV#hihIhjhhB}r\#(hD]hK]hF]hE]hL]uhpMchr]r]#(j)r^#}r_#(hAX **IMPORTANT**hB}r`#(hD]hK]hF]hE]hL]uhNjZ#hr]ra#h{X IMPORTANTrb#rc#}rd#(hAUhNj^#ubahjjubh{X' Celery now depends on carrot >= 0.4.1.re#rf#}rg#(hAX' Celery now depends on carrot >= 0.4.1.hNjZ#ubeubaubh^)rh#}ri#(hAXThe celery daemon now sends task errors to the registered admin e-mails. To turn off this feature, set ``SEND_CELERY_TASK_ERROR_EMAILS`` to ``False`` in your ``settings.py``. Thanks to Grégoire Cachet. hNj@#hihIhjhhB}rj#(hD]hK]hF]hE]hL]uhpNhqhhr]rk#h)rl#}rm#(hAXThe celery daemon now sends task errors to the registered admin e-mails. To turn off this feature, set ``SEND_CELERY_TASK_ERROR_EMAILS`` to ``False`` in your ``settings.py``. Thanks to Grégoire Cachet.hNjh#hihIhjhhB}rn#(hD]hK]hF]hE]hL]uhpMehr]ro#(h{XgThe celery daemon now sends task errors to the registered admin e-mails. To turn off this feature, set rp#rq#}rr#(hAXgThe celery daemon now sends task errors to the registered admin e-mails. To turn off this feature, set hNjl#ubh)rs#}rt#(hAX!``SEND_CELERY_TASK_ERROR_EMAILS``hB}ru#(hD]hK]hF]hE]hL]uhNjl#hr]rv#h{XSEND_CELERY_TASK_ERROR_EMAILSrw#rx#}ry#(hAUhNjs#ubahjhubh{X to rz#r{#}r|#(hAX to hNjl#ubh)r}#}r~#(hAX ``False``hB}r#(hD]hK]hF]hE]hL]uhNjl#hr]r#h{XFalser#r#}r#(hAUhNj}#ubahjhubh{X in your r#r#}r#(hAX in your hNjl#ubh)r#}r#(hAX``settings.py``hB}r#(hD]hK]hF]hE]hL]uhNjl#hr]r#h{X settings.pyr#r#}r#(hAUhNj#ubahjhubh{X. Thanks to Grégoire Cachet.r#r#}r#(hAX. Thanks to Grégoire Cachet.hNjl#ubeubaubh^)r#}r#(hAXYou can now run the celery daemon by using ``manage.py``:: $ python manage.py celeryd Thanks to Grégoire Cachet. hNj@#hihIhjhhB}r#(hD]hK]hF]hE]hL]uhpNhqhhr]r#(h)r#}r#(hAX:You can now run the celery daemon by using ``manage.py``::hNj#hihIhjhhB}r#(hD]hK]hF]hE]hL]uhpMihr]r#(h{X+You can now run the celery daemon by using r#r#}r#(hAX+You can now run the celery daemon by using hNj#ubh)r#}r#(hAX ``manage.py``hB}r#(hD]hK]hF]hE]hL]uhNj#hr]r#h{X manage.pyr#r#}r#(hAUhNj#ubahjhubh{X:r#}r#(hAX:hNj#ubeubh)r#}r#(hAX$ python manage.py celerydhNj#hjhhB}r#(hhhE]hF]hD]hK]hL]uhpMkhr]r#h{X$ python manage.py celerydr#r#}r#(hAUhNj#ubaubh)r#}r#(hAXThanks to Grégoire Cachet.r#hNj#hihIhjhhB}r#(hD]hK]hF]hE]hL]uhpMmhr]r#h{XThanks to Grégoire Cachet.r#r#}r#(hAj#hNj#ubaubeubh^)r#}r#(hAXAdded support for message priorities, topic exchanges, custom routing keys for tasks. This means we have introduced ``celery.task.apply_async``, a new way of executing tasks. You can use ``celery.task.delay`` and ``celery.Task.delay`` like usual, but if you want greater control over the message sent, you want ``celery.task.apply_async`` and ``celery.Task.apply_async``. This also means the AMQP configuration has changed. Some settings has been renamed, while others are new:: CELERY_AMQP_EXCHANGE CELERY_AMQP_PUBLISHER_ROUTING_KEY CELERY_AMQP_CONSUMER_ROUTING_KEY CELERY_AMQP_CONSUMER_QUEUE CELERY_AMQP_EXCHANGE_TYPE See the entry `Can I send some tasks to only some servers?`_ in the `FAQ`_ for more information. hNj@#hihIhjhhB}r#(hD]hK]hF]hE]hL]uhpNhqhhr]r#(h)r#}r#(hAXAdded support for message priorities, topic exchanges, custom routing keys for tasks. This means we have introduced ``celery.task.apply_async``, a new way of executing tasks.hNj#hihIhjhhB}r#(hD]hK]hF]hE]hL]uhpMohr]r#(h{XtAdded support for message priorities, topic exchanges, custom routing keys for tasks. This means we have introduced r#r#}r#(hAXtAdded support for message priorities, topic exchanges, custom routing keys for tasks. This means we have introduced hNj#ubh)r#}r#(hAX``celery.task.apply_async``hB}r#(hD]hK]hF]hE]hL]uhNj#hr]r#h{Xcelery.task.apply_asyncr#r#}r#(hAUhNj#ubahjhubh{X, a new way of executing tasks.r#r#}r#(hAX, a new way of executing tasks.hNj#ubeubh)r#}r#(hAXYou can use ``celery.task.delay`` and ``celery.Task.delay`` like usual, but if you want greater control over the message sent, you want ``celery.task.apply_async`` and ``celery.Task.apply_async``.hNj#hihIhjhhB}r#(hD]hK]hF]hE]hL]uhpMshr]r#(h{X You can use r#r#}r#(hAX You can use hNj#ubh)r#}r#(hAX``celery.task.delay``hB}r#(hD]hK]hF]hE]hL]uhNj#hr]r#h{Xcelery.task.delayr#r#}r#(hAUhNj#ubahjhubh{X and r#r#}r#(hAX and hNj#ubh)r#}r#(hAX``celery.Task.delay``hB}r#(hD]hK]hF]hE]hL]uhNj#hr]r#h{Xcelery.Task.delayr#r#}r#(hAUhNj#ubahjhubh{XM like usual, but if you want greater control over the message sent, you want r#r#}r#(hAXM like usual, but if you want greater control over the message sent, you want hNj#ubh)r#}r#(hAX``celery.task.apply_async``hB}r#(hD]hK]hF]hE]hL]uhNj#hr]r#h{Xcelery.task.apply_asyncr#r#}r#(hAUhNj#ubahjhubh{X and r#r#}r#(hAX and hNj#ubh)r#}r#(hAX``celery.Task.apply_async``hB}r#(hD]hK]hF]hE]hL]uhNj#hr]r#h{Xcelery.Task.apply_asyncr#r#}r#(hAUhNj#ubahjhubh{X.r#}r#(hAX.hNj#ubeubh)r#}r#(hAXjThis also means the AMQP configuration has changed. Some settings has been renamed, while others are new::hNj#hihIhjhhB}r#(hD]hK]hF]hE]hL]uhpMwhr]r#h{XiThis also means the AMQP configuration has changed. Some settings has been renamed, while others are new:r#r#}r#(hAXiThis also means the AMQP configuration has changed. Some settings has been renamed, while others are new:hNj#ubaubh)r#}r#(hAXCELERY_AMQP_EXCHANGE CELERY_AMQP_PUBLISHER_ROUTING_KEY CELERY_AMQP_CONSUMER_ROUTING_KEY CELERY_AMQP_CONSUMER_QUEUE CELERY_AMQP_EXCHANGE_TYPEhNj#hjhhB}r$(hhhE]hF]hD]hK]hL]uhpMzhr]r$h{XCELERY_AMQP_EXCHANGE CELERY_AMQP_PUBLISHER_ROUTING_KEY CELERY_AMQP_CONSUMER_ROUTING_KEY CELERY_AMQP_CONSUMER_QUEUE CELERY_AMQP_EXCHANGE_TYPEr$r$}r$(hAUhNj#ubaubh)r$}r$(hAX`See the entry `Can I send some tasks to only some servers?`_ in the `FAQ`_ for more information.hNj#hihIhjhhB}r$(hD]hK]hF]hE]hL]uhpMhr]r$(h{XSee the entry r $r $}r $(hAXSee the entry hNj$ubjC)r $}r $(hAX.`Can I send some tasks to only some servers?`_j>KhNj$hjjLhB}r$(UnameX+Can I send some tasks to only some servers?j@X!http://bit.ly/celery_AMQP_routingr$hE]hF]hD]hK]hL]uhr]r$h{X+Can I send some tasks to only some servers?r$r$}r$(hAUhNj $ubaubh{X in the r$r$}r$(hAX in the hNj$ubjC)r$}r$(hAX`FAQ`_j>KhNj$hjjLhB}r$(UnameXFAQj@X%http://ask.github.com/celery/faq.htmlr$hE]hF]hD]hK]hL]uhr]r$h{XFAQr$r$}r$(hAUhNj$ubaubh{X for more information.r$r $}r!$(hAX for more information.hNj$ubeubeubeubj)r"$}r#$(hAXd.. _`Can I send some tasks to only some servers?`: http://bit.ly/celery_AMQP_routingjKhNj#hihIhjjhB}r$$(j@j$hE]r%$U*can-i-send-some-tasks-to-only-some-serversr&$ahF]hD]hK]hL]r'$h auhpMhqhhr]ubj)r($}r)$(hAX0.. _`FAQ`: http://ask.github.com/celery/faq.htmljKhNj#hihIhjjhB}r*$(j@j$hE]r+$Ufaqr,$ahF]hD]hK]hL]r-$h#auhpMhqhhr]ubha)r.$}r/$(hAUhNj#hihIhjhhB}r0$(hX*hE]hF]hD]hK]hL]uhpMhqhhr]r1$(h^)r2$}r3$(hAXTask errors are now logged using loglevel ``ERROR`` instead of ``INFO``, and backtraces are dumped. Thanks to Grégoire Cachet. hNj.$hihIhjhhB}r4$(hD]hK]hF]hE]hL]uhpNhqhhr]r5$h)r6$}r7$(hAXTask errors are now logged using loglevel ``ERROR`` instead of ``INFO``, and backtraces are dumped. Thanks to Grégoire Cachet.hNj2$hihIhjhhB}r8$(hD]hK]hF]hE]hL]uhpMhr]r9$(h{X*Task errors are now logged using loglevel r:$r;$}r<$(hAX*Task errors are now logged using loglevel hNj6$ubh)r=$}r>$(hAX ``ERROR``hB}r?$(hD]hK]hF]hE]hL]uhNj6$hr]r@$h{XERRORrA$rB$}rC$(hAUhNj=$ubahjhubh{X instead of rD$rE$}rF$(hAX instead of hNj6$ubh)rG$}rH$(hAX``INFO``hB}rI$(hD]hK]hF]hE]hL]uhNj6$hr]rJ$h{XINFOrK$rL$}rM$(hAUhNjG$ubahjhubh{X8, and backtraces are dumped. Thanks to Grégoire Cachet.rN$rO$}rP$(hAX8, and backtraces are dumped. Thanks to Grégoire Cachet.hNj6$ubeubaubh^)rQ$}rR$(hAXMake every new worker process re-establish it's Django DB connection, this solving the "MySQL connection died?" exceptions. Thanks to Vitaly Babiy and Jirka Vejrazka. hNj.$hihIhjhhB}rS$(hD]hK]hF]hE]hL]uhpNhqhhr]rT$h)rU$}rV$(hAXMake every new worker process re-establish it's Django DB connection, this solving the "MySQL connection died?" exceptions. Thanks to Vitaly Babiy and Jirka Vejrazka.rW$hNjQ$hihIhjhhB}rX$(hD]hK]hF]hE]hL]uhpMhr]rY$h{XMake every new worker process re-establish it's Django DB connection, this solving the "MySQL connection died?" exceptions. Thanks to Vitaly Babiy and Jirka Vejrazka.rZ$r[$}r\$(hAjW$hNjU$ubaubaubh^)r]$}r^$(hAX**IMOPORTANT** Now using pickle to encode task arguments. This means you now can pass complex python objects to tasks as arguments. hNj.$hihIhjhhB}r_$(hD]hK]hF]hE]hL]uhpNhqhhr]r`$h)ra$}rb$(hAX**IMOPORTANT** Now using pickle to encode task arguments. This means you now can pass complex python objects to tasks as arguments.hNj]$hihIhjhhB}rc$(hD]hK]hF]hE]hL]uhpMhr]rd$(j)re$}rf$(hAX**IMOPORTANT**hB}rg$(hD]hK]hF]hE]hL]uhNja$hr]rh$h{X IMOPORTANTri$rj$}rk$(hAUhNje$ubahjjubh{Xu Now using pickle to encode task arguments. This means you now can pass complex python objects to tasks as arguments.rl$rm$}rn$(hAXu Now using pickle to encode task arguments. This means you now can pass complex python objects to tasks as arguments.hNja$ubeubaubh^)ro$}rp$(hAX$Removed dependency to ``yadayada``. hNj.$hihIhjhhB}rq$(hD]hK]hF]hE]hL]uhpNhqhhr]rr$h)rs$}rt$(hAX#Removed dependency to ``yadayada``.hNjo$hihIhjhhB}ru$(hD]hK]hF]hE]hL]uhpMhr]rv$(h{XRemoved dependency to rw$rx$}ry$(hAXRemoved dependency to hNjs$ubh)rz$}r{$(hAX ``yadayada``hB}r|$(hD]hK]hF]hE]hL]uhNjs$hr]r}$h{Xyadayadar~$r$}r$(hAUhNjz$ubahjhubh{X.r$}r$(hAX.hNjs$ubeubaubh^)r$}r$(hAX#Added a FAQ, see ``docs/faq.rst``. hNj.$hihIhjhhB}r$(hD]hK]hF]hE]hL]uhpNhqhhr]r$h)r$}r$(hAX"Added a FAQ, see ``docs/faq.rst``.hNj$hihIhjhhB}r$(hD]hK]hF]hE]hL]uhpMhr]r$(h{XAdded a FAQ, see r$r$}r$(hAXAdded a FAQ, see hNj$ubh)r$}r$(hAX``docs/faq.rst``hB}r$(hD]hK]hF]hE]hL]uhNj$hr]r$h{X docs/faq.rstr$r$}r$(hAUhNj$ubahjhubh{X.r$}r$(hAX.hNj$ubeubaubh^)r$}r$(hAXZNow converts any unicode keys in task ``kwargs`` to regular strings. Thanks Vitaly Babiy. hNj.$hihIhjhhB}r$(hD]hK]hF]hE]hL]uhpNhqhhr]r$h)r$}r$(hAXYNow converts any unicode keys in task ``kwargs`` to regular strings. Thanks Vitaly Babiy.hNj$hihIhjhhB}r$(hD]hK]hF]hE]hL]uhpMhr]r$(h{X&Now converts any unicode keys in task r$r$}r$(hAX&Now converts any unicode keys in task hNj$ubh)r$}r$(hAX ``kwargs``hB}r$(hD]hK]hF]hE]hL]uhNj$hr]r$h{Xkwargsr$r$}r$(hAUhNj$ubahjhubh{X) to regular strings. Thanks Vitaly Babiy.r$r$}r$(hAX) to regular strings. Thanks Vitaly Babiy.hNj$ubeubaubh^)r$}r$(hAX2Renamed the ``TaskDaemon`` to ``WorkController``. hNj.$hihIhjhhB}r$(hD]hK]hF]hE]hL]uhpNhqhhr]r$h)r$}r$(hAX1Renamed the ``TaskDaemon`` to ``WorkController``.hNj$hihIhjhhB}r$(hD]hK]hF]hE]hL]uhpMhr]r$(h{X Renamed the r$r$}r$(hAX Renamed the hNj$ubh)r$}r$(hAX``TaskDaemon``hB}r$(hD]hK]hF]hE]hL]uhNj$hr]r$h{X TaskDaemonr$r$}r$(hAUhNj$ubahjhubh{X to r$r$}r$(hAX to hNj$ubh)r$}r$(hAX``WorkController``hB}r$(hD]hK]hF]hE]hL]uhNj$hr]r$h{XWorkControllerr$r$}r$(hAUhNj$ubahjhubh{X.r$}r$(hAX.hNj$ubeubaubh^)r$}r$(hAXW``celery.datastructures.TaskProcessQueue`` is now renamed to ``celery.pool.TaskPool``. hNj.$hihIhjhhB}r$(hD]hK]hF]hE]hL]uhpNhqhhr]r$h)r$}r$(hAXV``celery.datastructures.TaskProcessQueue`` is now renamed to ``celery.pool.TaskPool``.hNj$hihIhjhhB}r$(hD]hK]hF]hE]hL]uhpMhr]r$(h)r$}r$(hAX*``celery.datastructures.TaskProcessQueue``hB}r$(hD]hK]hF]hE]hL]uhNj$hr]r$h{X&celery.datastructures.TaskProcessQueuer$r$}r$(hAUhNj$ubahjhubh{X is now renamed to r$r$}r$(hAX is now renamed to hNj$ubh)r$}r$(hAX``celery.pool.TaskPool``hB}r$(hD]hK]hF]hE]hL]uhNj$hr]r$h{Xcelery.pool.TaskPoolr$r$}r$(hAUhNj$ubahjhubh{X.r$}r$(hAX.hNj$ubeubaubh^)r$}r$(hAXNThe pool algorithm has been refactored for greater performance and stability. hNj.$hihIhjhhB}r$(hD]hK]hF]hE]hL]uhpNhqhhr]r$h)r$}r$(hAXMThe pool algorithm has been refactored for greater performance and stability.r$hNj$hihIhjhhB}r$(hD]hK]hF]hE]hL]uhpMhr]r$h{XMThe pool algorithm has been refactored for greater performance and stability.r$r$}r$(hAj$hNj$ubaubaubeubeubhd)r$}r$(hAUhNhghihIhjhkhB}r$(hD]hK]hF]hE]r$Uid26r$ahL]r$h4auhpMhqhhr]r$(ht)r$}r$(hAX 0.2.0 [2009-05-20 05:14 P.M CET]r$hNj$hihIhjhxhB}r$(hD]hK]hF]hE]hL]uhpMhqhhr]r$h{X 0.2.0 [2009-05-20 05:14 P.M CET]r$r$}r$(hAj$hNj$ubaubha)r%}r%(hAUhNj$hihIhjhhB}r%(hX*hE]hF]hD]hK]hL]uhpMhqhhr]r%(h^)r%}r%(hAXFinal release of 0.2.0 hNj%hihIhjhhB}r%(hD]hK]hF]hE]hL]uhpNhqhhr]r%h)r%}r %(hAXFinal release of 0.2.0r %hNj%hihIhjhhB}r %(hD]hK]hF]hE]hL]uhpMhr]r %h{XFinal release of 0.2.0r %r%}r%(hAj %hNj%ubaubaubh^)r%}r%(hAX&Compatible with carrot version 0.4.0. hNj%hihIhjhhB}r%(hD]hK]hF]hE]hL]uhpNhqhhr]r%h)r%}r%(hAX%Compatible with carrot version 0.4.0.r%hNj%hihIhjhhB}r%(hD]hK]hF]hE]hL]uhpMhr]r%h{X%Compatible with carrot version 0.4.0.r%r%}r%(hAj%hNj%ubaubaubh^)r%}r%(hAXPFixes some syntax errors related to fetching results from the database backend. hNj%hihIhjhhB}r%(hD]hK]hF]hE]hL]uhpNhqhhr]r%h)r %}r!%(hAXOFixes some syntax errors related to fetching results from the database backend.r"%hNj%hihIhjhhB}r#%(hD]hK]hF]hE]hL]uhpMhr]r$%h{XOFixes some syntax errors related to fetching results from the database backend.r%%r&%}r'%(hAj"%hNj %ubaubaubeubeubhd)r(%}r)%(hAUhNhghihIhjhkhB}r*%(hD]hK]hF]hE]r+%Upre3-2009-05-20-05-14-p-m-cetr,%ahL]r-%h auhpMhqhhr]r.%(ht)r/%}r0%(hAX%0.2.0-pre3 [2009-05-20 05:14 P.M CET]r1%hNj(%hihIhjhxhB}r2%(hD]hK]hF]hE]hL]uhpMhqhhr]r3%h{X%0.2.0-pre3 [2009-05-20 05:14 P.M CET]r4%r5%}r6%(hAj1%hNj/%ubaubha)r7%}r8%(hAUhNj(%hihIhjhhB}r9%(hX*hE]hF]hD]hK]hL]uhpMhqhhr]r:%h^)r;%}r<%(hAX*Internal release*. Improved handling of unpickled exceptions, ``get_result`` now tries to recreate something looking like the original exception. hNj7%hihIhjhhB}r=%(hD]hK]hF]hE]hL]uhpNhqhhr]r>%h)r?%}r@%(hAX*Internal release*. Improved handling of unpickled exceptions, ``get_result`` now tries to recreate something looking like the original exception.hNj;%hihIhjhhB}rA%(hD]hK]hF]hE]hL]uhpMhr]rB%(j)rC%}rD%(hAX*Internal release*hB}rE%(hD]hK]hF]hE]hL]uhNj?%hr]rF%h{XInternal releaserG%rH%}rI%(hAUhNjC%ubahjjubh{X-. Improved handling of unpickled exceptions, rJ%rK%}rL%(hAX-. Improved handling of unpickled exceptions, hNj?%ubh)rM%}rN%(hAX``get_result``hB}rO%(hD]hK]hF]hE]hL]uhNj?%hr]rP%h{X get_resultrQ%rR%}rS%(hAUhNjM%ubahjhubh{XE now tries to recreate something looking like the original exception.rT%rU%}rV%(hAXE now tries to recreate something looking like the original exception.hNj?%ubeubaubaubeubhd)rW%}rX%(hAUhNhghihIhjhkhB}rY%(hD]hK]hF]hE]rZ%Upre2-2009-05-20-01-56-p-m-cetr[%ahL]r\%h!auhpMhqhhr]r]%(ht)r^%}r_%(hAX%0.2.0-pre2 [2009-05-20 01:56 P.M CET]r`%hNjW%hihIhjhxhB}ra%(hD]hK]hF]hE]hL]uhpMhqhhr]rb%h{X%0.2.0-pre2 [2009-05-20 01:56 P.M CET]rc%rd%}re%(hAj`%hNj^%ubaubha)rf%}rg%(hAUhNjW%hihIhjhhB}rh%(hX*hE]hF]hD]hK]hL]uhpMhqhhr]ri%h^)rj%}rk%(hAXNow handles unpickleable exceptions (like the dynimically generated subclasses of ``django.core.exception.MultipleObjectsReturned``). hNjf%hihIhjhhB}rl%(hD]hK]hF]hE]hL]uhpNhqhhr]rm%h)rn%}ro%(hAXNow handles unpickleable exceptions (like the dynimically generated subclasses of ``django.core.exception.MultipleObjectsReturned``).hNjj%hihIhjhhB}rp%(hD]hK]hF]hE]hL]uhpMhr]rq%(h{XRNow handles unpickleable exceptions (like the dynimically generated subclasses of rr%rs%}rt%(hAXRNow handles unpickleable exceptions (like the dynimically generated subclasses of hNjn%ubh)ru%}rv%(hAX1``django.core.exception.MultipleObjectsReturned``hB}rw%(hD]hK]hF]hE]hL]uhNjn%hr]rx%h{X-django.core.exception.MultipleObjectsReturnedry%rz%}r{%(hAUhNju%ubahjhubh{X).r|%r}%}r~%(hAX).hNjn%ubeubaubaubeubhd)r%}r%(hAUhNhghihIhjhkhB}r%(hD]hK]hF]hE]r%Upre1-2009-05-20-12-33-p-m-cetr%ahL]r%h,auhpMhqhhr]r%(ht)r%}r%(hAX%0.2.0-pre1 [2009-05-20 12:33 P.M CET]r%hNj%hihIhjhxhB}r%(hD]hK]hF]hE]hL]uhpMhqhhr]r%h{X%0.2.0-pre1 [2009-05-20 12:33 P.M CET]r%r%}r%(hAj%hNj%ubaubha)r%}r%(hAUhNj%hihIhjhhB}r%(hX*hE]hF]hD]hK]hL]uhpMhqhhr]r%(h^)r%}r%(hAXfIt's getting quite stable, with a lot of new features, so bump version to 0.2. This is a pre-release. hNj%hihIhjhhB}r%(hD]hK]hF]hE]hL]uhpNhqhhr]r%h)r%}r%(hAXeIt's getting quite stable, with a lot of new features, so bump version to 0.2. This is a pre-release.r%hNj%hihIhjhhB}r%(hD]hK]hF]hE]hL]uhpMhr]r%h{XeIt's getting quite stable, with a lot of new features, so bump version to 0.2. This is a pre-release.r%r%}r%(hAj%hNj%ubaubaubh^)r%}r%(hAX``celery.task.mark_as_read()`` and ``celery.task.mark_as_failure()`` has been removed. Use ``celery.backends.default_backend.mark_as_read()``, and ``celery.backends.default_backend.mark_as_failure()`` instead. hNj%hihIhjhhB}r%(hD]hK]hF]hE]hL]uhpNhqhhr]r%h)r%}r%(hAX``celery.task.mark_as_read()`` and ``celery.task.mark_as_failure()`` has been removed. Use ``celery.backends.default_backend.mark_as_read()``, and ``celery.backends.default_backend.mark_as_failure()`` instead.hNj%hihIhjhhB}r%(hD]hK]hF]hE]hL]uhpMhr]r%(h)r%}r%(hAX``celery.task.mark_as_read()``hB}r%(hD]hK]hF]hE]hL]uhNj%hr]r%h{Xcelery.task.mark_as_read()r%r%}r%(hAUhNj%ubahjhubh{X and r%r%}r%(hAX and hNj%ubh)r%}r%(hAX!``celery.task.mark_as_failure()``hB}r%(hD]hK]hF]hE]hL]uhNj%hr]r%h{Xcelery.task.mark_as_failure()r%r%}r%(hAUhNj%ubahjhubh{X has been removed. Use r%r%}r%(hAX has been removed. Use hNj%ubh)r%}r%(hAX2``celery.backends.default_backend.mark_as_read()``hB}r%(hD]hK]hF]hE]hL]uhNj%hr]r%h{X.celery.backends.default_backend.mark_as_read()r%r%}r%(hAUhNj%ubahjhubh{X, and r%r%}r%(hAX, and hNj%ubh)r%}r%(hAX5``celery.backends.default_backend.mark_as_failure()``hB}r%(hD]hK]hF]hE]hL]uhNj%hr]r%h{X1celery.backends.default_backend.mark_as_failure()r%r%}r%(hAUhNj%ubahjhubh{X instead.r%r%}r%(hAX instead.hNj%ubeubaubeubeubhd)r%}r%(hAUhNhghihIhjhkhB}r%(hD]hK]hF]hE]r%Uid27r%ahL]r%hauhpMhqhhr]r%(ht)r%}r%(hAX!0.1.15 [2009-05-19 04:13 P.M CET]r%hNj%hihIhjhxhB}r%(hD]hK]hF]hE]hL]uhpMhqhhr]r%h{X!0.1.15 [2009-05-19 04:13 P.M CET]r%r%}r%(hAj%hNj%ubaubha)r%}r%(hAUhNj%hihIhjhhB}r%(hX*hE]hF]hD]hK]hL]uhpMhqhhr]r%h^)r%}r%(hAXThe celery daemon was leaking AMQP connections, this should be fixed, if you have any problems with too many files open (like ``emfile`` errors in ``rabbit.log``, please contact us! hNj%hihIhjhhB}r%(hD]hK]hF]hE]hL]uhpNhqhhr]r%h)r%}r%(hAXThe celery daemon was leaking AMQP connections, this should be fixed, if you have any problems with too many files open (like ``emfile`` errors in ``rabbit.log``, please contact us!hNj%hihIhjhhB}r%(hD]hK]hF]hE]hL]uhpMhr]r%(h{X~The celery daemon was leaking AMQP connections, this should be fixed, if you have any problems with too many files open (like r%r%}r%(hAX~The celery daemon was leaking AMQP connections, this should be fixed, if you have any problems with too many files open (like hNj%ubh)r%}r%(hAX ``emfile``hB}r%(hD]hK]hF]hE]hL]uhNj%hr]r%h{Xemfiler%r%}r%(hAUhNj%ubahjhubh{X errors in r%r%}r%(hAX errors in hNj%ubh)r%}r%(hAX``rabbit.log``hB}r%(hD]hK]hF]hE]hL]uhNj%hr]r%h{X rabbit.logr%r%}r%(hAUhNj%ubahjhubh{X, please contact us!r%r%}r%(hAX, please contact us!hNj%ubeubaubaubeubhd)r&}r&(hAUhNhghihIhjhkhB}r&(hD]hK]hF]hE]r&Uid28r&ahL]r&hauhpMhqhhr]r&(ht)r&}r&(hAX!0.1.14 [2009-05-19 01:08 P.M CET]r &hNj&hihIhjhxhB}r &(hD]hK]hF]hE]hL]uhpMhqhhr]r &h{X!0.1.14 [2009-05-19 01:08 P.M CET]r &r &}r&(hAj &hNj&ubaubha)r&}r&(hAUhNj&hihIhjhhB}r&(hX*hE]hF]hD]hK]hL]uhpMhqhhr]r&h^)r&}r&(hAXUFixed a syntax error in the ``TaskSet`` class. (No such variable ``TimeOutError``). hNj&hihIhjhhB}r&(hD]hK]hF]hE]hL]uhpNhqhhr]r&h)r&}r&(hAXTFixed a syntax error in the ``TaskSet`` class. (No such variable ``TimeOutError``).hNj&hihIhjhhB}r&(hD]hK]hF]hE]hL]uhpMhr]r&(h{XFixed a syntax error in the r&r&}r&(hAXFixed a syntax error in the hNj&ubh)r&}r&(hAX ``TaskSet``hB}r &(hD]hK]hF]hE]hL]uhNj&hr]r!&h{XTaskSetr"&r#&}r$&(hAUhNj&ubahjhubh{X class. (No such variable r%&r&&}r'&(hAX class. (No such variable hNj&ubh)r(&}r)&(hAX``TimeOutError``hB}r*&(hD]hK]hF]hE]hL]uhNj&hr]r+&h{X TimeOutErrorr,&r-&}r.&(hAUhNj(&ubahjhubh{X).r/&r0&}r1&(hAX).hNj&ubeubaubaubeubhd)r2&}r3&(hAUhNhghihIhjhkhB}r4&(hD]hK]hF]hE]r5&Uid29r6&ahL]r7&hauhpMhqhhr]r8&(ht)r9&}r:&(hAX!0.1.13 [2009-05-19 12:36 P.M CET]r;&hNj2&hihIhjhxhB}r<&(hD]hK]hF]hE]hL]uhpMhqhhr]r=&h{X!0.1.13 [2009-05-19 12:36 P.M CET]r>&r?&}r@&(hAj;&hNj9&ubaubha)rA&}rB&(hAUhNj2&hihIhjhhB}rC&(hX*hE]hF]hD]hK]hL]uhpMhqhhr]rD&(h^)rE&}rF&(hAX4Forgot to add ``yadayada`` to install requirements. hNjA&hihIhjhhB}rG&(hD]hK]hF]hE]hL]uhpNhqhhr]rH&h)rI&}rJ&(hAX3Forgot to add ``yadayada`` to install requirements.hNjE&hihIhjhhB}rK&(hD]hK]hF]hE]hL]uhpMhr]rL&(h{XForgot to add rM&rN&}rO&(hAXForgot to add hNjI&ubh)rP&}rQ&(hAX ``yadayada``hB}rR&(hD]hK]hF]hE]hL]uhNjI&hr]rS&h{XyadayadarT&rU&}rV&(hAUhNjP&ubahjhubh{X to install requirements.rW&rX&}rY&(hAX to install requirements.hNjI&ubeubaubh^)rZ&}r[&(hAXENow deletes all expired task results, not just those marked as done. hNjA&hihIhjhhB}r\&(hD]hK]hF]hE]hL]uhpNhqhhr]r]&h)r^&}r_&(hAXDNow deletes all expired task results, not just those marked as done.r`&hNjZ&hihIhjhhB}ra&(hD]hK]hF]hE]hL]uhpMhr]rb&h{XDNow deletes all expired task results, not just those marked as done.rc&rd&}re&(hAj`&hNj^&ubaubaubh^)rf&}rg&(hAXAble to load the Tokyo Tyrant backend class without django configuration, can specify tyrant settings directly in the class constructor. hNjA&hihIhjhhB}rh&(hD]hK]hF]hE]hL]uhpNhqhhr]ri&h)rj&}rk&(hAXAble to load the Tokyo Tyrant backend class without django configuration, can specify tyrant settings directly in the class constructor.rl&hNjf&hihIhjhhB}rm&(hD]hK]hF]hE]hL]uhpMhr]rn&h{XAble to load the Tokyo Tyrant backend class without django configuration, can specify tyrant settings directly in the class constructor.ro&rp&}rq&(hAjl&hNjj&ubaubaubh^)rr&}rs&(hAXImproved API documentation hNjA&hihIhjhhB}rt&(hD]hK]hF]hE]hL]uhpNhqhhr]ru&h)rv&}rw&(hAXImproved API documentationrx&hNjr&hihIhjhhB}ry&(hD]hK]hF]hE]hL]uhpMhr]rz&h{XImproved API documentationr{&r|&}r}&(hAjx&hNjv&ubaubaubh^)r~&}r&(hAXNow using the Sphinx documentation system, you can build the html documentation by doing :: $ cd docs $ make html and the result will be in ``docs/.build/html``. hNjA&hihIhjhhB}r&(hD]hK]hF]hE]hL]uhpNhqhhr]r&(h)r&}r&(hAX[Now using the Sphinx documentation system, you can build the html documentation by doing ::hNj~&hihIhjhhB}r&(hD]hK]hF]hE]hL]uhpMhr]r&h{XXNow using the Sphinx documentation system, you can build the html documentation by doingr&r&}r&(hAXXNow using the Sphinx documentation system, you can build the html documentation by doinghNj&ubaubh)r&}r&(hAX$ cd docs $ make htmlhNj~&hjhhB}r&(hhhE]hF]hD]hK]hL]uhpMhr]r&h{X$ cd docs $ make htmlr&r&}r&(hAUhNj&ubaubh)r&}r&(hAX/and the result will be in ``docs/.build/html``.hNj~&hihIhjhhB}r&(hD]hK]hF]hE]hL]uhpMhr]r&(h{Xand the result will be in r&r&}r&(hAXand the result will be in hNj&ubh)r&}r&(hAX``docs/.build/html``hB}r&(hD]hK]hF]hE]hL]uhNj&hr]r&h{Xdocs/.build/htmlr&r&}r&(hAUhNj&ubahjhubh{X.r&}r&(hAX.hNj&ubeubeubeubeubhd)r&}r&(hAUhNhghihIhjhkhB}r&(hD]hK]hF]hE]r&Uid30r&ahL]r&hauhpMhqhhr]r&(ht)r&}r&(hAX!0.1.12 [2009-05-18 04:38 P.M CET]r&hNj&hihIhjhxhB}r&(hD]hK]hF]hE]hL]uhpMhqhhr]r&h{X!0.1.12 [2009-05-18 04:38 P.M CET]r&r&}r&(hAj&hNj&ubaubha)r&}r&(hAUhNj&hihIhjhhB}r&(hX*hE]hF]hD]hK]hL]uhpMhqhhr]r&(h^)r&}r&(hAX``delay_task()`` etc. now returns ``celery.task.AsyncResult`` object, which lets you check the result and any failure that might have happened. It kind of works like the ``multiprocessing.AsyncResult`` class returned by ``multiprocessing.Pool.map_async``. hNj&hihIhjhhB}r&(hD]hK]hF]hE]hL]uhpNhqhhr]r&h)r&}r&(hAX``delay_task()`` etc. now returns ``celery.task.AsyncResult`` object, which lets you check the result and any failure that might have happened. It kind of works like the ``multiprocessing.AsyncResult`` class returned by ``multiprocessing.Pool.map_async``.hNj&hihIhjhhB}r&(hD]hK]hF]hE]hL]uhpMhr]r&(h)r&}r&(hAX``delay_task()``hB}r&(hD]hK]hF]hE]hL]uhNj&hr]r&h{X delay_task()r&r&}r&(hAUhNj&ubahjhubh{X etc. now returns r&r&}r&(hAX etc. now returns hNj&ubh)r&}r&(hAX``celery.task.AsyncResult``hB}r&(hD]hK]hF]hE]hL]uhNj&hr]r&h{Xcelery.task.AsyncResultr&r&}r&(hAUhNj&ubahjhubh{Xn object, which lets you check the result and any failure that might have happened. It kind of works like the r&r&}r&(hAXn object, which lets you check the result and any failure that might have happened. It kind of works like the hNj&ubh)r&}r&(hAX``multiprocessing.AsyncResult``hB}r&(hD]hK]hF]hE]hL]uhNj&hr]r&h{Xmultiprocessing.AsyncResultr&r&}r&(hAUhNj&ubahjhubh{X class returned by r&r&}r&(hAX class returned by hNj&ubh)r&}r&(hAX"``multiprocessing.Pool.map_async``hB}r&(hD]hK]hF]hE]hL]uhNj&hr]r&h{Xmultiprocessing.Pool.map_asyncr&r&}r&(hAUhNj&ubahjhubh{X.r&}r&(hAX.hNj&ubeubaubh^)r&}r&(hAXAdded dmap() and dmap_async(). This works like the ``multiprocessing.Pool`` versions except they are tasks distributed to the celery server. Example: >>> from celery.task import dmap >>> import operator >>> dmap(operator.add, [[2, 2], [4, 4], [8, 8]]) >>> [4, 8, 16] >>> from celery.task import dmap_async >>> import operator >>> result = dmap_async(operator.add, [[2, 2], [4, 4], [8, 8]]) >>> result.ready() False >>> time.sleep(1) >>> result.ready() True >>> result.result [4, 8, 16] hNj&hihIhjhhB}r&(hD]hK]hF]hE]hL]uhpNhqhhr]r&(h)r&}r&(hAXAdded dmap() and dmap_async(). This works like the ``multiprocessing.Pool`` versions except they are tasks distributed to the celery server. Example:hNj&hihIhjhhB}r&(hD]hK]hF]hE]hL]uhpMhr]r&(h{X3Added dmap() and dmap_async(). This works like the r&r&}r&(hAX3Added dmap() and dmap_async(). This works like the hNj&ubh)r&}r&(hAX``multiprocessing.Pool``hB}r&(hD]hK]hF]hE]hL]uhNj&hr]r&h{Xmultiprocessing.Poolr&r&}r&(hAUhNj&ubahjhubh{XJ versions except they are tasks distributed to the celery server. Example:r&r&}r&(hAXJ versions except they are tasks distributed to the celery server. Example:hNj&ubeubj)r&}r&(hAXt>>> from celery.task import dmap >>> import operator >>> dmap(operator.add, [[2, 2], [4, 4], [8, 8]]) >>> [4, 8, 16]hNj&hiNhjjhB}r&(hhhE]hF]hD]hK]hL]uhpNhqhhr]r&h{Xt>>> from celery.task import dmap >>> import operator >>> dmap(operator.add, [[2, 2], [4, 4], [8, 8]]) >>> [4, 8, 16]r&r&}r&(hAUhNj&ubaubj)r&}r&(hAX>>> from celery.task import dmap_async >>> import operator >>> result = dmap_async(operator.add, [[2, 2], [4, 4], [8, 8]]) >>> result.ready() False >>> time.sleep(1) >>> result.ready() True >>> result.result [4, 8, 16]hNj&hiNhjjhB}r'(hhhE]hF]hD]hK]hL]uhpNhqhhr]r'h{X>>> from celery.task import dmap_async >>> import operator >>> result = dmap_async(operator.add, [[2, 2], [4, 4], [8, 8]]) >>> result.ready() False >>> time.sleep(1) >>> result.ready() True >>> result.result [4, 8, 16]r'r'}r'(hAUhNj&ubaubeubh^)r'}r'(hAX Refactored the task metadata cache and database backends, and added a new backend for Tokyo Tyrant. You can set the backend in your django settings file. e.g:: CELERY_RESULT_BACKEND = "database"; # Uses the database CELERY_RESULT_BACKEND = "cache"; # Uses the django cache framework CELERY_RESULT_BACKEND = "tyrant"; # Uses Tokyo Tyrant TT_HOST = "localhost"; # Hostname for the Tokyo Tyrant server. TT_PORT = 6657; # Port of the Tokyo Tyrant server. hNj&hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpNhqhhr]r'(h)r '}r '(hAXRefactored the task metadata cache and database backends, and added a new backend for Tokyo Tyrant. You can set the backend in your django settings file. e.g::hNj'hihIhjhhB}r '(hD]hK]hF]hE]hL]uhpMhr]r 'h{XRefactored the task metadata cache and database backends, and added a new backend for Tokyo Tyrant. You can set the backend in your django settings file. e.g:r 'r'}r'(hAXRefactored the task metadata cache and database backends, and added a new backend for Tokyo Tyrant. You can set the backend in your django settings file. e.g:hNj 'ubaubh)r'}r'(hAX"CELERY_RESULT_BACKEND = "database"; # Uses the database CELERY_RESULT_BACKEND = "cache"; # Uses the django cache framework CELERY_RESULT_BACKEND = "tyrant"; # Uses Tokyo Tyrant TT_HOST = "localhost"; # Hostname for the Tokyo Tyrant server. TT_PORT = 6657; # Port of the Tokyo Tyrant server.hNj'hjhhB}r'(hhhE]hF]hD]hK]hL]uhpMhr]r'h{X"CELERY_RESULT_BACKEND = "database"; # Uses the database CELERY_RESULT_BACKEND = "cache"; # Uses the django cache framework CELERY_RESULT_BACKEND = "tyrant"; # Uses Tokyo Tyrant TT_HOST = "localhost"; # Hostname for the Tokyo Tyrant server. TT_PORT = 6657; # Port of the Tokyo Tyrant server.r'r'}r'(hAUhNj'ubaubeubeubeubhd)r'}r'(hAUhNhghihIhjhkhB}r'(hD]hK]hF]hE]r'Uid31r'ahL]r'hauhpM hqhhr]r'(ht)r'}r'(hAX!0.1.11 [2009-05-12 02:08 P.M CET]r 'hNj'hihIhjhxhB}r!'(hD]hK]hF]hE]hL]uhpM hqhhr]r"'h{X!0.1.11 [2009-05-12 02:08 P.M CET]r#'r$'}r%'(hAj 'hNj'ubaubha)r&'}r''(hAUhNj'hihIhjhhB}r('(hX*hE]hF]hD]hK]hL]uhpM hqhhr]r)'h^)r*'}r+'(hAXThe logging system was leaking file descriptors, resulting in servers stopping with the EMFILES (too many open files) error. (fixed) hNj&'hihIhjhhB}r,'(hD]hK]hF]hE]hL]uhpNhqhhr]r-'h)r.'}r/'(hAXThe logging system was leaking file descriptors, resulting in servers stopping with the EMFILES (too many open files) error. (fixed)r0'hNj*'hihIhjhhB}r1'(hD]hK]hF]hE]hL]uhpM hr]r2'h{XThe logging system was leaking file descriptors, resulting in servers stopping with the EMFILES (too many open files) error. (fixed)r3'r4'}r5'(hAj0'hNj.'ubaubaubaubeubhd)r6'}r7'(hAUhNhghihIhjhkhB}r8'(hD]hK]hF]hE]r9'Uid32r:'ahL]r;'hauhpMhqhhr]r<'(ht)r='}r>'(hAX!0.1.10 [2009-05-11 12:46 P.M CET]r?'hNj6'hihIhjhxhB}r@'(hD]hK]hF]hE]hL]uhpMhqhhr]rA'h{X!0.1.10 [2009-05-11 12:46 P.M CET]rB'rC'}rD'(hAj?'hNj='ubaubha)rE'}rF'(hAUhNj6'hihIhjhhB}rG'(hX*hE]hF]hD]hK]hL]uhpMhqhhr]rH'(h^)rI'}rJ'(hAXDTasks now supports both positional arguments and keyword arguments. hNjE'hihIhjhhB}rK'(hD]hK]hF]hE]hL]uhpNhqhhr]rL'h)rM'}rN'(hAXCTasks now supports both positional arguments and keyword arguments.rO'hNjI'hihIhjhhB}rP'(hD]hK]hF]hE]hL]uhpMhr]rQ'h{XCTasks now supports both positional arguments and keyword arguments.rR'rS'}rT'(hAjO'hNjM'ubaubaubh^)rU'}rV'(hAXRequires carrot 0.3.8. hNjE'hihIhjhhB}rW'(hD]hK]hF]hE]hL]uhpNhqhhr]rX'h)rY'}rZ'(hAXRequires carrot 0.3.8.r['hNjU'hihIhjhhB}r\'(hD]hK]hF]hE]hL]uhpMhr]r]'h{XRequires carrot 0.3.8.r^'r_'}r`'(hAj['hNjY'ubaubaubh^)ra'}rb'(hAX=The daemon now tries to reconnect if the connection is lost. hNjE'hihIhjhhB}rc'(hD]hK]hF]hE]hL]uhpNhqhhr]rd'h)re'}rf'(hAX<The daemon now tries to reconnect if the connection is lost.rg'hNja'hihIhjhhB}rh'(hD]hK]hF]hE]hL]uhpMhr]ri'h{X<The daemon now tries to reconnect if the connection is lost.rj'rk'}rl'(hAjg'hNje'ubaubaubeubeubhd)rm'}rn'(hAUhNhghihIhjhkhB}ro'(hD]hK]hF]hE]rp'Uid33rq'ahL]rr'h auhpMhqhhr]rs'(ht)rt'}ru'(hAX 0.1.8 [2009-05-07 12:27 P.M CET]rv'hNjm'hihIhjhxhB}rw'(hD]hK]hF]hE]hL]uhpMhqhhr]rx'h{X 0.1.8 [2009-05-07 12:27 P.M CET]ry'rz'}r{'(hAjv'hNjt'ubaubha)r|'}r}'(hAUhNjm'hihIhjhhB}r~'(hX*hE]hF]hD]hK]hL]uhpMhqhhr]r'(h^)r'}r'(hAXBetter test coverager'hNj|'hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpNhqhhr]r'h)r'}r'(hAj'hNj'hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpMhr]r'h{XBetter test coverager'r'}r'(hAj'hNj'ubaubaubh^)r'}r'(hAXMore documentationr'hNj|'hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpNhqhhr]r'h)r'}r'(hAj'hNj'hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpMhr]r'h{XMore documentationr'r'}r'(hAj'hNj'ubaubaubh^)r'}r'(hAXcceleryd doesn't emit ``Queue is empty`` message if ``settings.CELERYD_EMPTY_MSG_EMIT_EVERY`` is 0. hNj|'hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpNhqhhr]r'h)r'}r'(hAXbceleryd doesn't emit ``Queue is empty`` message if ``settings.CELERYD_EMPTY_MSG_EMIT_EVERY`` is 0.hNj'hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpMhr]r'(h{Xceleryd doesn't emit r'r'}r'(hAXceleryd doesn't emit hNj'ubh)r'}r'(hAX``Queue is empty``hB}r'(hD]hK]hF]hE]hL]uhNj'hr]r'h{XQueue is emptyr'r'}r'(hAUhNj'ubahjhubh{X message if r'r'}r'(hAX message if hNj'ubh)r'}r'(hAX)``settings.CELERYD_EMPTY_MSG_EMIT_EVERY``hB}r'(hD]hK]hF]hE]hL]uhNj'hr]r'h{X%settings.CELERYD_EMPTY_MSG_EMIT_EVERYr'r'}r'(hAUhNj'ubahjhubh{X is 0.r'r'}r'(hAX is 0.hNj'ubeubaubeubeubhd)r'}r'(hAUhNhghihIhjhkhB}r'(hD]hK]hF]hE]r'Uid34r'ahL]r'hauhpM!hqhhr]r'(ht)r'}r'(hAX0.1.7 [2009-04-30 1:50 P.M CET]r'hNj'hihIhjhxhB}r'(hD]hK]hF]hE]hL]uhpM!hqhhr]r'h{X0.1.7 [2009-04-30 1:50 P.M CET]r'r'}r'(hAj'hNj'ubaubha)r'}r'(hAUhNj'hihIhjhhB}r'(hX*hE]hF]hD]hK]hL]uhpM#hqhhr]r'(h^)r'}r'(hAXAdded some unittests hNj'hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpNhqhhr]r'h)r'}r'(hAXAdded some unittestsr'hNj'hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpM#hr]r'h{XAdded some unittestsr'r'}r'(hAj'hNj'ubaubaubh^)r'}r'(hAXzCan now use the database for task metadata (like if the task has been executed or not). Set ``settings.CELERY_TASK_META`` hNj'hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpNhqhhr]r'h)r'}r'(hAXyCan now use the database for task metadata (like if the task has been executed or not). Set ``settings.CELERY_TASK_META``hNj'hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpM%hr]r'(h{X\Can now use the database for task metadata (like if the task has been executed or not). Set r'r'}r'(hAX\Can now use the database for task metadata (like if the task has been executed or not). Set hNj'ubh)r'}r'(hAX``settings.CELERY_TASK_META``hB}r'(hD]hK]hF]hE]hL]uhNj'hr]r'h{Xsettings.CELERY_TASK_METAr'r'}r'(hAUhNj'ubahjhubeubaubh^)r'}r'(hAX]Can now run ``python setup.py test`` to run the unittests from within the ``tests`` project. hNj'hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpNhqhhr]r'h)r'}r'(hAX\Can now run ``python setup.py test`` to run the unittests from within the ``tests`` project.hNj'hihIhjhhB}r'(hD]hK]hF]hE]hL]uhpM(hr]r'(h{X Can now run r'r'}r'(hAX Can now run hNj'ubh)r'}r'(hAX``python setup.py test``hB}r'(hD]hK]hF]hE]hL]uhNj'hr]r'h{Xpython setup.py testr'r'}r'(hAUhNj'ubahjhubh{X& to run the unittests from within the r'r'}r'(hAX& to run the unittests from within the hNj'ubh)r'}r'(hAX ``tests``hB}r'(hD]hK]hF]hE]hL]uhNj'hr]r(h{Xtestsr(r(}r((hAUhNj'ubahjhubh{X project.r(r(}r((hAX project.hNj'ubeubaubh^)r(}r((hAXCan set the AMQP exchange/routing key/queue using ``settings.CELERY_AMQP_EXCHANGE``, ``settings.CELERY_AMQP_ROUTING_KEY``, and ``settings.CELERY_AMQP_CONSUMER_QUEUE``. hNj'hihIhjhhB}r ((hD]hK]hF]hE]hL]uhpNhqhhr]r (h)r (}r ((hAXCan set the AMQP exchange/routing key/queue using ``settings.CELERY_AMQP_EXCHANGE``, ``settings.CELERY_AMQP_ROUTING_KEY``, and ``settings.CELERY_AMQP_CONSUMER_QUEUE``.hNj(hihIhjhhB}r ((hD]hK]hF]hE]hL]uhpM+hr]r((h{X2Can set the AMQP exchange/routing key/queue using r(r(}r((hAX2Can set the AMQP exchange/routing key/queue using hNj (ubh)r(}r((hAX!``settings.CELERY_AMQP_EXCHANGE``hB}r((hD]hK]hF]hE]hL]uhNj (hr]r(h{Xsettings.CELERY_AMQP_EXCHANGEr(r(}r((hAUhNj(ubahjhubh{X, r(r(}r((hAX, hNj (ubh)r(}r((hAX$``settings.CELERY_AMQP_ROUTING_KEY``hB}r((hD]hK]hF]hE]hL]uhNj (hr]r(h{X settings.CELERY_AMQP_ROUTING_KEYr (r!(}r"((hAUhNj(ubahjhubh{X, and r#(r$(}r%((hAX, and hNj (ubh)r&(}r'((hAX'``settings.CELERY_AMQP_CONSUMER_QUEUE``hB}r(((hD]hK]hF]hE]hL]uhNj (hr]r)(h{X#settings.CELERY_AMQP_CONSUMER_QUEUEr*(r+(}r,((hAUhNj&(ubahjhubh{X.r-(}r.((hAX.hNj (ubeubaubeubeubhd)r/(}r0((hAUhNhghihIhjhkhB}r1((hD]hK]hF]hE]r2(Uid35r3(ahL]r4(h7auhpM0hqhhr]r5((ht)r6(}r7((hAX0.1.6 [2009-04-28 2:13 P.M CET]r8(hNj/(hihIhjhxhB}r9((hD]hK]hF]hE]hL]uhpM0hqhhr]r:(h{X0.1.6 [2009-04-28 2:13 P.M CET]r;(r<(}r=((hAj8(hNj6(ubaubha)r>(}r?((hAUhNj/(hihIhjhhB}r@((hX*hE]hF]hD]hK]hL]uhpM2hqhhr]rA((h^)rB(}rC((hAXIntroducing ``TaskSet``. A set of subtasks is executed and you can find out how many, or if all them, are done (excellent for progress bars and such) hNj>(hihIhjhhB}rD((hD]hK]hF]hE]hL]uhpNhqhhr]rE(h)rF(}rG((hAXIntroducing ``TaskSet``. A set of subtasks is executed and you can find out how many, or if all them, are done (excellent for progress bars and such)hNjB(hihIhjhhB}rH((hD]hK]hF]hE]hL]uhpM2hr]rI((h{X Introducing rJ(rK(}rL((hAX Introducing hNjF(ubh)rM(}rN((hAX ``TaskSet``hB}rO((hD]hK]hF]hE]hL]uhNjF(hr]rP(h{XTaskSetrQ(rR(}rS((hAUhNjM(ubahjhubh{X~. A set of subtasks is executed and you can find out how many, or if all them, are done (excellent for progress bars and such)rT(rU(}rV((hAX~. A set of subtasks is executed and you can find out how many, or if all them, are done (excellent for progress bars and such)hNjF(ubeubaubh^)rW(}rX((hAXNow catches all exceptions when running ``Task.__call__``, so the daemon doesn't die. This does't happen for pure functions yet, only ``Task`` classes. hNj>(hihIhjhhB}rY((hD]hK]hF]hE]hL]uhpNhqhhr]rZ(h)r[(}r\((hAXNow catches all exceptions when running ``Task.__call__``, so the daemon doesn't die. This does't happen for pure functions yet, only ``Task`` classes.hNjW(hihIhjhhB}r]((hD]hK]hF]hE]hL]uhpM6hr]r^((h{X(Now catches all exceptions when running r_(r`(}ra((hAX(Now catches all exceptions when running hNj[(ubh)rb(}rc((hAX``Task.__call__``hB}rd((hD]hK]hF]hE]hL]uhNj[(hr]re(h{X Task.__call__rf(rg(}rh((hAUhNjb(ubahjhubh{XM, so the daemon doesn't die. This does't happen for pure functions yet, only ri(rj(}rk((hAXM, so the daemon doesn't die. This does't happen for pure functions yet, only hNj[(ubh)rl(}rm((hAX``Task``hB}rn((hD]hK]hF]hE]hL]uhNj[(hr]ro(h{XTaskrp(rq(}rr((hAUhNjl(ubahjhubh{X classes.rs(rt(}ru((hAX classes.hNj[(ubeubaubh^)rv(}rw((hAX/``autodiscover()`` now works with zipped eggs. hNj>(hihIhjhhB}rx((hD]hK]hF]hE]hL]uhpNhqhhr]ry(h)rz(}r{((hAX.``autodiscover()`` now works with zipped eggs.hNjv(hihIhjhhB}r|((hD]hK]hF]hE]hL]uhpM:hr]r}((h)r~(}r((hAX``autodiscover()``hB}r((hD]hK]hF]hE]hL]uhNjz(hr]r(h{Xautodiscover()r(r(}r((hAUhNj~(ubahjhubh{X now works with zipped eggs.r(r(}r((hAX now works with zipped eggs.hNjz(ubeubaubh^)r(}r((hAXMceleryd: Now adds curernt working directory to ``sys.path`` for convenience. hNj>(hihIhjhhB}r((hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r(}r((hAXLceleryd: Now adds curernt working directory to ``sys.path`` for convenience.hNj(hihIhjhhB}r((hD]hK]hF]hE]hL]uhpM<hr]r((h{X/celeryd: Now adds curernt working directory to r(r(}r((hAX/celeryd: Now adds curernt working directory to hNj(ubh)r(}r((hAX ``sys.path``hB}r((hD]hK]hF]hE]hL]uhNj(hr]r(h{Xsys.pathr(r(}r((hAUhNj(ubahjhubh{X for convenience.r(r(}r((hAX for convenience.hNj(ubeubaubh^)r(}r((hAXfThe ``run_every`` attribute of ``PeriodicTask`` classes can now be a ``datetime.timedelta()`` object. hNj>(hihIhjhhB}r((hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r(}r((hAXeThe ``run_every`` attribute of ``PeriodicTask`` classes can now be a ``datetime.timedelta()`` object.hNj(hihIhjhhB}r((hD]hK]hF]hE]hL]uhpM?hr]r((h{XThe r(r(}r((hAXThe hNj(ubh)r(}r((hAX ``run_every``hB}r((hD]hK]hF]hE]hL]uhNj(hr]r(h{X run_everyr(r(}r((hAUhNj(ubahjhubh{X attribute of r(r(}r((hAX attribute of hNj(ubh)r(}r((hAX``PeriodicTask``hB}r((hD]hK]hF]hE]hL]uhNj(hr]r(h{X PeriodicTaskr(r(}r((hAUhNj(ubahjhubh{X classes can now be a r(r(}r((hAX classes can now be a hNj(ubh)r(}r((hAX``datetime.timedelta()``hB}r((hD]hK]hF]hE]hL]uhNj(hr]r(h{Xdatetime.timedelta()r(r(}r((hAUhNj(ubahjhubh{X object.r(r(}r((hAX object.hNj(ubeubaubh^)r(}r((hAXceleryd: You can now set the ``DJANGO_PROJECT_DIR`` variable for ``celeryd`` and it will add that to ``sys.path`` for easy launching. hNj>(hihIhjhhB}r((hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r(}r((hAXceleryd: You can now set the ``DJANGO_PROJECT_DIR`` variable for ``celeryd`` and it will add that to ``sys.path`` for easy launching.hNj(hihIhjhhB}r((hD]hK]hF]hE]hL]uhpMBhr]r((h{Xceleryd: You can now set the r(r(}r((hAXceleryd: You can now set the hNj(ubh)r(}r((hAX``DJANGO_PROJECT_DIR``hB}r((hD]hK]hF]hE]hL]uhNj(hr]r(h{XDJANGO_PROJECT_DIRr(r(}r((hAUhNj(ubahjhubh{X variable for r(r(}r((hAX variable for hNj(ubh)r(}r((hAX ``celeryd``hB}r((hD]hK]hF]hE]hL]uhNj(hr]r(h{Xcelerydr(r(}r((hAUhNj(ubahjhubh{X and it will add that to r(r(}r((hAX and it will add that to hNj(ubh)r(}r((hAX ``sys.path``hB}r((hD]hK]hF]hE]hL]uhNj(hr]r(h{Xsys.pathr(r(}r((hAUhNj(ubahjhubh{X for easy launching.r(r(}r((hAX for easy launching.hNj(ubeubaubh^)r(}r((hAX;Can now check if a task has been executed or not via HTTP. hNj>(hihIhjhhB}r((hD]hK]hF]hE]hL]uhpNhqhhr]r(h)r(}r((hAX:Can now check if a task has been executed or not via HTTP.r(hNj(hihIhjhhB}r((hD]hK]hF]hE]hL]uhpMEhr]r(h{X:Can now check if a task has been executed or not via HTTP.r(r(}r((hAj(hNj(ubaubaubh^)r(}r((hAXIYou can do this by including the celery ``urls.py`` into your project, >>> url(r'^celery/$', include("celery.urls")) then visiting the following url,:: http://mysite/celery/$task_id/done/ this will return a JSON dictionary like e.g: >>> {"task": {"id": $task_id, "executed": true}} hNj>(hihIhjhhB}r((hD]hK]hF]hE]hL]uhpNhqhhr]r((h)r(}r)(hAXFYou can do this by including the celery ``urls.py`` into your project,r)hNj(hihIhjhhB}r)(hD]hK]hF]hE]hL]uhpMGhr]r)(h{X(You can do this by including the celery r)r)}r)(hAX(You can do this by including the celery hNj(ubh)r)}r)(hAX ``urls.py``hB}r )(hD]hK]hF]hE]hL]uhNj(hr]r )h{Xurls.pyr )r )}r )(hAUhNj)ubahjhubh{X into your project,r)r)}r)(hAX into your project,hNj(ubeubj)r)}r)(hAX->>> url(r'^celery/$', include("celery.urls"))hNj(hiNhjjhB}r)(hhhE]hF]hD]hK]hL]uhpNhqhhr]r)h{X->>> url(r'^celery/$', include("celery.urls"))r)r)}r)(hAUhNj)ubaubh)r)}r)(hAX"then visiting the following url,::r)hNj(hihIhjhhB}r)(hD]hK]hF]hE]hL]uhpMKhr]r)h{X!then visiting the following url,:r)r)}r)(hAX!then visiting the following url,:hNj)ubaubh)r )}r!)(hAX#http://mysite/celery/$task_id/done/hNj(hjhhB}r")(hhhE]hF]hD]hK]hL]uhpMMhr]r#)h{X#http://mysite/celery/$task_id/done/r$)r%)}r&)(hAUhNj )ubaubh)r')}r()(hAX,this will return a JSON dictionary like e.g:r))hNj(hihIhjhhB}r*)(hD]hK]hF]hE]hL]uhpMOhr]r+)h{X,this will return a JSON dictionary like e.g:r,)r-)}r.)(hAj))hNj')ubaubj)r/)}r0)(hAX0>>> {"task": {"id": $task_id, "executed": true}}r1)hNj(hiNhjjhB}r2)(hhhE]hF]hD]hK]hL]uhpNhqhhr]r3)h{X0>>> {"task": {"id": $task_id, "executed": true}}r4)r5)}r6)(hAUhNj/)ubaubeubh^)r7)}r8)(hAXB``delay_task`` now returns string id, not ``uuid.UUID`` instance. hNj>(hihIhjhhB}r9)(hD]hK]hF]hE]hL]uhpNhqhhr]r:)h)r;)}r<)(hAXA``delay_task`` now returns string id, not ``uuid.UUID`` instance.hNj7)hihIhjhhB}r=)(hD]hK]hF]hE]hL]uhpMShr]r>)(h)r?)}r@)(hAX``delay_task``hB}rA)(hD]hK]hF]hE]hL]uhNj;)hr]rB)h{X delay_taskrC)rD)}rE)(hAUhNj?)ubahjhubh{X now returns string id, not rF)rG)}rH)(hAX now returns string id, not hNj;)ubh)rI)}rJ)(hAX ``uuid.UUID``hB}rK)(hD]hK]hF]hE]hL]uhNj;)hr]rL)h{X uuid.UUIDrM)rN)}rO)(hAUhNjI)ubahjhubh{X instance.rP)rQ)}rR)(hAX instance.hNj;)ubeubaubh^)rS)}rT)(hAX@Now has ``PeriodicTasks``, to have ``cron`` like functionality. hNj>(hihIhjhhB}rU)(hD]hK]hF]hE]hL]uhpNhqhhr]rV)h)rW)}rX)(hAX?Now has ``PeriodicTasks``, to have ``cron`` like functionality.hNjS)hihIhjhhB}rY)(hD]hK]hF]hE]hL]uhpMUhr]rZ)(h{XNow has r[)r\)}r])(hAXNow has hNjW)ubh)r^)}r_)(hAX``PeriodicTasks``hB}r`)(hD]hK]hF]hE]hL]uhNjW)hr]ra)h{X PeriodicTasksrb)rc)}rd)(hAUhNj^)ubahjhubh{X , to have re)rf)}rg)(hAX , to have hNjW)ubh)rh)}ri)(hAX``cron``hB}rj)(hD]hK]hF]hE]hL]uhNjW)hr]rk)h{Xcronrl)rm)}rn)(hAUhNjh)ubahjhubh{X like functionality.ro)rp)}rq)(hAX like functionality.hNjW)ubeubaubh^)rr)}rs)(hAXProject changed name from ``crunchy`` to ``celery``. The details of the name change request is in ``docs/name_change_request.txt``. hNj>(hihIhjhhB}rt)(hD]hK]hF]hE]hL]uhpNhqhhr]ru)h)rv)}rw)(hAXProject changed name from ``crunchy`` to ``celery``. The details of the name change request is in ``docs/name_change_request.txt``.hNjr)hihIhjhhB}rx)(hD]hK]hF]hE]hL]uhpMWhr]ry)(h{XProject changed name from rz)r{)}r|)(hAXProject changed name from hNjv)ubh)r})}r~)(hAX ``crunchy``hB}r)(hD]hK]hF]hE]hL]uhNjv)hr]r)h{Xcrunchyr)r)}r)(hAUhNj})ubahjhubh{X to r)r)}r)(hAX to hNjv)ubh)r)}r)(hAX ``celery``hB}r)(hD]hK]hF]hE]hL]uhNjv)hr]r)h{Xceleryr)r)}r)(hAUhNj)ubahjhubh{X/. The details of the name change request is in r)r)}r)(hAX/. The details of the name change request is in hNjv)ubh)r)}r)(hAX ``docs/name_change_request.txt``hB}r)(hD]hK]hF]hE]hL]uhNjv)hr]r)h{Xdocs/name_change_request.txtr)r)}r)(hAUhNj)ubahjhubh{X.r)}r)(hAX.hNjv)ubeubaubeubeubhd)r)}r)(hAUhNhghihIhjhkhB}r)(hD]hK]hF]hE]r)Uid36r)ahL]r)hauhpM[hqhhr]r)(ht)r)}r)(hAX 0.1.0 [2009-04-24 11:28 A.M CET]r)hNj)hihIhjhxhB}r)(hD]hK]hF]hE]hL]uhpM[hqhhr]r)h{X 0.1.0 [2009-04-24 11:28 A.M CET]r)r)}r)(hAj)hNj)ubaubha)r)}r)(hAUhNj)hihIhjhhB}r)(hX*hE]hF]hD]hK]hL]uhpM]hqhhr]r)h^)r)}r)(hAXInitial releaser)hNj)hihIhjhhB}r)(hD]hK]hF]hE]hL]uhpNhqhhr]r)h)r)}r)(hAj)hNj)hihIhjhhB}r)(hD]hK]hF]hE]hL]uhpM]hr]r)h{XInitial releaser)r)}r)(hAj)hNj)ubaubaubaubeubeubhihIhjhkhB}r)(hD]hK]hF]hE]r)Up-m-cetr)ahL]r)hauhpMAhqhhr]r)(ht)r)}r)(hAX 1.0.2 [2010-03-31 12:50 P.M CET]r)hNhehihIhjhxhB}r)(hD]hK]hF]hE]hL]uhpMAhqhhr]r)h{X 1.0.2 [2010-03-31 12:50 P.M CET]r)r)}r)(hAj)hNj)ubaubhbeubhihIhjhhB}r)(hX*hE]hF]hD]hK]hL]uhpMChqhhr]r)(h^)r)}r)(hAXNDeprecated: ``CELERY_BACKEND``, please use ``CELERY_RESULT_BACKEND`` instead. hNhbhihIhjhhB}r)(hD]hK]hF]hE]hL]uhpNhqhhr]r)h)r)}r)(hAXMDeprecated: ``CELERY_BACKEND``, please use ``CELERY_RESULT_BACKEND`` instead.hNj)hihIhjhhB}r)(hD]hK]hF]hE]hL]uhpMChr]r)(h{X Deprecated: r)r)}r)(hAX Deprecated: hNj)ubh)r)}r)(hAX``CELERY_BACKEND``hB}r)(hD]hK]hF]hE]hL]uhNj)hr]r)h{XCELERY_BACKENDr)r)}r)(hAUhNj)ubahjhubh{X , please use r)r)}r)(hAX , please use hNj)ubh)r)}r)(hAX``CELERY_RESULT_BACKEND``hB}r)(hD]hK]hF]hE]hL]uhNj)hr]r)h{XCELERY_RESULT_BACKENDr)r)}r)(hAUhNj)ubahjhubh{X instead.r)r)}r)(hAX instead.hNj)ubeubaubh_h^)r)}r)(hAXUnittests: Don't disable the django test database teardown, instead fixed the underlying issue which was caused by modifications to the ``DATABASE_NAME`` setting (http://github.com/ask/celery/issues/82). hNhbhihIhjhhB}r)(hD]hK]hF]hE]hL]uhpNhqhhr]r)h)r)}r)(hAXUnittests: Don't disable the django test database teardown, instead fixed the underlying issue which was caused by modifications to the ``DATABASE_NAME`` setting (http://github.com/ask/celery/issues/82).hNj)hihIhjhhB}r)(hD]hK]hF]hE]hL]uhpMWhr]r)(h{XUnittests: Don't disable the django test database teardown, instead fixed the underlying issue which was caused by modifications to the r)r)}r)(hAXUnittests: Don't disable the django test database teardown, instead fixed the underlying issue which was caused by modifications to the hNj)ubh)r)}r)(hAX``DATABASE_NAME``hB}r)(hD]hK]hF]hE]hL]uhNj)hr]r)h{X DATABASE_NAMEr)r)}r)(hAUhNj)ubahjhubh{X setting (r)r)}r)(hAX setting (hNj)ubjC)r)}r)(hAX&http://github.com/ask/celery/issues/82r)hB}r)(Urefurij)hE]hF]hD]hK]hL]uhNj)hr]r*h{X&http://github.com/ask/celery/issues/82r*r*}r*(hAUhNj)ubahjjLubh{X).r*r*}r*(hAX).hNj)ubeubaubh^)r*}r*(hAXDjango Loader: New config ``CELERY_DB_REUSE_MAX`` (max number of tasks to reuse the same database connection) The default is to use a new connection for every task. We would very much like to reuse the connection, but a safe number of reuses is not known, and we don't have any way to handle the errors that might happen, which may even be database dependent. See: http://bit.ly/94fwdd hNhbhihIhjhhB}r *(hD]hK]hF]hE]hL]uhpNhqhhr]r *(h)r *}r *(hAXmDjango Loader: New config ``CELERY_DB_REUSE_MAX`` (max number of tasks to reuse the same database connection)hNj*hihIhjhhB}r *(hD]hK]hF]hE]hL]uhpM[hr]r*(h{XDjango Loader: New config r*r*}r*(hAXDjango Loader: New config hNj *ubh)r*}r*(hAX``CELERY_DB_REUSE_MAX``hB}r*(hD]hK]hF]hE]hL]uhNj *hr]r*h{XCELERY_DB_REUSE_MAXr*r*}r*(hAUhNj*ubahjhubh{X< (max number of tasks to reuse the same database connection)r*r*}r*(hAX< (max number of tasks to reuse the same database connection)hNj *ubeubhZ)r*}r*(hAUhB}r*(hD]hK]hF]hE]hL]uhNj*hr]r*(h)r *}r!*(hAXThe default is to use a new connection for every task. We would very much like to reuse the connection, but a safe number of reuses is not known, and we don't have any way to handle the errors that might happen, which may even be database dependent.r"*hNj*hihIhjhhB}r#*(hD]hK]hF]hE]hL]uhpM^hr]r$*h{XThe default is to use a new connection for every task. We would very much like to reuse the connection, but a safe number of reuses is not known, and we don't have any way to handle the errors that might happen, which may even be database dependent.r%*r&*}r'*(hAj"*hNj *ubaubh)r(*}r)*(hAXSee: http://bit.ly/94fwddhNj*hihIhjhhB}r**(hD]hK]hF]hE]hL]uhpMchr]r+*(h{XSee: r,*r-*}r.*(hAXSee: hNj(*ubjC)r/*}r0*(hAXhttp://bit.ly/94fwddr1*hB}r2*(Urefurij1*hE]hF]hD]hK]hL]uhNj(*hr]r3*h{Xhttp://bit.ly/94fwddr4*r5*}r6*(hAUhNj/*ubahjjLubeubehjj+ubeubh^)r7*}r8*(hAXceleryd: The worker components are now configurable: ``CELERYD_POOL``, ``CELERYD_LISTENER``, ``CELERYD_MEDIATOR``, and ``CELERYD_ETA_SCHEDULER``. The default configuration is as follows: .. code-block:: python CELERYD_POOL = "celery.worker.pool.TaskPool" CELERYD_MEDIATOR = "celery.worker.controllers.Mediator" CELERYD_ETA_SCHEDULER = "celery.worker.controllers.ScheduleController" CELERYD_LISTENER = "celery.worker.listener.CarrotListener" The ``CELERYD_POOL`` setting makes it easy to swap out the multiprocessing pool with a threaded pool, or how about a twisted/eventlet pool? Consider the competition for the first pool plug-in started! hNhbhihIhjhhB}r9*(hD]hK]hF]hE]hL]uhpNhqhhr]r:*(h)r;*}r<*(hAXceleryd: The worker components are now configurable: ``CELERYD_POOL``, ``CELERYD_LISTENER``, ``CELERYD_MEDIATOR``, and ``CELERYD_ETA_SCHEDULER``.hNj7*hihIhjhhB}r=*(hD]hK]hF]hE]hL]uhpMehr]r>*(h{X5celeryd: The worker components are now configurable: r?*r@*}rA*(hAX5celeryd: The worker components are now configurable: hNj;*ubh)rB*}rC*(hAX``CELERYD_POOL``hB}rD*(hD]hK]hF]hE]hL]uhNj;*hr]rE*h{X CELERYD_POOLrF*rG*}rH*(hAUhNjB*ubahjhubh{X, rI*rJ*}rK*(hAX, hNj;*ubh)rL*}rM*(hAX``CELERYD_LISTENER``hB}rN*(hD]hK]hF]hE]hL]uhNj;*hr]rO*h{XCELERYD_LISTENERrP*rQ*}rR*(hAUhNjL*ubahjhubh{X, rS*rT*}rU*(hAX, hNj;*ubh)rV*}rW*(hAX``CELERYD_MEDIATOR``hB}rX*(hD]hK]hF]hE]hL]uhNj;*hr]rY*h{XCELERYD_MEDIATORrZ*r[*}r\*(hAUhNjV*ubahjhubh{X, and r]*r^*}r_*(hAX, and hNj;*ubh)r`*}ra*(hAX``CELERYD_ETA_SCHEDULER``hB}rb*(hD]hK]hF]hE]hL]uhNj;*hr]rc*h{XCELERYD_ETA_SCHEDULERrd*re*}rf*(hAUhNj`*ubahjhubh{X.rg*}rh*(hAX.hNj;*ubeubhZ)ri*}rj*(hAUhB}rk*(hD]hK]hF]hE]hL]uhNj7*hr]rl*(h)rm*}rn*(hAX(The default configuration is as follows:ro*hNji*hihIhjhhB}rp*(hD]hK]hF]hE]hL]uhpMhhr]rq*h{X(The default configuration is as follows:rr*rs*}rt*(hAjo*hNjm*ubaubh)ru*}rv*(hAXCELERYD_POOL = "celery.worker.pool.TaskPool" CELERYD_MEDIATOR = "celery.worker.controllers.Mediator" CELERYD_ETA_SCHEDULER = "celery.worker.controllers.ScheduleController" CELERYD_LISTENER = "celery.worker.listener.CarrotListener"hNji*hihIhjhhB}rw*(jDjEXpythonhhhE]hF]hD]hK]hL]uhpMjhr]rx*h{XCELERYD_POOL = "celery.worker.pool.TaskPool" CELERYD_MEDIATOR = "celery.worker.controllers.Mediator" CELERYD_ETA_SCHEDULER = "celery.worker.controllers.ScheduleController" CELERYD_LISTENER = "celery.worker.listener.CarrotListener"ry*rz*}r{*(hAUhNju*ubaubh)r|*}r}*(hAXThe ``CELERYD_POOL`` setting makes it easy to swap out the multiprocessing pool with a threaded pool, or how about a twisted/eventlet pool?hNji*hihIhjhhB}r~*(hD]hK]hF]hE]hL]uhpMqhr]r*(h{XThe r*r*}r*(hAXThe hNj|*ubh)r*}r*(hAX``CELERYD_POOL``hB}r*(hD]hK]hF]hE]hL]uhNj|*hr]r*h{X CELERYD_POOLr*r*}r*(hAUhNj*ubahjhubh{Xw setting makes it easy to swap out the multiprocessing pool with a threaded pool, or how about a twisted/eventlet pool?r*r*}r*(hAXw setting makes it easy to swap out the multiprocessing pool with a threaded pool, or how about a twisted/eventlet pool?hNj|*ubeubh)r*}r*(hAX<Consider the competition for the first pool plug-in started!r*hNji*hihIhjhhB}r*(hD]hK]hF]hE]hL]uhpMthr]r*h{X<Consider the competition for the first pool plug-in started!r*r*}r*(hAj*hNj*ubaubehjj+ubeubh^)r*}r*(hAXUDebian init scripts: Use ``-a`` not ``&&`` (http://github.com/ask/celery/issues/82). hNhbhihIhjhhB}r*(hD]hK]hF]hE]hL]uhpNhqhhr]r*h)r*}r*(hAXTDebian init scripts: Use ``-a`` not ``&&`` (http://github.com/ask/celery/issues/82).hNj*hihIhjhhB}r*(hD]hK]hF]hE]hL]uhpMwhr]r*(h{XDebian init scripts: Use r*r*}r*(hAXDebian init scripts: Use hNj*ubh)r*}r*(hAX``-a``hB}r*(hD]hK]hF]hE]hL]uhNj*hr]r*h{X-ar*r*}r*(hAUhNj*ubahjhubh{X not r*r*}r*(hAX not hNj*ubh)r*}r*(hAX``&&``hB}r*(hD]hK]hF]hE]hL]uhNj*hr]r*h{X&&r*r*}r*(hAUhNj*ubahjhubh{X (r*r*}r*(hAX (hNj*ubjC)r*}r*(hAX&http://github.com/ask/celery/issues/82r*hB}r*(Urefurij*hE]hF]hD]hK]hL]uhNj*hr]r*h{X&http://github.com/ask/celery/issues/82r*r*}r*(hAUhNj*ubahjjLubh{X).r*r*}r*(hAX).hNj*ubeubaubh^)r*}r*(hAXDebian init scripts: Now always preserves ``$CELERYD_OPTS`` from the ``/etc/default/celeryd`` and ``/etc/default/celerybeat``. hNhbhihIhjhhB}r*(hD]hK]hF]hE]hL]uhpNhqhhr]r*h)r*}r*(hAX~Debian init scripts: Now always preserves ``$CELERYD_OPTS`` from the ``/etc/default/celeryd`` and ``/etc/default/celerybeat``.hNj*hihIhjhhB}r*(hD]hK]hF]hE]hL]uhpMzhr]r*(h{X*Debian init scripts: Now always preserves r*r*}r*(hAX*Debian init scripts: Now always preserves hNj*ubh)r*}r*(hAX``$CELERYD_OPTS``hB}r*(hD]hK]hF]hE]hL]uhNj*hr]r*h{X $CELERYD_OPTSr*r*}r*(hAUhNj*ubahjhubh{X from the r*r*}r*(hAX from the hNj*ubh)r*}r*(hAX``/etc/default/celeryd``hB}r*(hD]hK]hF]hE]hL]uhNj*hr]r*h{X/etc/default/celerydr*r*}r*(hAUhNj*ubahjhubh{X and r*r*}r*(hAX and hNj*ubh)r*}r*(hAX``/etc/default/celerybeat``hB}r*(hD]hK]hF]hE]hL]uhNj*hr]r*h{X/etc/default/celerybeatr*r*}r*(hAUhNj*ubahjhubh{X.r*}r*(hAX.hNj*ubeubaubh^)r*}r*(hAXcelery.beat.Scheduler: Fixed a bug where the schedule was not properly flushed to disk if the schedule had not been properly initialized. hNhbhihIhjhhB}r*(hD]hK]hF]hE]hL]uhpNhqhhr]r*h)r*}r*(hAXcelery.beat.Scheduler: Fixed a bug where the schedule was not properly flushed to disk if the schedule had not been properly initialized.r*hNj*hihIhjhhB}r*(hD]hK]hF]hE]hL]uhpM}hr]r*h{Xcelery.beat.Scheduler: Fixed a bug where the schedule was not properly flushed to disk if the schedule had not been properly initialized.r*r*}r*(hAj*hNj*ubaubaubh^)r*}r*(hAXbcelerybeat: Now syncs the schedule to disk when receiving the ``SIGTERM`` and ``SIGINT`` signals. hNhbhihIhjhhB}r*(hD]hK]hF]hE]hL]uhpNhqhhr]r*h)r*}r*(hAXacelerybeat: Now syncs the schedule to disk when receiving the ``SIGTERM`` and ``SIGINT`` signals.hNj*hihIhjhhB}r*(hD]hK]hF]hE]hL]uhpMhr]r*(h{X>celerybeat: Now syncs the schedule to disk when receiving the r*r*}r*(hAX>celerybeat: Now syncs the schedule to disk when receiving the hNj*ubh)r*}r*(hAX ``SIGTERM``hB}r+(hD]hK]hF]hE]hL]uhNj*hr]r+h{XSIGTERMr+r+}r+(hAUhNj*ubahjhubh{X and r+r+}r+(hAX and hNj*ubh)r+}r +(hAX ``SIGINT``hB}r +(hD]hK]hF]hE]hL]uhNj*hr]r +h{XSIGINTr +r +}r+(hAUhNj+ubahjhubh{X signals.r+r+}r+(hAX signals.hNj*ubeubaubh^)r+}r+(hAXCControl commands: Make sure keywords arguments are not in unicode. hNhbhihIhjhhB}r+(hD]hK]hF]hE]hL]uhpNhqhhr]r+h)r+}r+(hAXBControl commands: Make sure keywords arguments are not in unicode.r+hNj+hihIhjhhB}r+(hD]hK]hF]hE]hL]uhpMhr]r+h{XBControl commands: Make sure keywords arguments are not in unicode.r+r+}r+(hAj+hNj+ubaubaubh^)r+}r+(hAXvETA scheduler: Was missing a logger object, so the scheduler crashed when trying to log that a task had been revoked. hNhbhihIhjhhB}r +(hD]hK]hF]hE]hL]uhpNhqhhr]r!+h)r"+}r#+(hAXuETA scheduler: Was missing a logger object, so the scheduler crashed when trying to log that a task had been revoked.r$+hNj+hihIhjhhB}r%+(hD]hK]hF]hE]hL]uhpMhr]r&+h{XuETA scheduler: Was missing a logger object, so the scheduler crashed when trying to log that a task had been revoked.r'+r(+}r)+(hAj$+hNj"+ubaubaubh^)r*+}r++(hAXnmanagement.commands.camqadm: Fixed typo ``camqpadm`` -> ``camqadm`` (http://github.com/ask/celery/issues/83). hNhbhihIhjhhB}r,+(hD]hK]hF]hE]hL]uhpNhqhhr]r-+h)r.+}r/+(hAXmmanagement.commands.camqadm: Fixed typo ``camqpadm`` -> ``camqadm`` (http://github.com/ask/celery/issues/83).hNj*+hihIhjhhB}r0+(hD]hK]hF]hE]hL]uhpMhr]r1+(h{X(management.commands.camqadm: Fixed typo r2+r3+}r4+(hAX(management.commands.camqadm: Fixed typo hNj.+ubh)r5+}r6+(hAX ``camqpadm``hB}r7+(hD]hK]hF]hE]hL]uhNj.+hr]r8+h{Xcamqpadmr9+r:+}r;+(hAUhNj5+ubahjhubh{X -> r<+r=+}r>+(hAX -> hNj.+ubh)r?+}r@+(hAX ``camqadm``hB}rA+(hD]hK]hF]hE]hL]uhNj.+hr]rB+h{XcamqadmrC+rD+}rE+(hAUhNj?+ubahjhubh{X (rF+rG+}rH+(hAX (hNj.+ubjC)rI+}rJ+(hAX&http://github.com/ask/celery/issues/83rK+hB}rL+(UrefurijK+hE]hF]hD]hK]hL]uhNj.+hr]rM+h{X&http://github.com/ask/celery/issues/83rN+rO+}rP+(hAUhNjI+ubahjjLubh{X).rQ+rR+}rS+(hAX).hNj.+ubeubaubh^)rT+}rU+(hAXrPeriodicTask.delta_resolution: Was not working for days and hours, now fixed by rounding to the nearest day/hour. hNhbhihIhjhhB}rV+(hD]hK]hF]hE]hL]uhpNhqhhr]rW+h)rX+}rY+(hAXqPeriodicTask.delta_resolution: Was not working for days and hours, now fixed by rounding to the nearest day/hour.rZ+hNjT+hihIhjhhB}r[+(hD]hK]hF]hE]hL]uhpMhr]r\+h{XqPeriodicTask.delta_resolution: Was not working for days and hours, now fixed by rounding to the nearest day/hour.r]+r^+}r_+(hAjZ+hNjX+ubaubaubh^)r`+}ra+(hAX~Fixed a potential infinite loop in ``BaseAsyncResult.__eq__``, although there is no evidence that it has ever been triggered. hNhbhihIhjhhB}rb+(hD]hK]hF]hE]hL]uhpNhqhhr]rc+h)rd+}re+(hAX}Fixed a potential infinite loop in ``BaseAsyncResult.__eq__``, although there is no evidence that it has ever been triggered.hNj`+hihIhjhhB}rf+(hD]hK]hF]hE]hL]uhpMhr]rg+(h{X#Fixed a potential infinite loop in rh+ri+}rj+(hAX#Fixed a potential infinite loop in hNjd+ubh)rk+}rl+(hAX``BaseAsyncResult.__eq__``hB}rm+(hD]hK]hF]hE]hL]uhNjd+hr]rn+h{XBaseAsyncResult.__eq__ro+rp+}rq+(hAUhNjk+ubahjhubh{X@, although there is no evidence that it has ever been triggered.rr+rs+}rt+(hAX@, although there is no evidence that it has ever been triggered.hNjd+ubeubaubh^)ru+}rv+(hAXcceleryd: Now handles messages with encoding problems by acking them and emitting an error message. hNhbhihIhjhhB}rw+(hD]hK]hF]hE]hL]uhpNhqhhr]rx+h)ry+}rz+(hAXbceleryd: Now handles messages with encoding problems by acking them and emitting an error message.r{+hNju+hihIhjhhB}r|+(hD]hK]hF]hE]hL]uhpMhr]r}+h{Xbceleryd: Now handles messages with encoding problems by acking them and emitting an error message.r~+r+}r+(hAj{+hNjy+ubaubaubeubhihIhjhhB}r+(hD]hK]hF]hE]hL]uhpNhqhhr]r+(h)r+}r+(hAXbWe now use a custom logger in tasks. This logger supports task magic keyword arguments in formats.r+hNh_hihIhjhhB}r+(hD]hK]hF]hE]hL]uhpMFhr]r+h{XbWe now use a custom logger in tasks. This logger supports task magic keyword arguments in formats.r+r+}r+(hAj+hNj+ubaubh[eubhr]r+(h)r+}r+(hAXThe default format for tasks (``CELERYD_TASK_LOG_FORMAT``) now includes the id and the name of tasks so the origin of task log messages can easily be traced.hNh[hihIhjhhB}r+(hD]hK]hF]hE]hL]uhpMIhr]r+(h{XThe default format for tasks (r+r+}r+(hAXThe default format for tasks (hNj+ubh)r+}r+(hAX``CELERYD_TASK_LOG_FORMAT``hB}r+(hD]hK]hF]hE]hL]uhNj+hr]r+h{XCELERYD_TASK_LOG_FORMATr+r+}r+(hAUhNj+ubahjhubh{Xd) now includes the id and the name of tasks so the origin of task log messages can easily be traced.r+r+}r+(hAXd) now includes the id and the name of tasks so the origin of task log messages can easily be traced.hNj+ubeubhWh)r+}r+(hAX0To revert to the previous behavior you can set::hNh[hihIhjhhB}r+(hD]hK]hF]hE]hL]uhpMQhr]r+h{X/To revert to the previous behavior you can set:r+r+}r+(hAX/To revert to the previous behavior you can set:hNj+ubaubh)r+}r+(hAXfCELERYD_TASK_LOG_FORMAT = """ [%(asctime)s: %(levelname)s/%(processName)s] %(message)s """.strip()hNh[hjhhB}r+(hhhE]hF]hD]hK]hL]uhpMShr]r+h{XfCELERYD_TASK_LOG_FORMAT = """ [%(asctime)s: %(levelname)s/%(processName)s] %(message)s """.strip()r+r+}r+(hAUhNj+ubaubehjj+ubhr]r+hTahjjubhihIhjj|hB}r+(hD]hK]hF]hE]hL]uhpMOhr]r+(j)r+}r+(hAXExample output::r+hNhThihIhjjhB}r+(hD]hK]hF]hE]hL]uhpMOhr]r+h{XExample output::r+r+}r+(hAj+hNj+ubaubhPeubhr]r+hV)r+}r+(hAUhB}r+(hD]hK]hF]hE]hL]uhNhPhr]r+hS)r+}r+(hAXn[2010-03-25 13:11:20,317: INFO/PoolWorker-1] [tasks.add(a6e1c5ad-60d9-42a0-8b24-9e39363125a4)] Hello from add hNj+hihIhjj|hB}r+(hD]hK]hF]hE]hL]uhpMOhr]r+(j)r+}r+(hAX,[2010-03-25 13:11:20,317: INFO/PoolWorker-1]r+hNj+hihIhjjhB}r+(hD]hK]hF]hE]hL]uhpMOhr]r+h{X,[2010-03-25 13:11:20,317: INFO/PoolWorker-1]r+r+}r+(hAj+hNj+ubaubhO)r+}r+(hAUhB}r+(hD]hK]hF]hE]hL]uhNj+hr]r+h)r+}r+(hAX@[tasks.add(a6e1c5ad-60d9-42a0-8b24-9e39363125a4)] Hello from addr+hNj+hihIhjhhB}r+(hD]hK]hF]hE]hL]uhpMOhr]r+h{X@[tasks.add(a6e1c5ad-60d9-42a0-8b24-9e39363125a4)] Hello from addr+r+}r+(hAj+hNj+ubaubahjjubeubahjjubahjjubhr]r+h)r+}r+(hAUhB}r+(hD]hK]hF]hE]hL]uhNh?hr]r+h{X`Blank line missing before literal block (after the "::")? Interpreted as a definition list item.r+r+}r+(hAUhNj+ubahjhubahjUsystem_messager+ubh>)r+}r+(hAUhNjhihIhjj+hB}r+(hD]UlevelKhE]hF]r+jaUsourcehIhK]hL]UlineMUtypehMuhpMhqhhr]r+h)r+}r+(hAUhB}r+(hD]hK]hF]hE]hL]uhNj+hr]r+h{X'Duplicate implicit target name: "news".r+r+}r+(hAUhNj+ubahjhubaubh>)r+}r+(hAUhNj?hihIhjj+hB}r+(hD]UlevelKhE]hF]r+jDaUsourcehIhK]hL]UlineMUtypehMuhpMhqhhr]r+h)r+}r+(hAUhB}r+(hD]hK]hF]hE]hL]uhNj+hr]r+h{X*Duplicate implicit target name: "changes".r+r+}r+(hAUhNj+ubahjhubaubh>)r+}r+(hAUhNjhihIhjj+hB}r+(hD]UlevelKhE]hF]r+jaUsourcehIhK]hL]UlineMUtypehMuhpMhqhhr]r+h)r+}r+(hAUhB}r+(hD]hK]hF]hE]hL]uhNj+hr]r+h{X*Duplicate implicit target name: "changes".r+r+}r+(hAUhNj+ubahjhubaubh>)r,}r,(hAUhNj_hihIhjj+hB}r,(hD]UlevelKhE]hF]r,jdaUsourcehIhK]hL]UlineMUtypehMuhpMhqhhr]r,h)r,}r,(hAUhB}r,(hD]hK]hF]hE]hL]uhNj,hr]r,h{X@Duplicate implicit target name: "backward incompatible changes".r ,r ,}r ,(hAUhNj,ubahjhubaubh>)r ,}r ,(hAUhNjhihIhjj+hB}r,(hD]UlevelKhE]hF]r,jaUsourcehIhK]hL]UlineMUtypehMuhpMhqhhr]r,h)r,}r,(hAUhB}r,(hD]hK]hF]hE]hL]uhNj ,hr]r,h{X4Duplicate implicit target name: "important changes".r,r,}r,(hAUhNj,ubahjhubaubh>)r,}r,(hAUhNjxhihIhjj+hB}r,(hD]UlevelKhE]hF]r,j~aUsourcehIhK]hL]UlineM)UtypehMuhpM)hqhhr]r,h)r,}r,(hAUhB}r,(hD]hK]hF]hE]hL]uhNj,hr]r ,h{X'Duplicate implicit target name: "news".r!,r",}r#,(hAUhNj,ubahjhubaubh>)r$,}r%,(hAUhNjhihIhjj+hB}r&,(hD]UlevelKhE]hF]r',j aUsourcehIhK]hL]UlineM]UtypehMuhpM]hqhhr]r(,h)r),}r*,(hAUhB}r+,(hD]hK]hF]hE]hL]uhNj$,hr]r,,h{X4Duplicate implicit target name: "important changes".r-,r.,}r/,(hAUhNj),ubahjhubaubh>)r0,}r1,(hAUhNjhihIhjj+hB}r2,(hD]UlevelKhE]hF]r3,jaUsourcehIhK]hL]UlineMpUtypehMuhpMphqhhr]r4,h)r5,}r6,(hAUhB}r7,(hD]hK]hF]hE]hL]uhNj0,hr]r8,h{X'Duplicate implicit target name: "news".r9,r:,}r;,(hAUhNj5,ubahjhubaubeUcurrent_sourcer<,NU decorationr=,NUautofootnote_startr>,KUnameidsr?,}r@,(hjhj'hj6&h jh hh jq'h jh j&$hjZ"hj"hj#hNhj:'hj)hjhjhj&hNhjhj'hhhj_hj&hj)hjhj%h j,%h!j[%h"jJh#j,$h$jLh%j h&jm h'jvh(Nh)j h*jxh+jh,j%h-Nh.jZh/jh0j;h1jyh2j)h3jTh4j$h5j"h6jh7j3(h8hh9hnuhr]rA,hgahAUU transformerrB,NU footnote_refsrC,}rD,UrefnamesrE,}rF,(X+can i send some tasks to only some servers?]rG,j $aXfaq]rH,j$aX can i use celery without django?]rI,j<aXcookbook: retrying tasks]rJ,jiauUsymbol_footnotesrK,]rL,Uautofootnote_refsrM,]rN,Usymbol_footnote_refsrO,]rP,U citationsrQ,]rR,hqhU current_linerS,NUtransform_messagesrT,]rU,h>)rV,}rW,(hAUhB}rX,(hD]UlevelKhE]hF]UsourcehIhK]hL]UlineK9UtypehMuhr]rY,h)rZ,}r[,(hAUhB}r\,(hD]hK]hF]hE]hL]uhNjV,hr]r],h{X-Hyperlink target "index-0" is not referenced.r^,r_,}r`,(hAUhNjZ,ubahjhubahjj+ubaUreporterra,NUid_startrb,K%U autofootnotesrc,]rd,U citation_refsre,}rf,Uindirect_targetsrg,]rh,Usettingsri,(cdocutils.frontend Values rj,ork,}rl,(Ufootnote_backlinksrm,KUrecord_dependenciesrn,NU rfc_base_urlro,Uhttp://tools.ietf.org/html/rp,U tracebackrq,Upep_referencesrr,NUstrip_commentsrs,NU toc_backlinksrt,Uentryru,U language_coderv,Uenrw,U datestamprx,NU report_levelry,KU _destinationrz,NU halt_levelr{,KU strip_classesr|,NhxNUerror_encoding_error_handlerr},Ubackslashreplacer~,Udebugr,NUembed_stylesheetr,Uoutput_encoding_error_handlerr,Ustrictr,U sectnum_xformr,KUdump_transformsr,NU docinfo_xformr,KUwarning_streamr,NUpep_file_url_templater,Upep-%04dr,Uexit_status_levelr,KUconfigr,NUstrict_visitorr,NUcloak_email_addressesr,Utrim_footnote_reference_spacer,Uenvr,NUdump_pseudo_xmlr,NUexpose_internalsr,NUsectsubtitle_xformr,U source_linkr,NUrfc_referencesr,NUoutput_encodingr,Uutf-8r,U source_urlr,NUinput_encodingr,U utf-8-sigr,U_disable_configr,NU id_prefixr,UU tab_widthr,KUerror_encodingr,UUTF-8r,U_sourcer,UG/var/build/user_builds/celery/checkouts/1.0-archived/docs/changelog.rstr,Ugettext_compactr,U generatorr,NUdump_internalsr,NU smart_quotesr,U pep_base_urlr,Uhttp://www.python.org/dev/peps/r,Usyntax_highlightr,Ulongr,Uinput_encoding_error_handlerr,j,Uauto_id_prefixr,Uidr,Udoctitle_xformr,Ustrip_elements_with_classesr,NU _config_filesr,]Ufile_insertion_enabledr,U raw_enabledr,KU dump_settingsr,NubUsymbol_footnote_startr,KUidsr,}r,(j"j~"j)hejxjtjq'jm'j%j%j[%jW%j0 j* jjjjjjjDj?jyjuj j jjjjj_j[jjjjjjjTjPhhjjhnhgj jjjjvjrjdj_jjj3(j/(j:'j6'jjj&j&j~jxhhj'j'j,$j($j&$j"$j'j'jjjjj"jjLjHj jj,%j(%jJjFj#j#jZjVjjj;j7j$j$j6&j2&j&j&j)j)jm ji j)j%hhjZ"jV"jjj"j"j%j%jjuUsubstitution_namesr,}r,hjhqhB}r,(hD]hE]hF]UsourcehIhK]hL]uU footnotesr,]r,Urefidsr,}r,ub.PKXDDlIܜ5celery-1.0-archived/.doctrees/internals/index.doctreecdocutils.nodes document q)q}q(U nametypesq}qX internalsqNsUsubstitution_defsq}qUparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startq KUnameidsq}qhU internalsqsUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXM/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/index.rstqq}qbUtagnameqUsectionqU attributesq}q (Udupnamesq!]Uclassesq"]Ubackrefsq#]Uidsq$]q%haUnamesq&]q'hauUlineq(KUdocumentq)hh]q*(cdocutils.nodes title q+)q,}q-(hX Internalsq.hhhhhUtitleq/h}q0(h!]h"]h#]h$]h&]uh(Kh)hh]q1cdocutils.nodes Text q2X Internalsq3q4}q5(hh.hh,ubaubcdocutils.nodes field_list q6)q7}q8(hUhhhhhU field_listq9h}q:(h!]h"]h#]h$]h&]uh(Kh)hh]q;(cdocutils.nodes field q<)q=}q>(hUhh7hhhUfieldq?h}q@(h!]h"]h#]h$]h&]uh(Kh)hh]qA(cdocutils.nodes field_name qB)qC}qD(hXReleaseqEh}qF(h!]h"]h#]h$]h&]uhh=h]qGh2XReleaseqHqI}qJ(hhEhhCubahU field_nameqKubcdocutils.nodes field_body qL)qM}qN(hX |version|qOh}qP(h!]h"]h#]h$]h&]uhh=h]qQcdocutils.nodes paragraph qR)qS}qT(hhOhhMhhhU paragraphqUh}qV(h!]h"]h#]h$]h&]uh(Kh]qWh2X1.0qXqY}qZ(hU1.0q[hhSubaubahU field_bodyq\ubeubh<)q]}q^(hUhh7hhhh?h}q_(h!]h"]h#]h$]h&]uh(Kh)hh]q`(hB)qa}qb(hXDateqch}qd(h!]h"]h#]h$]h&]uhh]h]qeh2XDateqfqg}qh(hhchhaubahhKubhL)qi}qj(hX|today| h}qk(h!]h"]h#]h$]h&]uhh]h]qlhR)qm}qn(hX|today|qohhihhhhUh}qp(h!]h"]h#]h$]h&]uh(Kh]qqh2XFebruary 04, 2014qrqs}qt(hXFebruary 04, 2014hhmubaubahh\ubeubeubcdocutils.nodes compound qu)qv}qw(hUhhhhhUcompoundqxh}qy(h!]h"]qzUtoctree-wrapperq{ah#]h$]h&]uh(Nh)hh]q|csphinx.addnodes toctree q})q~}q(hUhhvhhhUtoctreeqh}q(UnumberedqKU includehiddenqhXinternals/indexqU titlesonlyqUglobqh$]h#]h!]h"]h&]Uentriesq]q(NXinternals/deprecationqqNXinternals/workerqqNXinternals/protocolqqNXinternals/eventsqqNXinternals/moduleindexqqNXinternals/reference/indexqqeUhiddenqU includefilesq]q(hhhhhheUmaxdepthqKuh(Kh]ubaubeubahUU transformerqNU footnote_refsq}qUrefnamesq}qUsymbol_footnotesq]qUautofootnote_refsq]qUsymbol_footnote_refsq]qU citationsq]qh)hU current_lineqNUtransform_messagesq]qUreporterqNUid_startqKU autofootnotesq]qU citation_refsq}qUindirect_targetsq]qUsettingsq(cdocutils.frontend Values qoq}q(Ufootnote_backlinksqKUrecord_dependenciesqNU rfc_base_urlqUhttp://tools.ietf.org/html/qU tracebackqUpep_referencesqNUstrip_commentsqNU toc_backlinksqUentryqU language_codeqUenqU datestampqNU report_levelqKU _destinationqNU halt_levelqKU strip_classesqNh/NUerror_encoding_error_handlerqUbackslashreplaceqUdebugqNUembed_stylesheetqȉUoutput_encoding_error_handlerqUstrictqU sectnum_xformqKUdump_transformsqNU docinfo_xformqKUwarning_streamqNUpep_file_url_templateqUpep-%04dqUexit_status_levelqKUconfigqNUstrict_visitorqNUcloak_email_addressesqԈUtrim_footnote_reference_spaceqՉUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqىU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUM/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/index.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]qUfile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qhhsUsubstitution_namesq}qhh)h}q(h!]h$]h#]Usourcehh"]h&]uU footnotesr]rUrefidsr}rub.PKXDD6998celery-1.0-archived/.doctrees/internals/protocol.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X serializationqNXtask message protocolqNXexampleqNuUsubstitution_defsq }q Uparse_messagesq ]q Ucurrent_sourceq NU decorationqNUautofootnote_startqKUnameidsq}q(hU serializationqhUtask-message-protocolqhUexamplequUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXP/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/protocol.rstqq}q bUtagnameq!Usectionq"U attributesq#}q$(Udupnamesq%]Uclassesq&]Ubackrefsq']Uidsq(]q)haUnamesq*]q+hauUlineq,KUdocumentq-hh]q.(cdocutils.nodes title q/)q0}q1(hXTask Message Protocolq2hhhhh!Utitleq3h#}q4(h%]h&]h']h(]h*]uh,Kh-hh]q5cdocutils.nodes Text q6XTask Message Protocolq7q8}q9(hh2hh0ubaubcdocutils.nodes bullet_list q:)q;}q<(hUhhhNh!U bullet_listq=h#}q>(Ubulletq?X*h(]h']h%]h&]h*]uh,Nh-hh]q@(cdocutils.nodes list_item qA)qB}qC(hX4task ``string`` Name of the task. **required** h#}qD(h%]h&]h']h(]h*]uhh;h]qEcdocutils.nodes definition_list qF)qG}qH(hUh#}qI(h%]h&]h']h(]h*]uhhBh]qJcdocutils.nodes definition_list_item qK)qL}qM(hX0task ``string`` Name of the task. **required** hhGhhh!Udefinition_list_itemqNh#}qO(h%]h&]h']h(]h*]uh,Kh]qP(cdocutils.nodes term qQ)qR}qS(hXtaskqThhLhhh!UtermqUh#}qV(h%]h&]h']h(]h*]uh,Kh]qWh6XtaskqXqY}qZ(hhThhRubaubcdocutils.nodes definition q[)q\}q](hUh#}q^(h%]h&]h']h(]h*]uhhLh]q_(cdocutils.nodes paragraph q`)qa}qb(hX ``string``qchh\hhh!U paragraphqdh#}qe(h%]h&]h']h(]h*]uh,Kh]qfcdocutils.nodes literal qg)qh}qi(hhch#}qj(h%]h&]h']h(]h*]uhhah]qkh6Xstringqlqm}qn(hUhhhubah!Uliteralqoubaubh`)qp}qq(hXName of the task. **required**hh\hhh!hdh#}qr(h%]h&]h']h(]h*]uh,Kh]qs(h6XName of the task. qtqu}qv(hXName of the task. hhpubcdocutils.nodes strong qw)qx}qy(hX **required**h#}qz(h%]h&]h']h(]h*]uhhph]q{h6Xrequiredq|q}}q~(hUhhxubah!Ustrongqubeubeh!U definitionqubeubah!Udefinition_listqubah!U list_itemqubhA)q}q(hX>id ``string`` Unique id of the task (UUID). **required** h#}q(h%]h&]h']h(]h*]uhh;h]qhF)q}q(hUh#}q(h%]h&]h']h(]h*]uhhh]qhK)q}q(hX:id ``string`` Unique id of the task (UUID). **required** hhhhh!hNh#}q(h%]h&]h']h(]h*]uh,K h]q(hQ)q}q(hXidqhhhhh!hUh#}q(h%]h&]h']h(]h*]uh,K h]qh6Xidqq}q(hhhhubaubh[)q}q(hUh#}q(h%]h&]h']h(]h*]uhhh]q(h`)q}q(hX ``string``qhhhhh!hdh#}q(h%]h&]h']h(]h*]uh,K h]qhg)q}q(hhh#}q(h%]h&]h']h(]h*]uhhh]qh6Xstringqq}q(hUhhubah!houbaubh`)q}q(hX*Unique id of the task (UUID). **required**hhhhh!hdh#}q(h%]h&]h']h(]h*]uh,K h]q(h6XUnique id of the task (UUID). qq}q(hXUnique id of the task (UUID). hhubhw)q}q(hX **required**h#}q(h%]h&]h']h(]h*]uhhh]qh6Xrequiredqq}q(hUhhubah!hubeubeh!hubeubah!hubah!hubhA)q}q(hXMargs ``list`` List of arguments. Will be an empty list if not provided. h#}q(h%]h&]h']h(]h*]uhh;h]qhF)q}q(hUh#}q(h%]h&]h']h(]h*]uhhh]qhK)q}q(hXIargs ``list`` List of arguments. Will be an empty list if not provided. hhhhh!hNh#}q(h%]h&]h']h(]h*]uh,Kh]q(hQ)q}q(hXargsqhhhhh!hUh#}q(h%]h&]h']h(]h*]uh,Kh]qh6Xargsqƅq}q(hhhhubaubh[)q}q(hUh#}q(h%]h&]h']h(]h*]uhhh]q(h`)q}q(hX``list``qhhhhh!hdh#}q(h%]h&]h']h(]h*]uh,Kh]qhg)q}q(hhh#}q(h%]h&]h']h(]h*]uhhh]qh6Xlistqօq}q(hUhhubah!houbaubh`)q}q(hX9List of arguments. Will be an empty list if not provided.qhhhhh!hdh#}q(h%]h&]h']h(]h*]uh,Kh]qh6X9List of arguments. Will be an empty list if not provided.qޅq}q(hhhhubaubeh!hubeubah!hubah!hubhA)q}q(hXkkwargs ``dictionary`` Dictionary of keyword arguments. Will be an empty dictionary if not provided. h#}q(h%]h&]h']h(]h*]uhh;h]qhF)q}q(hUh#}q(h%]h&]h']h(]h*]uhhh]qhK)q}q(hXekwargs ``dictionary`` Dictionary of keyword arguments. Will be an empty dictionary if not provided. hhhhh!hNh#}q(h%]h&]h']h(]h*]uh,Kh]q(hQ)q}q(hXkwargsqhhhhh!hUh#}q(h%]h&]h']h(]h*]uh,Kh]qh6Xkwargsqq}q(hhhhubaubh[)q}q(hUh#}q(h%]h&]h']h(]h*]uhhh]q(h`)q}q(hX``dictionary``qhhhhh!hdh#}q(h%]h&]h']h(]h*]uh,Kh]qhg)q}q(hhh#}r(h%]h&]h']h(]h*]uhhh]rh6X dictionaryrr}r(hUhhubah!houbaubh`)r}r(hXMDictionary of keyword arguments. Will be an empty dictionary if not provided.rhhhhh!hdh#}r(h%]h&]h']h(]h*]uh,Kh]r h6XMDictionary of keyword arguments. Will be an empty dictionary if not provided.r r }r (hjhjubaubeh!hubeubah!hubah!hubhA)r }r(hXoretries ``int`` Current number of times this task has been retried. Defaults to ``0`` if not specified. h#}r(h%]h&]h']h(]h*]uhh;h]rhF)r}r(hUh#}r(h%]h&]h']h(]h*]uhj h]rhK)r}r(hXiretries ``int`` Current number of times this task has been retried. Defaults to ``0`` if not specified. hjhhh!hNh#}r(h%]h&]h']h(]h*]uh,Kh]r(hQ)r}r(hXretriesrhjhhh!hUh#}r(h%]h&]h']h(]h*]uh,Kh]rh6Xretriesrr}r (hjhjubaubh[)r!}r"(hUh#}r#(h%]h&]h']h(]h*]uhjh]r$(h`)r%}r&(hX``int``r'hj!hhh!hdh#}r((h%]h&]h']h(]h*]uh,Kh]r)hg)r*}r+(hj'h#}r,(h%]h&]h']h(]h*]uhj%h]r-h6Xintr.r/}r0(hUhj*ubah!houbaubh`)r1}r2(hXWCurrent number of times this task has been retried. Defaults to ``0`` if not specified.hj!hhh!hdh#}r3(h%]h&]h']h(]h*]uh,Kh]r4(h6X@Current number of times this task has been retried. Defaults to r5r6}r7(hX@Current number of times this task has been retried. Defaults to hj1ubhg)r8}r9(hX``0``h#}r:(h%]h&]h']h(]h*]uhj1h]r;h6X0r<}r=(hUhj8ubah!houbh6X if not specified.r>r?}r@(hX if not specified.hj1ubeubeh!hubeubah!hubah!hubhA)rA}rB(hXeta ``string`` (ISO 8601) Estimated time of arrival. This is the date and time in ISO 8601 format. If not provided the message is not scheduled, but will be executed asap. h#}rC(h%]h&]h']h(]h*]uhh;h]rDhF)rE}rF(hUh#}rG(h%]h&]h']h(]h*]uhjAh]rHhK)rI}rJ(hXeta ``string`` (ISO 8601) Estimated time of arrival. This is the date and time in ISO 8601 format. If not provided the message is not scheduled, but will be executed asap. hjEhhh!hNh#}rK(h%]h&]h']h(]h*]uh,K%h]rL(hQ)rM}rN(hXetarOhjIhhh!hUh#}rP(h%]h&]h']h(]h*]uh,K%h]rQh6XetarRrS}rT(hjOhjMubaubh[)rU}rV(hUh#}rW(h%]h&]h']h(]h*]uhjIh]rX(h`)rY}rZ(hX``string`` (ISO 8601)hjUhhh!hdh#}r[(h%]h&]h']h(]h*]uh,K!h]r\(hg)r]}r^(hX ``string``h#}r_(h%]h&]h']h(]h*]uhjYh]r`h6Xstringrarb}rc(hUhj]ubah!houbh6X (ISO 8601)rdre}rf(hX (ISO 8601)hjYubeubh`)rg}rh(hXEstimated time of arrival. This is the date and time in ISO 8601 format. If not provided the message is not scheduled, but will be executed asap.rihjUhhh!hdh#}rj(h%]h&]h']h(]h*]uh,K#h]rkh6XEstimated time of arrival. This is the date and time in ISO 8601 format. If not provided the message is not scheduled, but will be executed asap.rlrm}rn(hjihjgubaubeh!hubeubah!hubah!hubeubh)ro}rp(hUhhhhh!h"h#}rq(h%]h&]h']h(]rrhah*]rshauh,K(h-hh]rt(h/)ru}rv(hXExamplerwhjohhh!h3h#}rx(h%]h&]h']h(]h*]uh,K(h-hh]ryh6XExamplerzr{}r|(hjwhjuubaubh`)r}}r~(hXSThis is an example invocation of the ``celery.task.PingTask`` task in JSON format::hjohhh!hdh#}r(h%]h&]h']h(]h*]uh,K*h-hh]r(h6X%This is an example invocation of the rr}r(hX%This is an example invocation of the hj}ubhg)r}r(hX``celery.task.PingTask``h#}r(h%]h&]h']h(]h*]uhj}h]rh6Xcelery.task.PingTaskrr}r(hUhjubah!houbh6X task in JSON format:rr}r(hX task in JSON format:hj}ubeubcdocutils.nodes literal_block r)r}r(hXq{"task": "celery.task.PingTask", "args": [], "kwargs": {}, "retries": 0, "eta": "2009-11-17T12:30:56.527191"}hjohhh!U literal_blockrh#}r(U xml:spacerUpreserverh(]h']h%]h&]h*]uh,K-h-hh]rh6Xq{"task": "celery.task.PingTask", "args": [], "kwargs": {}, "retries": 0, "eta": "2009-11-17T12:30:56.527191"}rr}r(hUhjubaubeubh)r}r(hUhhhhh!h"h#}r(h%]h&]h']h(]rhah*]rhauh,K5h-hh]r(h/)r}r(hX Serializationrhjhhh!h3h#}r(h%]h&]h']h(]h*]uh,K5h-hh]rh6X Serializationrr}r(hjhjubaubh`)r}r(hX^The protocol supports several serialization formats using the ``content_type`` message header.hjhhh!hdh#}r(h%]h&]h']h(]h*]uh,K7h-hh]r(h6X>The protocol supports several serialization formats using the rr}r(hX>The protocol supports several serialization formats using the hjubhg)r}r(hX``content_type``h#}r(h%]h&]h']h(]h*]uhjh]rh6X content_typerr}r(hUhjubah!houbh6X message header.rr}r(hX message header.hjubeubh`)r}r(hXEThe MIME-types supported by default are shown in the following table.rhjhhh!hdh#}r(h%]h&]h']h(]h*]uh,K:h-hh]rh6XEThe MIME-types supported by default are shown in the following table.rr}r(hjhjubaubcdocutils.nodes table r)r}r(hUhjhNh!Utablerh#}r(h%]h&]h']h(]h*]uh,Nh-hh]rcdocutils.nodes tgroup r)r}r(hUh#}r(h(]h']h%]h&]h*]UcolsKuhjh]r(cdocutils.nodes colspec r)r}r(hUh#}r(h(]h']h%]h&]h*]UcolwidthKuhjh]h!Ucolspecrubj)r}r(hUh#}r(h(]h']h%]h&]h*]UcolwidthK!uhjh]h!jubcdocutils.nodes thead r)r}r(hUh#}r(h%]h&]h']h(]h*]uhjh]rcdocutils.nodes row r)r}r(hUh#}r(h%]h&]h']h(]h*]uhjh]r(cdocutils.nodes entry r)r}r(hUh#}r(h%]h&]h']h(]h*]uhjh]rh`)r}r(hXSchemerhjhhh!hdh#}r(h%]h&]h']h(]h*]uh,K=h]rh6XSchemerr}r(hjhjubaubah!Uentryrubj)r}r(hUh#}r(h%]h&]h']h(]h*]uhjh]rh`)r}r(hX MIME Typerhjhhh!hdh#}r(h%]h&]h']h(]h*]uh,K=h]rh6X MIME Typerr}r(hjhjubaubah!jubeh!Urowrubah!Utheadrubcdocutils.nodes tbody r)r}r(hUh#}r(h%]h&]h']h(]h*]uhjh]r(j)r}r(hUh#}r(h%]h&]h']h(]h*]uhjh]r(j)r}r(hUh#}r(h%]h&]h']h(]h*]uhjh]rh`)r}r(hXjsonrhjhhh!hdh#}r (h%]h&]h']h(]h*]uh,K?h]r h6Xjsonr r }r (hjhjubaubah!jubj)r}r(hUh#}r(h%]h&]h']h(]h*]uhjh]rh`)r}r(hXapplication/jsonrhjhhh!hdh#}r(h%]h&]h']h(]h*]uh,K?h]rh6Xapplication/jsonrr}r(hjhjubaubah!jubeh!jubj)r}r(hUh#}r(h%]h&]h']h(]h*]uhjh]r(j)r}r(hUh#}r (h%]h&]h']h(]h*]uhjh]r!h`)r"}r#(hXyamlr$hjhhh!hdh#}r%(h%]h&]h']h(]h*]uh,K@h]r&h6Xyamlr'r(}r)(hj$hj"ubaubah!jubj)r*}r+(hUh#}r,(h%]h&]h']h(]h*]uhjh]r-h`)r.}r/(hXapplication/x-yamlr0hj*hhh!hdh#}r1(h%]h&]h']h(]h*]uh,K@h]r2h6Xapplication/x-yamlr3r4}r5(hj0hj.ubaubah!jubeh!jubj)r6}r7(hUh#}r8(h%]h&]h']h(]h*]uhjh]r9(j)r:}r;(hUh#}r<(h%]h&]h']h(]h*]uhj6h]r=h`)r>}r?(hXpickler@hj:hhh!hdh#}rA(h%]h&]h']h(]h*]uh,KAh]rBh6XpicklerCrD}rE(hj@hj>ubaubah!jubj)rF}rG(hUh#}rH(h%]h&]h']h(]h*]uhj6h]rIh`)rJ}rK(hXapplication/x-python-serializerLhjFhhh!hdh#}rM(h%]h&]h']h(]h*]uh,KAh]rNh6Xapplication/x-python-serializerOrP}rQ(hjLhjJubaubah!jubeh!jubeh!UtbodyrRubeh!UtgrouprSubaubeubeubahUU transformerrTNU footnote_refsrU}rVUrefnamesrW}rXUsymbol_footnotesrY]rZUautofootnote_refsr[]r\Usymbol_footnote_refsr]]r^U citationsr_]r`h-hU current_lineraNUtransform_messagesrb]rcUreporterrdNUid_startreKU autofootnotesrf]rgU citation_refsrh}riUindirect_targetsrj]rkUsettingsrl(cdocutils.frontend Values rmorn}ro(Ufootnote_backlinksrpKUrecord_dependenciesrqNU rfc_base_urlrrUhttp://tools.ietf.org/html/rsU tracebackrtUpep_referencesruNUstrip_commentsrvNU toc_backlinksrwjU language_coderxUenryU datestamprzNU report_levelr{KU _destinationr|NU halt_levelr}KU strip_classesr~Nh3NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUP/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/protocol.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]rUfile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hjhjohhuUsubstitution_namesr}rh!h-h#}r(h%]h(]h']Usourcehh&]h*]uU footnotesr]rUrefidsr}rub.PKXDD66;celery-1.0-archived/.doctrees/internals/deprecation.doctreecdocutils.nodes document q)q}q(U nametypesq}qXcelery deprecation timelineqNsUsubstitution_defsq}qUparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startq KUnameidsq}qhUcelery-deprecation-timelineqsUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXS/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/deprecation.rstqq}qbUtagnameqUsectionqU attributesq}q (Udupnamesq!]Uclassesq"]Ubackrefsq#]Uidsq$]q%haUnamesq&]q'hauUlineq(KUdocumentq)hh]q*(cdocutils.nodes title q+)q,}q-(hXCelery Deprecation Timelineq.hhhhhUtitleq/h}q0(h!]h"]h#]h$]h&]uh(Kh)hh]q1cdocutils.nodes Text q2XCelery Deprecation Timelineq3q4}q5(hh.hh,ubaubcdocutils.nodes bullet_list q6)q7}q8(hUhhhhhU bullet_listq9h}q:(Ubulletq;X*h$]h#]h!]h"]h&]uh(Kh)hh]q}q?(hX"1.2 * The following settings will be removed: ===================================== ===================================== **Setting name** **Replace with** ===================================== ===================================== ``CELERY_AMQP_CONSUMER_QUEUES`` ``CELERY_QUEUES`` ``CELERY_AMQP_CONSUMER_QUEUES`` ``CELERY_QUEUES`` ``CELERY_AMQP_EXCHANGE`` ``CELERY_DEFAULT_EXCHANGE`` ``CELERY_AMQP_EXCHANGE_TYPE`` ``CELERY_DEFAULT_AMQP_EXCHANGE_TYPE`` ``CELERY_AMQP_CONSUMER_ROUTING_KEY`` ``CELERY_QUEUES`` ``CELERY_AMQP_PUBLISHER_ROUTING_KEY`` ``CELERY_DEFAULT_ROUTING_KEY`` ===================================== ===================================== * ``CELERY_LOADER`` definitions without class name. E.g. ``celery.loaders.default``, needs to include the class name: ``celery.loaders.default.Loader``. * :meth:`TaskSet.run`. Use :meth:`celery.task.base.TaskSet.apply_async` instead. * The module :mod:`celery.task.rest`; use :mod:`celery.task.http` instead.hh7hNhU list_itemq@h}qA(h!]h"]h#]h$]h&]uh(Nh)hh]qB(cdocutils.nodes paragraph qC)qD}qE(hX1.2qFhh>hhhU paragraphqGh}qH(h!]h"]h#]h$]h&]uh(Kh]qIh2X1.2qJqK}qL(hhFhhDubaubh6)qM}qN(hUh}qO(h;X*h$]h#]h!]h"]h&]uhh>h]qP(h=)qQ}qR(hXThe following settings will be removed: ===================================== ===================================== **Setting name** **Replace with** ===================================== ===================================== ``CELERY_AMQP_CONSUMER_QUEUES`` ``CELERY_QUEUES`` ``CELERY_AMQP_CONSUMER_QUEUES`` ``CELERY_QUEUES`` ``CELERY_AMQP_EXCHANGE`` ``CELERY_DEFAULT_EXCHANGE`` ``CELERY_AMQP_EXCHANGE_TYPE`` ``CELERY_DEFAULT_AMQP_EXCHANGE_TYPE`` ``CELERY_AMQP_CONSUMER_ROUTING_KEY`` ``CELERY_QUEUES`` ``CELERY_AMQP_PUBLISHER_ROUTING_KEY`` ``CELERY_DEFAULT_ROUTING_KEY`` ===================================== ===================================== h}qS(h!]h"]h#]h$]h&]uhhMh]qT(hC)qU}qV(hX'The following settings will be removed:qWhhQhhhhGh}qX(h!]h"]h#]h$]h&]uh(Kh]qYh2X'The following settings will be removed:qZq[}q\(hhWhhUubaubcdocutils.nodes table q])q^}q_(hUh}q`(h!]h"]h#]h$]h&]uhhQh]qacdocutils.nodes tgroup qb)qc}qd(hUh}qe(h$]h#]h!]h"]h&]UcolsKuhh^h]qf(cdocutils.nodes colspec qg)qh}qi(hUh}qj(h$]h#]h!]h"]h&]UcolwidthK%uhhch]hUcolspecqkubhg)ql}qm(hUh}qn(h$]h#]h!]h"]h&]UcolwidthK%uhhch]hhkubcdocutils.nodes thead qo)qp}qq(hUh}qr(h!]h"]h#]h$]h&]uhhch]qscdocutils.nodes row qt)qu}qv(hUh}qw(h!]h"]h#]h$]h&]uhhph]qx(cdocutils.nodes entry qy)qz}q{(hUh}q|(h!]h"]h#]h$]h&]uhhuh]q}hC)q~}q(hX**Setting name**qhhzhhhhGh}q(h!]h"]h#]h$]h&]uh(K h]qcdocutils.nodes strong q)q}q(hhh}q(h!]h"]h#]h$]h&]uhh~h]qh2X Setting nameqq}q(hUhhubahUstrongqubaubahUentryqubhy)q}q(hUh}q(h!]h"]h#]h$]h&]uhhuh]qhC)q}q(hX**Replace with**qhhhhhhGh}q(h!]h"]h#]h$]h&]uh(K h]qh)q}q(hhh}q(h!]h"]h#]h$]h&]uhhh]qh2X Replace withqq}q(hUhhubahhubaubahhubehUrowqubahUtheadqubcdocutils.nodes tbody q)q}q(hUh}q(h!]h"]h#]h$]h&]uhhch]q(ht)q}q(hUh}q(h!]h"]h#]h$]h&]uhhh]q(hy)q}q(hUh}q(h!]h"]h#]h$]h&]uhhh]qhC)q}q(hX``CELERY_AMQP_CONSUMER_QUEUES``qhhhhhhGh}q(h!]h"]h#]h$]h&]uh(K h]qcdocutils.nodes literal q)q}q(hhh}q(h!]h"]h#]h$]h&]uhhh]qh2XCELERY_AMQP_CONSUMER_QUEUESqq}q(hUhhubahUliteralqubaubahhubhy)q}q(hUh}q(h!]h"]h#]h$]h&]uhhh]qhC)q}q(hX``CELERY_QUEUES``qhhhhhhGh}q(h!]h"]h#]h$]h&]uh(K h]qh)q}q(hhh}q(h!]h"]h#]h$]h&]uhhh]qh2X CELERY_QUEUESqDžq}q(hUhhubahhubaubahhubehhubht)q}q(hUh}q(h!]h"]h#]h$]h&]uhhh]q(hy)q}q(hUh}q(h!]h"]h#]h$]h&]uhhh]qhC)q}q(hX``CELERY_AMQP_CONSUMER_QUEUES``qhhhhhhGh}q(h!]h"]h#]h$]h&]uh(K h]qh)q}q(hhh}q(h!]h"]h#]h$]h&]uhhh]qh2XCELERY_AMQP_CONSUMER_QUEUESqۅq}q(hUhhubahhubaubahhubhy)q}q(hUh}q(h!]h"]h#]h$]h&]uhhh]qhC)q}q(hX``CELERY_QUEUES``qhhhhhhGh}q(h!]h"]h#]h$]h&]uh(K h]qh)q}q(hhh}q(h!]h"]h#]h$]h&]uhhh]qh2X CELERY_QUEUESq녁q}q(hUhhubahhubaubahhubehhubht)q}q(hUh}q(h!]h"]h#]h$]h&]uhhh]q(hy)q}q(hUh}q(h!]h"]h#]h$]h&]uhhh]qhC)q}q(hX``CELERY_AMQP_EXCHANGE``qhhhhhhGh}q(h!]h"]h#]h$]h&]uh(Kh]qh)q}q(hhh}q(h!]h"]h#]h$]h&]uhhh]qh2XCELERY_AMQP_EXCHANGEqr}r(hUhhubahhubaubahhubhy)r}r(hUh}r(h!]h"]h#]h$]h&]uhhh]rhC)r}r(hX``CELERY_DEFAULT_EXCHANGE``rhjhhhhGh}r (h!]h"]h#]h$]h&]uh(Kh]r h)r }r (hjh}r (h!]h"]h#]h$]h&]uhjh]rh2XCELERY_DEFAULT_EXCHANGErr}r(hUhj ubahhubaubahhubehhubht)r}r(hUh}r(h!]h"]h#]h$]h&]uhhh]r(hy)r}r(hUh}r(h!]h"]h#]h$]h&]uhjh]rhC)r}r(hX``CELERY_AMQP_EXCHANGE_TYPE``rhjhhhhGh}r(h!]h"]h#]h$]h&]uh(Kh]rh)r}r (hjh}r!(h!]h"]h#]h$]h&]uhjh]r"h2XCELERY_AMQP_EXCHANGE_TYPEr#r$}r%(hUhjubahhubaubahhubhy)r&}r'(hUh}r((h!]h"]h#]h$]h&]uhjh]r)hC)r*}r+(hX%``CELERY_DEFAULT_AMQP_EXCHANGE_TYPE``r,hj&hhhhGh}r-(h!]h"]h#]h$]h&]uh(Kh]r.h)r/}r0(hj,h}r1(h!]h"]h#]h$]h&]uhj*h]r2h2X!CELERY_DEFAULT_AMQP_EXCHANGE_TYPEr3r4}r5(hUhj/ubahhubaubahhubehhubht)r6}r7(hUh}r8(h!]h"]h#]h$]h&]uhhh]r9(hy)r:}r;(hUh}r<(h!]h"]h#]h$]h&]uhj6h]r=hC)r>}r?(hX$``CELERY_AMQP_CONSUMER_ROUTING_KEY``r@hj:hhhhGh}rA(h!]h"]h#]h$]h&]uh(Kh]rBh)rC}rD(hj@h}rE(h!]h"]h#]h$]h&]uhj>h]rFh2X CELERY_AMQP_CONSUMER_ROUTING_KEYrGrH}rI(hUhjCubahhubaubahhubhy)rJ}rK(hUh}rL(h!]h"]h#]h$]h&]uhj6h]rMhC)rN}rO(hX``CELERY_QUEUES``rPhjJhhhhGh}rQ(h!]h"]h#]h$]h&]uh(Kh]rRh)rS}rT(hjPh}rU(h!]h"]h#]h$]h&]uhjNh]rVh2X CELERY_QUEUESrWrX}rY(hUhjSubahhubaubahhubehhubht)rZ}r[(hUh}r\(h!]h"]h#]h$]h&]uhhh]r](hy)r^}r_(hUh}r`(h!]h"]h#]h$]h&]uhjZh]rahC)rb}rc(hX%``CELERY_AMQP_PUBLISHER_ROUTING_KEY``rdhj^hhhhGh}re(h!]h"]h#]h$]h&]uh(Kh]rfh)rg}rh(hjdh}ri(h!]h"]h#]h$]h&]uhjbh]rjh2X!CELERY_AMQP_PUBLISHER_ROUTING_KEYrkrl}rm(hUhjgubahhubaubahhubhy)rn}ro(hUh}rp(h!]h"]h#]h$]h&]uhjZh]rqhC)rr}rs(hX``CELERY_DEFAULT_ROUTING_KEY``rthjnhhhhGh}ru(h!]h"]h#]h$]h&]uh(Kh]rvh)rw}rx(hjth}ry(h!]h"]h#]h$]h&]uhjrh]rzh2XCELERY_DEFAULT_ROUTING_KEYr{r|}r}(hUhjwubahhubaubahhubehhubehUtbodyr~ubehUtgrouprubahUtablerubehh@ubh=)r}r(hX``CELERY_LOADER`` definitions without class name. E.g. ``celery.loaders.default``, needs to include the class name: ``celery.loaders.default.Loader``. h}r(h!]h"]h#]h$]h&]uhhMh]r(hC)r}r(hX1``CELERY_LOADER`` definitions without class name.hjhhhhGh}r(h!]h"]h#]h$]h&]uh(Kh]r(h)r}r(hX``CELERY_LOADER``h}r(h!]h"]h#]h$]h&]uhjh]rh2X CELERY_LOADERrr}r(hUhjubahhubh2X definitions without class name.rr}r(hX definitions without class name.hjubeubhC)r}r(hXdE.g. ``celery.loaders.default``, needs to include the class name: ``celery.loaders.default.Loader``.hjhhhhGh}r(h!]h"]h#]h$]h&]uh(Kh]r(h2XE.g. rr}r(hXE.g. hjubh)r}r(hX``celery.loaders.default``h}r(h!]h"]h#]h$]h&]uhjh]rh2Xcelery.loaders.defaultrr}r(hUhjubahhubh2X#, needs to include the class name: rr}r(hX#, needs to include the class name: hjubh)r}r(hX!``celery.loaders.default.Loader``h}r(h!]h"]h#]h$]h&]uhjh]rh2Xcelery.loaders.default.Loaderrr}r(hUhjubahhubh2X.r}r(hX.hjubeubehh@ubh=)r}r(hXO:meth:`TaskSet.run`. Use :meth:`celery.task.base.TaskSet.apply_async` instead. h}r(h!]h"]h#]h$]h&]uhhMh]rhC)r}r(hXN:meth:`TaskSet.run`. Use :meth:`celery.task.base.TaskSet.apply_async` instead.hjhhhhGh}r(h!]h"]h#]h$]h&]uh(Kh]r(csphinx.addnodes pending_xref r)r}r(hX:meth:`TaskSet.run`rhjhhhU pending_xrefrh}r(UreftypeXmethUrefwarnrU reftargetrX TaskSet.runU refdomainXpyrh$]h#]U refexplicith!]h"]h&]UrefdocrXinternals/deprecationrUpy:classrNU py:modulerNuh(Kh]rh)r}r(hjh}r(h!]h"]r(UxrefrjXpy-methreh#]h$]h&]uhjh]rh2X TaskSet.run()rr}r(hUhjubahhubaubh2X. Use rr}r(hX. Use hjubj)r}r(hX,:meth:`celery.task.base.TaskSet.apply_async`rhjhhhjh}r(UreftypeXmethjjX$celery.task.base.TaskSet.apply_asyncU refdomainXpyrh$]h#]U refexplicith!]h"]h&]jjjNjNuh(Kh]rh)r}r(hjh}r(h!]h"]r(jjXpy-methreh#]h$]h&]uhjh]rh2X&celery.task.base.TaskSet.apply_async()rr}r(hUhjubahhubaubh2X instead.rr}r(hX instead.hjubeubahh@ubh=)r}r(hXHThe module :mod:`celery.task.rest`; use :mod:`celery.task.http` instead.rh}r(h!]h"]h#]h$]h&]uhhMh]rhC)r}r(hjhjhhhhGh}r(h!]h"]h#]h$]h&]uh(Kh]r(h2X The module rr}r(hX The module hjubj)r}r(hX:mod:`celery.task.rest`rhjhhhjh}r(UreftypeXmodjjXcelery.task.restU refdomainXpyrh$]h#]U refexplicith!]h"]h&]jjjNjNuh(Kh]rh)r}r(hjh}r(h!]h"]r(jjXpy-modreh#]h$]h&]uhjh]rh2Xcelery.task.restrr}r(hUhjubahhubaubh2X; use rr}r(hX; use hjubj)r}r(hX:mod:`celery.task.http`rhjhhhjh}r(UreftypeXmodjjXcelery.task.httpU refdomainXpyrh$]h#]U refexplicith!]h"]h&]jjjNjNuh(Kh]rh)r}r(hjh}r(h!]h"]r (jjXpy-modr eh#]h$]h&]uhjh]r h2Xcelery.task.httpr r }r(hUhjubahhubaubh2X instead.rr}r(hX instead.hjubeubahh@ubehh9ubeubaubeubahUU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh)hU current_linerNUtransform_messagesr ]r!Ureporterr"NUid_startr#KU autofootnotesr$]r%U citation_refsr&}r'Uindirect_targetsr(]r)Usettingsr*(cdocutils.frontend Values r+or,}r-(Ufootnote_backlinksr.KUrecord_dependenciesr/NU rfc_base_urlr0Uhttp://tools.ietf.org/html/r1U tracebackr2Upep_referencesr3NUstrip_commentsr4NU toc_backlinksr5hU language_coder6Uenr7U datestampr8NU report_levelr9KU _destinationr:NU halt_levelr;KU strip_classesr<Nh/NUerror_encoding_error_handlerr=Ubackslashreplacer>Udebugr?NUembed_stylesheetr@Uoutput_encoding_error_handlerrAUstrictrBU sectnum_xformrCKUdump_transformsrDNU docinfo_xformrEKUwarning_streamrFNUpep_file_url_templaterGUpep-%04drHUexit_status_levelrIKUconfigrJNUstrict_visitorrKNUcloak_email_addressesrLUtrim_footnote_reference_spacerMUenvrNNUdump_pseudo_xmlrONUexpose_internalsrPNUsectsubtitle_xformrQU source_linkrRNUrfc_referencesrSNUoutput_encodingrTUutf-8rUU source_urlrVNUinput_encodingrWU utf-8-sigrXU_disable_configrYNU id_prefixrZUU tab_widthr[KUerror_encodingr\UUTF-8r]U_sourcer^US/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/deprecation.rstr_Ugettext_compactr`U generatorraNUdump_internalsrbNU smart_quotesrcU pep_base_urlrdUhttp://www.python.org/dev/peps/reUsyntax_highlightrfUlongrgUinput_encoding_error_handlerrhjBUauto_id_prefixriUidrjUdoctitle_xformrkUstrip_elements_with_classesrlNU _config_filesrm]Ufile_insertion_enabledrnU raw_enabledroKU dump_settingsrpNubUsymbol_footnote_startrqKUidsrr}rshhsUsubstitution_namesrt}ruhh)h}rv(h!]h$]h#]Usourcehh"]h&]uU footnotesrw]rxUrefidsry}rzub.PKXDDGl&&6celery-1.0-archived/.doctrees/internals/events.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X worker eventsqNX task eventsqNXlist of worker eventsqNuUsubstitution_defsq }q Uparse_messagesq ]q Ucurrent_sourceq NU decorationqNUautofootnote_startqKUnameidsq}q(hU worker-eventsqhU task-eventsqhUlist-of-worker-eventsquUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXN/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/events.rstqq}q bUtagnameq!Usectionq"U attributesq#}q$(Udupnamesq%]Uclassesq&]Ubackrefsq']Uidsq(]q)haUnamesq*]q+hauUlineq,KUdocumentq-hh]q.(cdocutils.nodes title q/)q0}q1(hXList of Worker Eventsq2hhhhh!Utitleq3h#}q4(h%]h&]h']h(]h*]uh,Kh-hh]q5cdocutils.nodes Text q6XList of Worker Eventsq7q8}q9(hh2hh0ubaubcdocutils.nodes paragraph q:)q;}q<(hXlThis is the list of events sent by the worker. The monitor uses these to visualize the state of the cluster.q=hhhhh!U paragraphq>h#}q?(h%]h&]h']h(]h*]uh,Kh-hh]q@h6XlThis is the list of events sent by the worker. The monitor uses these to visualize the state of the cluster.qAqB}qC(hh=hh;ubaubh)qD}qE(hUhhhhh!h"h#}qF(h%]h&]h']h(]qGhah*]qHhauh,K h-hh]qI(h/)qJ}qK(hX Task EventsqLhhDhhh!h3h#}qM(h%]h&]h']h(]h*]uh,K h-hh]qNh6X Task EventsqOqP}qQ(hhLhhJubaubcdocutils.nodes bullet_list qR)qS}qT(hUhhDhhh!U bullet_listqUh#}qV(UbulletqWX*h(]h']h%]h&]h*]uh,K h-hh]qX(cdocutils.nodes list_item qY)qZ}q[(hXttask-received(uuid, name, args, kwargs, retries, eta, hostname, timestamp) Sent when the worker receives a task. hhShhh!U list_itemq\h#}q](h%]h&]h']h(]h*]uh,Nh-hh]q^(h:)q_}q`(hXJtask-received(uuid, name, args, kwargs, retries, eta, hostname, timestamp)qahhZhhh!h>h#}qb(h%]h&]h']h(]h*]uh,K h]qch6XJtask-received(uuid, name, args, kwargs, retries, eta, hostname, timestamp)qdqe}qf(hhahh_ubaubcdocutils.nodes block_quote qg)qh}qi(hUh#}qj(h%]h&]h']h(]h*]uhhZh]qkh:)ql}qm(hX%Sent when the worker receives a task.qnhhhhhh!h>h#}qo(h%]h&]h']h(]h*]uh,K h]qph6X%Sent when the worker receives a task.qqqr}qs(hhnhhlubaubah!U block_quoteqtubeubhY)qu}qv(hX[task-accepted(uuid, hostname, timestamp) Sent just before the worker executes the task. hhShhh!h\h#}qw(h%]h&]h']h(]h*]uh,Nh-hh]qx(h:)qy}qz(hX(task-accepted(uuid, hostname, timestamp)q{hhuhhh!h>h#}q|(h%]h&]h']h(]h*]uh,Kh]q}h6X(task-accepted(uuid, hostname, timestamp)q~q}q(hh{hhyubaubhg)q}q(hUh#}q(h%]h&]h']h(]h*]uhhuh]qh:)q}q(hX.Sent just before the worker executes the task.qhhhhh!h>h#}q(h%]h&]h']h(]h*]uh,Kh]qh6X.Sent just before the worker executes the task.qq}q(hhhhubaubah!htubeubhY)q}q(hXtask-succeeded(uuid, result, runtime, hostname, timestamp) Sent if the task executed successfully. Runtime is the time it took to execute the task using the pool. (Time starting from the task is sent to the pool, and ending when the pool result handlers callback is called). hhShhh!h\h#}q(h%]h&]h']h(]h*]uh,Nh-hh]q(h:)q}q(hX:task-succeeded(uuid, result, runtime, hostname, timestamp)qhhhhh!h>h#}q(h%]h&]h']h(]h*]uh,Kh]qh6X:task-succeeded(uuid, result, runtime, hostname, timestamp)qq}q(hhhhubaubhg)q}q(hUh#}q(h%]h&]h']h(]h*]uhhh]qh:)q}q(hXSent if the task executed successfully. Runtime is the time it took to execute the task using the pool. (Time starting from the task is sent to the pool, and ending when the pool result handlers callback is called).qhhhhh!h>h#}q(h%]h&]h']h(]h*]uh,Kh]qh6XSent if the task executed successfully. Runtime is the time it took to execute the task using the pool. (Time starting from the task is sent to the pool, and ending when the pool result handlers callback is called).qq}q(hhhhubaubah!htubeubhY)q}q(hXjtask-failed(uuid, exception, traceback, hostname, timestamp) Sent if the execution of the task failed. hhShhh!h\h#}q(h%]h&]h']h(]h*]uh,Nh-hh]q(h:)q}q(hX<task-failed(uuid, exception, traceback, hostname, timestamp)qhhhhh!h>h#}q(h%]h&]h']h(]h*]uh,Kh]qh6X<task-failed(uuid, exception, traceback, hostname, timestamp)qq}q(hhhhubaubhg)q}q(hUh#}q(h%]h&]h']h(]h*]uhhh]qh:)q}q(hX)Sent if the execution of the task failed.qhhhhh!h>h#}q(h%]h&]h']h(]h*]uh,Kh]qh6X)Sent if the execution of the task failed.qq}q(hhhhubaubah!htubeubhY)q}q(hXtask-retried(uuid, exception, traceback, hostname, delay, timestamp) Sent if the task failed, but will be retried in the future. (**NOT IMPLEMENTED**) hhShhh!h\h#}q(h%]h&]h']h(]h*]uh,Nh-hh]q(h:)q}q(hXDtask-retried(uuid, exception, traceback, hostname, delay, timestamp)qhhhhh!h>h#}q(h%]h&]h']h(]h*]uh,Kh]qh6XDtask-retried(uuid, exception, traceback, hostname, delay, timestamp)qƅq}q(hhhhubaubhg)q}q(hUh#}q(h%]h&]h']h(]h*]uhhh]qh:)q}q(hXQSent if the task failed, but will be retried in the future. (**NOT IMPLEMENTED**)hhhhh!h>h#}q(h%]h&]h']h(]h*]uh,K h]q(h6X=Sent if the task failed, but will be retried in the future. (qхq}q(hX=Sent if the task failed, but will be retried in the future. (hhubcdocutils.nodes strong q)q}q(hX**NOT IMPLEMENTED**h#}q(h%]h&]h']h(]h*]uhhh]qh6XNOT IMPLEMENTEDqمq}q(hUhhubah!Ustrongqubh6X)q}q(hX)hhubeubah!htubeubeubeubh)q}q(hUhhhhh!h"h#}q(h%]h&]h']h(]qhah*]qhauh,K$h-hh]q(h/)q}q(hX Worker Eventsqhhhhh!h3h#}q(h%]h&]h']h(]h*]uh,K$h-hh]qh6X Worker Eventsqꅁq}q(hhhhubaubhR)q}q(hUhhhhh!hUh#}q(hWX*h(]h']h%]h&]h*]uh,K&h-hh]q(hY)q}q(hX\worker-online(hostname, timestamp) The worker has connected to the broker and is online. hhhhh!h\h#}q(h%]h&]h']h(]h*]uh,Nh-hh]q(h:)q}q(hX"worker-online(hostname, timestamp)qhhhhh!h>h#}q(h%]h&]h']h(]h*]uh,K&h]qh6X"worker-online(hostname, timestamp)qq}q(hhhhubaubhg)q}q(hUh#}q(h%]h&]h']h(]h*]uhhh]rh:)r}r(hX5The worker has connected to the broker and is online.rhhhhh!h>h#}r(h%]h&]h']h(]h*]uh,K(h]rh6X5The worker has connected to the broker and is online.rr}r(hjhjubaubah!htubeubhY)r }r (hXworker-heartbeat(hostname, timestamp) Sent every minute, if the worker has not sent a heartbeat in 2 minutes, it's considered to be offline. hhhhh!h\h#}r (h%]h&]h']h(]h*]uh,Nh-hh]r (h:)r }r(hX%worker-heartbeat(hostname, timestamp)rhj hhh!h>h#}r(h%]h&]h']h(]h*]uh,K*h]rh6X%worker-heartbeat(hostname, timestamp)rr}r(hjhj ubaubhg)r}r(hUh#}r(h%]h&]h']h(]h*]uhj h]rh:)r}r(hXfSent every minute, if the worker has not sent a heartbeat in 2 minutes, it's considered to be offline.rhjhhh!h>h#}r(h%]h&]h']h(]h*]uh,K,h]rh6XfSent every minute, if the worker has not sent a heartbeat in 2 minutes, it's considered to be offline.rr}r (hjhjubaubah!htubeubhY)r!}r"(hXSworker-offline(hostname, timestamp) The worker has disconnected from the broker.hhhhh!h\h#}r#(h%]h&]h']h(]h*]uh,Nh-hh]r$(h:)r%}r&(hX#worker-offline(hostname, timestamp)r'hj!hhh!h>h#}r((h%]h&]h']h(]h*]uh,K/h]r)h6X#worker-offline(hostname, timestamp)r*r+}r,(hj'hj%ubaubhg)r-}r.(hUh#}r/(h%]h&]h']h(]h*]uhj!h]r0h:)r1}r2(hX,The worker has disconnected from the broker.r3hj-hhh!h>h#}r4(h%]h&]h']h(]h*]uh,K1h]r5h6X,The worker has disconnected from the broker.r6r7}r8(hj3hj1ubaubah!htubeubeubeubeubahUU transformerr9NU footnote_refsr:}r;Urefnamesr<}r=Usymbol_footnotesr>]r?Uautofootnote_refsr@]rAUsymbol_footnote_refsrB]rCU citationsrD]rEh-hU current_linerFNUtransform_messagesrG]rHUreporterrINUid_startrJKU autofootnotesrK]rLU citation_refsrM}rNUindirect_targetsrO]rPUsettingsrQ(cdocutils.frontend Values rRorS}rT(Ufootnote_backlinksrUKUrecord_dependenciesrVNU rfc_base_urlrWUhttp://tools.ietf.org/html/rXU tracebackrYUpep_referencesrZNUstrip_commentsr[NU toc_backlinksr\Uentryr]U language_coder^Uenr_U datestampr`NU report_levelraKU _destinationrbNU halt_levelrcKU strip_classesrdNh3NUerror_encoding_error_handlerreUbackslashreplacerfUdebugrgNUembed_stylesheetrhUoutput_encoding_error_handlerriUstrictrjU sectnum_xformrkKUdump_transformsrlNU docinfo_xformrmKUwarning_streamrnNUpep_file_url_templateroUpep-%04drpUexit_status_levelrqKUconfigrrNUstrict_visitorrsNUcloak_email_addressesrtUtrim_footnote_reference_spaceruUenvrvNUdump_pseudo_xmlrwNUexpose_internalsrxNUsectsubtitle_xformryU source_linkrzNUrfc_referencesr{NUoutput_encodingr|Uutf-8r}U source_urlr~NUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUN/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/events.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hhDhhhhuUsubstitution_namesr}rh!h-h#}r(h%]h(]h']Usourcehh&]h*]uU footnotesr]rUrefidsr}rub.PKXDD|116celery-1.0-archived/.doctrees/internals/worker.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X eta_scheduleqNX ready_queueqNXschedulecontrollerqNXtaskpoolq NXmediatorq NXinternals: the workerq NXdata structuresq NX componentsq NXcarrotlistenerqNuUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hU eta-scheduleqhU ready-queueqhUschedulecontrollerqh Utaskpoolqh Umediatorqh Uinternals-the-workerqh Udata-structuresqh U componentsqhUcarrotlistenerq uUchildrenq!]q"cdocutils.nodes section q#)q$}q%(U rawsourceq&UUparentq'hUsourceq(cdocutils.nodes reprunicode q)XN/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/worker.rstq*q+}q,bUtagnameq-Usectionq.U attributesq/}q0(Udupnamesq1]Uclassesq2]Ubackrefsq3]Uidsq4]q5haUnamesq6]q7h auUlineq8KUdocumentq9hh!]q:(cdocutils.nodes title q;)q<}q=(h&XInternals: The workerq>h'h$h(h+h-Utitleq?h/}q@(h1]h2]h3]h4]h6]uh8Kh9hh!]qAcdocutils.nodes Text qBXInternals: The workerqCqD}qE(h&h>h'h(h&X'The schedule controller is running the h'j8ubh)r?}r@(h&X``eta_schedule``h/}rA(h1]h2]h3]h4]h6]uh'j8h!]rBhBX eta_schedulerCrD}rE(h&Uh'j?ubah-hubhBX;. If the scheduled tasks eta has passed it is moved to the rFrG}rH(h&X;. If the scheduled tasks eta has passed it is moved to the h'j8ubh)rI}rJ(h&X``ready_queue``h/}rK(h1]h2]h3]h4]h6]uh'j8h!]rLhBX ready_queuerMrN}rO(h&Uh'jIubah-hubhBXb, otherwise the thread sleeps until the eta is met (remember that the schedule is sorted by time).rPrQ}rR(h&Xb, otherwise the thread sleeps until the eta is met (remember that the schedule is sorted by time).h'j8ubeubeubh#)rS}rT(h&Uh'hh(h+h-h.h/}rU(h1]h2]h3]h4]rVhah6]rWh auh8K5h9hh!]rX(h;)rY}rZ(h&XMediatorr[h'jSh(h+h-h?h/}r\(h1]h2]h3]h4]h6]uh8K5h9hh!]r]hBXMediatorr^r_}r`(h&j[h'jYubaubhF)ra}rb(h&XThe mediator simply moves tasks in the ``ready_queue`` over to the task pool for execution using :meth:`celery.worker.job.TaskWrapper.execute_using_pool`.h'jSh(h+h-hIh/}rc(h1]h2]h3]h4]h6]uh8K6h9hh!]rd(hBX'The mediator simply moves tasks in the rerf}rg(h&X'The mediator simply moves tasks in the h'jaubh)rh}ri(h&X``ready_queue``h/}rj(h1]h2]h3]h4]h6]uh'jah!]rkhBX ready_queuerlrm}rn(h&Uh'jhubah-hubhBX+ over to the task pool for execution using rorp}rq(h&X+ over to the task pool for execution using h'jaubh)rr}rs(h&X8:meth:`celery.worker.job.TaskWrapper.execute_using_pool`rth'jah(h+h-hh/}ru(UreftypeXmethhhX0celery.worker.job.TaskWrapper.execute_using_poolU refdomainXpyrvh4]h3]U refexplicith1]h2]h6]hhhNhNuh8K6h!]rwh)rx}ry(h&jth/}rz(h1]h2]r{(hjvXpy-methr|eh3]h4]h6]uh'jrh!]r}hBX2celery.worker.job.TaskWrapper.execute_using_pool()r~r}r(h&Uh'jxubah-hubaubhBX.r}r(h&X.h'jaubeubeubh#)r}r(h&Uh'hh(h+h-h.h/}r(h1]h2]h3]h4]rhah6]rh auh8K;h9hh!]r(h;)r}r(h&XTaskPoolrh'jh(h+h-h?h/}r(h1]h2]h3]h4]h6]uh8K;h9hh!]rhBXTaskPoolrr}r(h&jh'jubaubhF)r}r(h&XThis is a slightly modified :class:`multiprocessing.Pool`. It mostly works the same way, except it makes sure all of the workers are running at all times. If a worker is missing, it replaces it with a new one.h'jh(h+h-hIh/}r(h1]h2]h3]h4]h6]uh8K=h9hh!]r(hBXThis is a slightly modified rr}r(h&XThis is a slightly modified h'jubh)r}r(h&X:class:`multiprocessing.Pool`rh'jh(h+h-hh/}r(UreftypeXclasshhXmultiprocessing.PoolU refdomainXpyrh4]h3]U refexplicith1]h2]h6]hhhNhNuh8K=h!]rh)r}r(h&jh/}r(h1]h2]r(hjXpy-classreh3]h4]h6]uh'jh!]rhBXmultiprocessing.Poolrr}r(h&Uh'jubah-hubaubhBX. It mostly works the same way, except it makes sure all of the workers are running at all times. If a worker is missing, it replaces it with a new one.rr}r(h&X. It mostly works the same way, except it makes sure all of the workers are running at all times. If a worker is missing, it replaces it with a new one.h'jubeubeubeubeubah&UU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh9hU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh?NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUN/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/worker.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsr NubUsymbol_footnote_startr KUidsr }r (hj*hh$hjShhhhjhhvhhh hhhuUsubstitution_namesr }rh-h9h/}r(h1]h4]h3]Usourceh+h2]h6]uU footnotesr]rUrefidsr}rub.PKXDDqK 6]];celery-1.0-archived/.doctrees/internals/moduleindex.doctreecdocutils.nodes document q)q}q(U nametypesq}q(XtasksqNXcelery.backends.baseqNXcelery.executeqNXcelery.utils.infoq NXcelery.worker.revokeq NX celerybeatq NXcelery.task.restq NXcelery.task.builtinsq NX celery.eventsqNX configurationqNXcelery.worker.bucketsqNXcelery.managersqNX)celery.loaders.base - loader base classesqNXloadersqNXdjango-specificqNXcelery.backends.databaseqNX celery.utilsqNX celery.logqNXcelery.worker.heartbeatqNXeventsqNXresult backendsqNXcelery.backendsqNXcelery.task.controlqNXcelery.worker.listenerqNX celery.workerqNXcelery.worker.poolqNXcelery.datastructuresq NXcelery.messagingq!NX miscellaneousq"NXcelery.decoratorsq#NXworkerq$NX,celery.loaders.djangoapp - the django loaderq%NXcelery.backends.amqpq&NXcelery.task.httpq'NXcelery.task.baseq(NXcelery.loadersq)NXcelery.exceptionsq*NXloggingq+NX executionq,NXcelery.worker.controlq-NX celery.modelsq.NX celery.taskq/NX module indexq0NX celery.viewsq1NXcelery.worker.jobq2NXcelery.platformq3NXcelery.utils.patchq4NX celery.confq5NXcelery.registryq6NX celery.resultq7NX celery.beatq8NXcelery.worker.schedulerq9NX celery.urlsq:NXcelery.worker.controllersq;NX celery.statesqNX+celery.loaders.default - the default loaderq?NXcelery.utils.compatq@NuUsubstitution_defsqA}qBUparse_messagesqC]qDUcurrent_sourceqENU decorationqFNUautofootnote_startqGKUnameidsqH}qI(hUtasksqJhUcelery-backends-baseqKhUcelery-executeqLh Ucelery-utils-infoqMh Ucelery-worker-revokeqNh U celerybeatqOh Ucelery-task-restqPh Ucelery-task-builtinsqQhU celery-eventsqRhU configurationqShUcelery-worker-bucketsqThUcelery-managersqUhU'celery-loaders-base-loader-base-classesqVhUloadersqWhUdjango-specificqXhUcelery-backends-databaseqYhU celery-utilsqZhU celery-logq[hUcelery-worker-heartbeatq\hUeventsq]hUresult-backendsq^hUcelery-backendsq_hUcelery-task-controlq`hUcelery-worker-listenerqahU celery-workerqbhUcelery-worker-poolqch Ucelery-datastructuresqdh!Ucelery-messagingqeh"U miscellaneousqfh#Ucelery-decoratorsqgh$Uworkerqhh%U*celery-loaders-djangoapp-the-django-loaderqih&Ucelery-backends-amqpqjh'Ucelery-task-httpqkh(Ucelery-task-baseqlh)Ucelery-loadersqmh*Ucelery-exceptionsqnh+Uloggingqoh,U executionqph-Ucelery-worker-controlqqh.U celery-modelsqrh/U celery-taskqsh0U module-indexqth1U celery-viewsquh2Ucelery-worker-jobqvh3Ucelery-platformqwh4Ucelery-utils-patchqxh5U celery-confqyh6Ucelery-registryqzh7U celery-resultq{h8U celery-beatq|h9Ucelery-worker-schedulerq}h:U celery-urlsq~h;Ucelery-worker-controllersqhU messagingqh?U)celery-loaders-default-the-default-loaderqh@Ucelery-utils-compatquUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXS/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/moduleindex.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]qhtaUnamesq]qh0auUlineqKUdocumentqhh]q(cdocutils.nodes title q)q}q(hX Module IndexqhhhhhUtitleqh}q(h]h]h]h]h]uhKhhh]qcdocutils.nodes Text qX Module Indexqq}q(hhhhubaubh)q}q(hUhhhhhhh}q(h]h]h]h]qhhah]qh$auhKhhh]q(h)q}q(hXWorkerqhhhhhhh}q(h]h]h]h]h]uhKhhh]qhXWorkerqq}q(hhhhubaubh)q}q(hUhhhhhhh}q(h]h]h]h]qhbah]qhauhK hhh]q(h)q}q(hX celery.workerqhhhhhhh}q(h]h]h]h]h]uhK hhh]qhX celery.workerqÅq}q(hhhhubaubcdocutils.nodes bullet_list q)q}q(hUhhhhhU bullet_listqh}q(UbulletqX*h]h]h]h]h]uhK hhh]qcdocutils.nodes list_item q)q}q(hX&:class:`celery.worker.WorkController` hhhhhU list_itemqh}q(h]h]h]h]h]uhNhhh]qcdocutils.nodes paragraph q)q}q(hX%:class:`celery.worker.WorkController`qhhhhhU paragraphqh}q(h]h]h]h]h]uhK h]qcsphinx.addnodes pending_xref q)q}q(hhhhhhhU pending_xrefqh}q(UreftypeXclassUrefwarnq߉U reftargetqXcelery.worker.WorkControllerU refdomainXpyqh]h]U refexplicith]h]h]UrefdocqXinternals/moduleindexqUpy:classqNU py:moduleqNuhK h]qcdocutils.nodes literal q)q}q(hhh}q(h]h]q(UxrefqhXpy-classqeh]h]h]uhhh]qhXcelery.worker.WorkControllerqq}q(hUhhubahUliteralqubaubaubaubaubh)q}q(hXThis is the worker's main process. It starts and stops all the components required by the worker: Pool, Mediator, Scheduler, ClockService, and Listener.qhhhhhhh}q(h]h]h]h]h]uhK hhh]qhXThis is the worker's main process. It starts and stops all the components required by the worker: Pool, Mediator, Scheduler, ClockService, and Listener.qq}q(hhhhubaubeubh)q}q(hUhhhhhhh}q(h]h]h]h]qhvah]qh2auhKhhh]rh)r}r(hXcelery.worker.jobrhhhhhhh}r(h]h]h]h]h]uhKhhh]rhXcelery.worker.jobrr}r(hjhjubaubaubh)r }r (hUhhhhhhh}r (h]h]h]h]r hcah]r hauhKhhh]rh)r}r(hXcelery.worker.poolrhj hhhhh}r(h]h]h]h]h]uhKhhh]rhXcelery.worker.poolrr}r(hjhjubaubaubh)r}r(hUhhhhhhh}r(h]h]h]h]rhaah]rhauhKhhh]rh)r}r(hXcelery.worker.listenerrhjhhhhh}r (h]h]h]h]h]uhKhhh]r!hXcelery.worker.listenerr"r#}r$(hjhjubaubaubh)r%}r&(hUhhhhhhh}r'(h]h]h]h]r(hah]r)h;auhKhhh]r*h)r+}r,(hXcelery.worker.controllersr-hj%hhhhh}r.(h]h]h]h]h]uhKhhh]r/hXcelery.worker.controllersr0r1}r2(hj-hj+ubaubaubh)r3}r4(hUhhhhhhh}r5(h]h]h]h]r6h}ah]r7h9auhKhhh]r8h)r9}r:(hXcelery.worker.schedulerr;hj3hhhhh}r<(h]h]h]h]h]uhKhhh]r=hXcelery.worker.schedulerr>r?}r@(hj;hj9ubaubaubh)rA}rB(hUhhhhhhh}rC(h]h]h]h]rDhTah]rEhauhK hhh]rFh)rG}rH(hXcelery.worker.bucketsrIhjAhhhhh}rJ(h]h]h]h]h]uhK hhh]rKhXcelery.worker.bucketsrLrM}rN(hjIhjGubaubaubh)rO}rP(hUhhhhhhh}rQ(h]h]h]h]rRh\ah]rShauhK#hhh]rTh)rU}rV(hXcelery.worker.heartbeatrWhjOhhhhh}rX(h]h]h]h]h]uhK#hhh]rYhXcelery.worker.heartbeatrZr[}r\(hjWhjUubaubaubh)r]}r^(hUhhhhhhh}r_(h]h]h]h]r`hNah]rah auhK&hhh]rbh)rc}rd(hXcelery.worker.revokerehj]hhhhh}rf(h]h]h]h]h]uhK&hhh]rghXcelery.worker.revokerhri}rj(hjehjcubaubaubh)rk}rl(hUhhhhhhh}rm(h]h]h]h]rnhqah]roh-auhK)hhh]rp(h)rq}rr(hXcelery.worker.controlrshjkhhhhh}rt(h]h]h]h]h]uhK)hhh]ruhXcelery.worker.controlrvrw}rx(hjshjqubaubh)ry}rz(hUhjkhhhhh}r{(hX*h]h]h]h]h]uhK+hhh]r|(h)r}}r~(hXcelery.worker.registry hjyhhhhh}r(h]h]h]h]h]uhNhhh]rh)r}r(hXcelery.worker.registryrhj}hhhhh}r(h]h]h]h]h]uhK+h]rhXcelery.worker.registryrr}r(hjhjubaubaubh)r}r(hXcelery.worker.builtins hjyhhhhh}r(h]h]h]h]h]uhNhhh]rh)r}r(hXcelery.worker.builtinsrhjhhhhh}r(h]h]h]h]h]uhK-h]rhXcelery.worker.builtinsrr}r(hjhjubaubaubeubeubeubh)r}r(hUhhhhhhh}r(h]h]h]h]rhJah]rhauhK1hhh]r(h)r}r(hXTasksrhjhhhhh}r(h]h]h]h]h]uhK1hhh]rhXTasksrr}r(hjhjubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhgah]rh#auhK4hhh]rh)r}r(hXcelery.decoratorsrhjhhhhh}r(h]h]h]h]h]uhK4hhh]rhXcelery.decoratorsrr}r(hjhjubaubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhzah]rh6auhK7hhh]rh)r}r(hXcelery.registryrhjhhhhh}r(h]h]h]h]h]uhK7hhh]rhXcelery.registryrr}r(hjhjubaubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhsah]rh/auhK:hhh]rh)r}r(hX celery.taskrhjhhhhh}r(h]h]h]h]h]uhK:hhh]rhX celery.taskrr}r(hjhjubaubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhlah]rh(auhK=hhh]rh)r}r(hXcelery.task.baserhjhhhhh}r(h]h]h]h]h]uhK=hhh]rhXcelery.task.baserr}r(hjhjubaubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhkah]rh'auhK@hhh]rh)r}r(hXcelery.task.httprhjhhhhh}r(h]h]h]h]h]uhK@hhh]rhXcelery.task.httprr}r(hjhjubaubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhPah]rh auhKChhh]r(h)r}r(hXcelery.task.restrhjhhhhh}r(h]h]h]h]h]uhKChhh]rhXcelery.task.restrr}r(hjhjubaubh)r}r(hX`Backward compatible interface to :mod:`celery.task.http`. Will be deprecated in future versions.hjhhhhh}r(h]h]h]h]h]uhKEhhh]r(hX!Backward compatible interface to rr}r(hX!Backward compatible interface to hjubh)r}r(hX:mod:`celery.task.http`rhjhhhhh}r(UreftypeXmodh߉hXcelery.task.httpU refdomainXpyrh]h]U refexplicith]h]h]hhhNhNuhKEh]rh)r}r(hjh}r(h]h]r(hjXpy-modreh]h]h]uhjh]r hXcelery.task.httpr r }r (hUhjubahhubaubhX(. Will be deprecated in future versions.r r}r(hX(. Will be deprecated in future versions.hjubeubeubh)r}r(hUhjhhhhh}r(h]h]h]h]rh`ah]rhauhKIhhh]rh)r}r(hXcelery.task.controlrhjhhhhh}r(h]h]h]h]h]uhKIhhh]rhXcelery.task.controlrr}r(hjhjubaubaubh)r}r(hUhjhhhhh}r (h]h]h]h]r!hQah]r"h auhKLhhh]r#h)r$}r%(hXcelery.task.builtinsr&hjhhhhh}r'(h]h]h]h]h]uhKLhhh]r(hXcelery.task.builtinsr)r*}r+(hj&hj$ubaubaubeubh)r,}r-(hUhhhhhhh}r.(h]h]h]h]r/hpah]r0h,auhKOhhh]r1(h)r2}r3(hX Executionr4hj,hhhhh}r5(h]h]h]h]h]uhKOhhh]r6hX Executionr7r8}r9(hj4hj2ubaubh)r:}r;(hUhj,hhhhh}r<(h]h]h]h]r=hLah]r>hauhKRhhh]r?h)r@}rA(hXcelery.executerBhj:hhhhh}rC(h]h]h]h]h]uhKRhhh]rDhXcelery.executerErF}rG(hjBhj@ubaubaubh)rH}rI(hUhj,hhhhh}rJ(h]h]h]h]rKhah]rLh=auhKUhhh]rMh)rN}rO(hXcelery.execute.tracerPhjHhhhhh}rQ(h]h]h]h]h]uhKUhhh]rRhXcelery.execute.tracerSrT}rU(hjPhjNubaubaubh)rV}rW(hUhj,hhhhh}rX(h]h]h]h]rYh{ah]rZh7auhKXhhh]r[h)r\}r](hX celery.resultr^hjVhhhhh}r_(h]h]h]h]h]uhKXhhh]r`hX celery.resultrarb}rc(hj^hj\ubaubaubh)rd}re(hUhj,hhhhh}rf(h]h]h]h]rghah]rhhauhK`hhh]r(h)r}r(hX Messagingrhjzhhhhh}r(h]h]h]h]h]uhK`hhh]rhX Messagingrr}r(hjhjubaubh)r}r(hUhjzhhhhh}r(h]h]h]h]rheah]rh!auhKchhh]rh)r}r(hXcelery.messagingrhjhhhhh}r(h]h]h]h]h]uhKchhh]rhXcelery.messagingrr}r(hjhjubaubaubeubh)r}r(hUhhhhhhh}r(h]h]h]h]rhXah]rhauhKfhhh]r(h)r}r(hXDjango-specificrhjhhhhh}r(h]h]h]h]h]uhKfhhh]rhXDjango-specificrr}r(hjhjubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhrah]rh.auhKihhh]rh)r}r(hX celery.modelsrhjhhhhh}r(h]h]h]h]h]uhKihhh]rhX celery.modelsrr}r(hjhjubaubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhUah]rhauhKlhhh]rh)r}r(hXcelery.managersrhjhhhhh}r(h]h]h]h]h]uhKlhhh]rhXcelery.managersrr}r(hjhjubaubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhuah]rh1auhKohhh]rh)r}r(hX celery.viewsrhjhhhhh}r(h]h]h]h]h]uhKohhh]rhX celery.viewsrr}r(hjhjubaubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rh~ah]rh:auhKrhhh]r(h)r}r(hX celery.urlsrhjhhhhh}r(h]h]h]h]h]uhKrhhh]rhX celery.urlsrr}r(hjhjubaubh)r}r(hXcelery.managementrhjhhhhh}r(h]h]h]h]h]uhKthhh]rhXcelery.managementrr}r(hjhjubaubeubeubh)r}r(hUhhhhhhh}r(h]h]h]h]rh^ah]rhauhKwhhh]r(h)r}r(hXResult backendsrhjhhhhh}r(h]h]h]h]h]uhKwhhh]rhXResult backendsrr}r(hjhjubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rh_ah]rhauhKzhhh]rh)r}r(hXcelery.backendsrhjhhhhh}r(h]h]h]h]h]uhKzhhh]rhXcelery.backendsrr}r(hjhjubaubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhKah]rhauhK}hhh]rh)r}r(hXcelery.backends.baserhjhhhhh}r (h]h]h]h]h]uhK}hhh]r hXcelery.backends.baser r }r (hjhjubaubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhjah]rh&auhKhhh]rh)r}r(hXcelery.backends.amqprhjhhhhh}r(h]h]h]h]h]uhKhhh]rhXcelery.backends.amqprr}r(hjhjubaubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhYah]r hauhKhhh]r!h)r"}r#(hXcelery.backends.databaser$hjhhhhh}r%(h]h]h]h]h]uhKhhh]r&hXcelery.backends.databaser'r(}r)(hj$hj"ubaubaubeubh)r*}r+(hUhhhhhhh}r,(h]h]h]h]r-hWah]r.hauhKhhh]r/(h)r0}r1(hXLoadersr2hj*hhhhh}r3(h]h]h]h]h]uhKhhh]r4hXLoadersr5r6}r7(hj2hj0ubaubh)r8}r9(hUhj*hhhhh}r:(h]h]h]h]r;hmah]r<h)auhKhhh]r=(h)r>}r?(hXcelery.loadersr@hj8hhhhh}rA(h]h]h]h]h]uhKhhh]rBhXcelery.loadersrCrD}rE(hj@hj>ubaubh)rF}rG(hXELoader autodetection, and working with the currently selected loader.rHhj8hhhhh}rI(h]h]h]h]h]uhKhhh]rJhXELoader autodetection, and working with the currently selected loader.rKrL}rM(hjHhjFubaubeubh)rN}rO(hUhj*hhhhh}rP(h]h]h]h]rQhVah]rRhauhKhhh]rSh)rT}rU(hX)celery.loaders.base - Loader base classesrVhjNhhhhh}rW(h]h]h]h]h]uhKhhh]rXhX)celery.loaders.base - Loader base classesrYrZ}r[(hjVhjTubaubaubh)r\}r](hUhj*hhhhh}r^(h]h]h]h]r_hah]r`h?auhKhhh]rah)rb}rc(hX+celery.loaders.default - The default loaderrdhj\hhhhh}re(h]h]h]h]h]uhKhhh]rfhX+celery.loaders.default - The default loaderrgrh}ri(hjdhjbubaubaubh)rj}rk(hUhj*hhhhh}rl(h]h]h]h]rmhiah]rnh%auhKhhh]roh)rp}rq(hX,celery.loaders.djangoapp - The Django loaderrrhjjhhhhh}rs(h]h]h]h]h]uhKhhh]rthX,celery.loaders.djangoapp - The Django loaderrurv}rw(hjrhjpubaubaubeubh)rx}ry(hUhhhhhhh}rz(h]h]h]h]r{hOah]r|h auhKhhh]r}(h)r~}r(hX CeleryBeatrhjxhhhhh}r(h]h]h]h]h]uhKhhh]rhX CeleryBeatrr}r(hjhj~ubaubh)r}r(hUhjxhhhhh}r(h]h]h]h]rh|ah]rh8auhKhhh]rh)r}r(hX celery.beatrhjhhhhh}r(h]h]h]h]h]uhKhhh]rhX celery.beatrr}r(hjhjubaubaubeubh)r}r(hUhhhhhhh}r(h]h]h]h]rh]ah]rhauhKhhh]r(h)r}r(hXEventsrhjhhhhh}r(h]h]h]h]h]uhKhhh]rhXEventsrr}r(hjhjubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhRah]rhauhKhhh]rh)r}r(hX celery.eventsrhjhhhhh}r(h]h]h]h]h]uhKhhh]rhX celery.eventsrr}r(hjhjubaubaubeubh)r}r(hUhhhhhhh}r(h]h]h]h]rhoah]rh+auhKhhh]r(h)r}r(hXLoggingrhjhhhhh}r(h]h]h]h]h]uhKhhh]rhXLoggingrr}r(hjhjubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rh[ah]rhauhKhhh]rh)r}r(hX celery.logrhjhhhhh}r(h]h]h]h]h]uhKhhh]rhX celery.logrr}r(hjhjubaubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhxah]rh4auhKhhh]rh)r}r(hXcelery.utils.patchrhjhhhhh}r(h]h]h]h]h]uhKhhh]rhXcelery.utils.patchrr}r(hjhjubaubaubeubh)r}r(hUhhhhhhh}r(h]h]h]h]rhSah]rhauhKhhh]r(h)r}r(hX Configurationrhjhhhhh}r(h]h]h]h]h]uhKhhh]rhX Configurationrr}r(hjhjubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhyah]rh5auhKhhh]rh)r}r(hX celery.confrhjhhhhh}r(h]h]h]h]h]uhKhhh]rhX celery.confrr}r(hjhjubaubaubeubh)r}r(hUhhhhhhh}r(h]h]h]h]rhfah]rh"auhKhhh]r(h)r}r(hX Miscellaneousrhjhhhhh}r(h]h]h]h]h]uhKhhh]rhX Miscellaneousrr}r(hjhjubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhdah]rh auhKhhh]r h)r }r (hXcelery.datastructuresr hjhhhhh}r (h]h]h]h]h]uhKhhh]rhXcelery.datastructuresrr}r(hj hj ubaubaubh)r}r(hUhjhhhhh}r(h]h]h]h]rhnah]rh*auhKhhh]rh)r}r(hXcelery.exceptionsrhjhhhhh}r(h]h]h]h]h]uhKhhh]rhXcelery.exceptionsrr}r(hjhjubaubaubh)r }r!(hUhjhhhhh}r"(h]h]h]h]r#hwah]r$h3auhKhhh]r%h)r&}r'(hXcelery.platformr(hj hhhhh}r)(h]h]h]h]h]uhKhhh]r*hXcelery.platformr+r,}r-(hj(hj&ubaubaubh)r.}r/(hUhjhhhhh}r0(h]h]h]h]r1hZah]r2hauhKhhh]r3h)r4}r5(hX celery.utilsr6hj.hhhhh}r7(h]h]h]h]h]uhKhhh]r8hX celery.utilsr9r:}r;(hj6hj4ubaubaubh)r<}r=(hUhjhhhhh}r>(h]h]h]h]r?hMah]r@h auhKhhh]rAh)rB}rC(hXcelery.utils.inforDhj<hhhhh}rE(h]h]h]h]h]uhKhhh]rFhXcelery.utils.inforGrH}rI(hjDhjBubaubaubh)rJ}rK(hUhjhhhhh}rL(h]h]h]h]rMhah]rNh@auhKhhh]rOh)rP}rQ(hXcelery.utils.compatrRhjJhhhhh}rS(h]h]h]h]h]uhKhhh]rThXcelery.utils.compatrUrV}rW(hjRhjPubaubaubeubeubahUU transformerrXNU footnote_refsrY}rZUrefnamesr[}r\Usymbol_footnotesr]]r^Uautofootnote_refsr_]r`Usymbol_footnote_refsra]rbU citationsrc]rdhhU current_linereNUtransform_messagesrf]rgUreporterrhNUid_startriKU autofootnotesrj]rkU citation_refsrl}rmUindirect_targetsrn]roUsettingsrp(cdocutils.frontend Values rqorr}rs(Ufootnote_backlinksrtKUrecord_dependenciesruNU rfc_base_urlrvUhttp://tools.ietf.org/html/rwU tracebackrxUpep_referencesryNUstrip_commentsrzNU toc_backlinksr{Uentryr|U language_coder}Uenr~U datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNhNUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUS/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/moduleindex.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hJjh}j3hmj8hdjhZj.hijjhzjhKjhjdhMj<hOjxhTjAhthhejhajhRjhWj*hXjhljhjjhSjh`jh\jOh]jh~jhVjNhsjhNj]hhhhYjh_jhqjkhfjhjJhujhgjhyjhcj h{jVh^jhpj,hrjhLj:hPjhj\hwj hvhhojhQjhjHh[jhjzhj%hnjhUjhxjhbhhkjh|juUsubstitution_namesr}rhhh}r(h]h]h]Usourcehh]h]uU footnotesr]rUrefidsr}rub.PKXDD^ Lcelery-1.0-archived/.doctrees/internals/reference/celery.utils.patch.doctreecdocutils.nodes document q)q}q(U nametypesq}qX*compatibility patches - celery.utils.patchqNsUsubstitution_defsq}qUparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startq KUnameidsq}qhU(compatibility-patches-celery-utils-patchqsUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXd/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.utils.patch.rstqq}qbUtagnameqUsectionqU attributesq}q (Udupnamesq!]Uclassesq"]Ubackrefsq#]Uidsq$]q%(Xmodule-celery.utils.patchq&heUnamesq']q(hauUlineq)KUdocumentq*hh]q+(cdocutils.nodes title q,)q-}q.(hX*Compatibility Patches - celery.utils.patchq/hhhhhUtitleq0h}q1(h!]h"]h#]h$]h']uh)Kh*hh]q2cdocutils.nodes Text q3X*Compatibility Patches - celery.utils.patchq4q5}q6(hh/hh-ubaubcsphinx.addnodes index q7)q8}q9(hUhhhU q:hUindexq;h}q<(h$]h#]h!]h"]h']Uentries]q=(Usingleq>Xcelery.utils.patch (module)Xmodule-celery.utils.patchUtq?auh)Kh*hh]ubeubahUU transformerq@NU footnote_refsqA}qBUrefnamesqC}qDUsymbol_footnotesqE]qFUautofootnote_refsqG]qHUsymbol_footnote_refsqI]qJU citationsqK]qLh*hU current_lineqMNUtransform_messagesqN]qOUreporterqPNUid_startqQKU autofootnotesqR]qSU citation_refsqT}qUUindirect_targetsqV]qWUsettingsqX(cdocutils.frontend Values qYoqZ}q[(Ufootnote_backlinksq\KUrecord_dependenciesq]NU rfc_base_urlq^Uhttp://tools.ietf.org/html/q_U tracebackq`Upep_referencesqaNUstrip_commentsqbNU toc_backlinksqcUentryqdU language_codeqeUenqfU datestampqgNU report_levelqhKU _destinationqiNU halt_levelqjKU strip_classesqkNh0NUerror_encoding_error_handlerqlUbackslashreplaceqmUdebugqnNUembed_stylesheetqoUoutput_encoding_error_handlerqpUstrictqqU sectnum_xformqrKUdump_transformsqsNU docinfo_xformqtKUwarning_streamquNUpep_file_url_templateqvUpep-%04dqwUexit_status_levelqxKUconfigqyNUstrict_visitorqzNUcloak_email_addressesq{Utrim_footnote_reference_spaceq|Uenvq}NUdump_pseudo_xmlq~NUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUd/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.utils.patch.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhqUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]qUfile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}q(hhh&cdocutils.nodes target q)q}q(hUhhhh:hUtargetqh}q(h!]h$]qh&ah#]Uismodh"]h']uh)Kh*hh]ubuUsubstitution_namesq}qhh*h}q(h!]h$]h#]Usourcehh"]h']uU footnotesq]qUrefidsq}qub.PKXDD[|yScelery-1.0-archived/.doctrees/internals/reference/celery.worker.controllers.doctreecdocutils.nodes document q)q}q(U nametypesq}qX5worker controller threads - celery.worker.controllersqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXk/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.controllers.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U3worker-controller-threads-celery-worker-controllersq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX5Worker Controller Threads - celery.worker.controllersq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X5Worker Controller Threads - celery.worker.controllersq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/XCautodoc: failed to import module u'celery.worker.controllers'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/worker/__init__.py", line 11, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUk/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.controllers.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]qUfile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDr.3.3Icelery-1.0-archived/.doctrees/internals/reference/celery.platform.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xcelery.platform.reset_signalqXcelery.platform.ignore_signalqX#platform specific - celery.platformqNX&celery.platform.install_signal_handlerq X!celery.platform.set_process_titleq X$celery.platform.set_mp_process_titleq uUsubstitution_defsq }q Uparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hhhhhU!platform-specific-celery-platformqh h h h h h uUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXa/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.platform.rstqq }q!bUtagnameq"Usectionq#U attributesq$}q%(Udupnamesq&]Uclassesq']Ubackrefsq(]Uidsq)]q*(Xmodule-celery.platformq+heUnamesq,]q-hauUlineq.KUdocumentq/hh]q0(cdocutils.nodes title q1)q2}q3(hX#Platform Specific - celery.platformq4hhhh h"Utitleq5h$}q6(h&]h']h(]h)]h,]uh.Kh/hh]q7cdocutils.nodes Text q8X#Platform Specific - celery.platformq9q:}q;(hh4hh2ubaubcsphinx.addnodes index q<)q=}q>(hUhhhU q?h"Uindexq@h$}qA(h)]h(]h&]h']h,]Uentries]qB(UsingleqCXcelery.platform (module)Xmodule-celery.platformUtqDauh.Kh/hh]ubh<)qE}qF(hUhhhXr/var/build/user_builds/celery/checkouts/1.0-archived/celery/platform.py:docstring of celery.platform.ignore_signalqGh"h@h$}qH(h)]h(]h&]h']h,]Uentries]qI(hCX+ignore_signal() (in module celery.platform)hUtqJauh.Nh/hh]ubcsphinx.addnodes desc qK)qL}qM(hUhhhhGh"UdescqNh$}qO(UnoindexqPUdomainqQXpyh)]h(]h&]h']h,]UobjtypeqRXfunctionqSUdesctypeqThSuh.Nh/hh]qU(csphinx.addnodes desc_signature qV)qW}qX(hXignore_signal(signal_name)hhLhU qYh"Udesc_signatureqZh$}q[(h)]q\haUmoduleq]hXcelery.platformq^q_}q`bh(]h&]h']h,]qahaUfullnameqbX ignore_signalqcUclassqdUUfirstqeuh.Nh/hh]qf(csphinx.addnodes desc_addname qg)qh}qi(hXcelery.platform.hhWhhYh"U desc_addnameqjh$}qk(h&]h']h(]h)]h,]uh.Nh/hh]qlh8Xcelery.platform.qmqn}qo(hUhhhubaubcsphinx.addnodes desc_name qp)qq}qr(hhchhWhhYh"U desc_nameqsh$}qt(h&]h']h(]h)]h,]uh.Nh/hh]quh8X ignore_signalqvqw}qx(hUhhqubaubcsphinx.addnodes desc_parameterlist qy)qz}q{(hUhhWhhYh"Udesc_parameterlistq|h$}q}(h&]h']h(]h)]h,]uh.Nh/hh]q~csphinx.addnodes desc_parameter q)q}q(hX signal_nameh$}q(h&]h']h(]h)]h,]uhhzh]qh8X signal_nameqq}q(hUhhubah"Udesc_parameterqubaubeubcsphinx.addnodes desc_content q)q}q(hUhhLhhYh"U desc_contentqh$}q(h&]h']h(]h)]h,]uh.Nh/hh]q(cdocutils.nodes paragraph q)q}q(hX%Ignore signal using :const:`SIG_IGN`.hhhhGh"U paragraphqh$}q(h&]h']h(]h)]h,]uh.Kh/hh]q(h8XIgnore signal using qq}q(hXIgnore signal using hhubcsphinx.addnodes pending_xref q)q}q(hX:const:`SIG_IGN`qhhhh h"U pending_xrefqh$}q(UreftypeXconstUrefwarnqU reftargetqXSIG_IGNU refdomainXpyqh)]h(]U refexplicith&]h']h,]UrefdocqX#internals/reference/celery.platformqUpy:classqNU py:moduleqXcelery.platformquh.Kh]qcdocutils.nodes literal q)q}q(hhh$}q(h&]h']q(UxrefqhXpy-constqeh(]h)]h,]uhhh]qh8XSIG_IGNqq}q(hUhhubah"Uliteralqubaubh8X.q}q(hX.hhubeubh)q}q(hX\Does nothing if the platform doesn't support signals, or the specified signal in particular.qhhhhGh"hh$}q(h&]h']h(]h)]h,]uh.Kh/hh]qh8X\Does nothing if the platform doesn't support signals, or the specified signal in particular.qq}q(hhhhubaubeubeubh<)q}q(hUhhhX{/var/build/user_builds/celery/checkouts/1.0-archived/celery/platform.py:docstring of celery.platform.install_signal_handlerqh"h@h$}q(h)]h(]h&]h']h,]Uentries]q(hCX4install_signal_handler() (in module celery.platform)h Utqauh.Nh/hh]ubhK)q}q(hUhhhhh"hNh$}q(hPhQXpyh)]h(]h&]h']h,]hRXfunctionqhThuh.Nh/hh]q(hV)q}q(hX,install_signal_handler(signal_name, handler)hhhhYh"hZh$}q(h)]qh ah]hXcelery.platformq˅q}qbh(]h&]h']h,]qh ahbXinstall_signal_handlerqhdUheuh.Nh/hh]q(hg)q}q(hXcelery.platform.hhhhYh"hjh$}q(h&]h']h(]h)]h,]uh.Nh/hh]qh8Xcelery.platform.qՅq}q(hUhhubaubhp)q}q(hhhhhhYh"hsh$}q(h&]h']h(]h)]h,]uh.Nh/hh]qh8Xinstall_signal_handlerq܅q}q(hUhhubaubhy)q}q(hUhhhhYh"h|h$}q(h&]h']h(]h)]h,]uh.Nh/hh]q(h)q}q(hX signal_nameh$}q(h&]h']h(]h)]h,]uhhh]qh8X signal_nameq煁q}q(hUhhubah"hubh)q}q(hXhandlerh$}q(h&]h']h(]h)]h,]uhhh]qh8Xhandlerqq}q(hUhhubah"hubeubeubh)q}q(hUhhhhYh"hh$}q(h&]h']h(]h)]h,]uh.Nh/hh]q(h)q}q(hXInstall a handler.qhhhhh"hh$}q(h&]h']h(]h)]h,]uh.Kh/hh]qh8XInstall a handler.qq}q(hhhhubaubh)q}q(hXdDoes nothing if the current platform doesn't support signals, or the specified signal in particular.qhhhhh"hh$}r(h&]h']h(]h)]h,]uh.Kh/hh]rh8XdDoes nothing if the current platform doesn't support signals, or the specified signal in particular.rr}r(hhhhubaubeubeubh<)r}r(hUhhhXq/var/build/user_builds/celery/checkouts/1.0-archived/celery/platform.py:docstring of celery.platform.reset_signalrh"h@h$}r(h)]h(]h&]h']h,]Uentries]r (hCX*reset_signal() (in module celery.platform)hUtr auh.Nh/hh]ubhK)r }r (hUhhhjh"hNh$}r (hPhQXpyh)]h(]h&]h']h,]hRXfunctionrhTjuh.Nh/hh]r(hV)r}r(hXreset_signal(signal_name)hj hhYh"hZh$}r(h)]rhah]hXcelery.platformrr}rbh(]h&]h']h,]rhahbX reset_signalrhdUheuh.Nh/hh]r(hg)r}r(hXcelery.platform.hjhhYh"hjh$}r(h&]h']h(]h)]h,]uh.Nh/hh]rh8Xcelery.platform.rr}r (hUhjubaubhp)r!}r"(hjhjhhYh"hsh$}r#(h&]h']h(]h)]h,]uh.Nh/hh]r$h8X reset_signalr%r&}r'(hUhj!ubaubhy)r(}r)(hUhjhhYh"h|h$}r*(h&]h']h(]h)]h,]uh.Nh/hh]r+h)r,}r-(hX signal_nameh$}r.(h&]h']h(]h)]h,]uhj(h]r/h8X signal_namer0r1}r2(hUhj,ubah"hubaubeubh)r3}r4(hUhj hhYh"hh$}r5(h&]h']h(]h)]h,]uh.Nh/hh]r6(h)r7}r8(hX+Reset signal to the default signal handler.r9hj3hjh"hh$}r:(h&]h']h(]h)]h,]uh.Kh/hh]r;h8X+Reset signal to the default signal handler.r<r=}r>(hj9hj7ubaubh)r?}r@(hX\Does nothing if the platform doesn't support signals, or the specified signal in particular.rAhj3hjh"hh$}rB(h&]h']h(]h)]h,]uh.Kh/hh]rCh8X\Does nothing if the platform doesn't support signals, or the specified signal in particular.rDrE}rF(hjAhj?ubaubeubeubh<)rG}rH(hUhhhXy/var/build/user_builds/celery/checkouts/1.0-archived/celery/platform.py:docstring of celery.platform.set_mp_process_titlerIh"h@h$}rJ(h)]h(]h&]h']h,]Uentries]rK(hCX2set_mp_process_title() (in module celery.platform)h UtrLauh.Nh/hh]ubhK)rM}rN(hUhhhjIh"hNh$}rO(hPhQXpyh)]h(]h&]h']h,]hRXfunctionrPhTjPuh.Nh/hh]rQ(hV)rR}rS(hX)set_mp_process_title(progname, info=None)hjMhhYh"hZh$}rT(h)]rUh ah]hXcelery.platformrVrW}rXbh(]h&]h']h,]rYh ahbXset_mp_process_titlerZhdUheuh.Nh/hh]r[(hg)r\}r](hXcelery.platform.hjRhhYh"hjh$}r^(h&]h']h(]h)]h,]uh.Nh/hh]r_h8Xcelery.platform.r`ra}rb(hUhj\ubaubhp)rc}rd(hjZhjRhhYh"hsh$}re(h&]h']h(]h)]h,]uh.Nh/hh]rfh8Xset_mp_process_titlergrh}ri(hUhjcubaubhy)rj}rk(hUhjRhhYh"h|h$}rl(h&]h']h(]h)]h,]uh.Nh/hh]rm(h)rn}ro(hXprognameh$}rp(h&]h']h(]h)]h,]uhjjh]rqh8Xprognamerrrs}rt(hUhjnubah"hubh)ru}rv(hX info=Noneh$}rw(h&]h']h(]h)]h,]uhjjh]rxh8X info=Noneryrz}r{(hUhjuubah"hubeubeubh)r|}r}(hUhjMhhYh"hh$}r~(h&]h']h(]h)]h,]uh.Nh/hh]r(h)r}r(hX7Set the ps name using the multiprocessing process name.rhj|hjIh"hh$}r(h&]h']h(]h)]h,]uh.Kh/hh]rh8X7Set the ps name using the multiprocessing process name.rr}r(hjhjubaubh)r}r(hX/Only works if :mod:`setproctitle` is installed.hj|hjIh"hh$}r(h&]h']h(]h)]h,]uh.Kh/hh]r(h8XOnly works if rr}r(hXOnly works if hjubh)r}r(hX:mod:`setproctitle`rhjhNh"hh$}r(UreftypeXmodhhX setproctitleU refdomainXpyrh)]h(]U refexplicith&]h']h,]hhhNhhuh.Nh]rh)r}r(hjh$}r(h&]h']r(hjXpy-modreh(]h)]h,]uhjh]rh8X setproctitlerr}r(hUhjubah"hubaubh8X is installed.rr}r(hX is installed.hjubeubeubeubh<)r}r(hUhhhXv/var/build/user_builds/celery/checkouts/1.0-archived/celery/platform.py:docstring of celery.platform.set_process_titlerh"h@h$}r(h)]h(]h&]h']h,]Uentries]r(hCX/set_process_title() (in module celery.platform)h Utrauh.Nh/hh]ubhK)r}r(hUhhhjh"hNh$}r(hPhQXpyh)]h(]h&]h']h,]hRXfunctionrhTjuh.Nh/hh]r(hV)r}r(hX&set_process_title(progname, info=None)hjhhYh"hZh$}r(h)]rh ah]hXcelery.platformrr}rbh(]h&]h']h,]rh ahbXset_process_titlerhdUheuh.Nh/hh]r(hg)r}r(hXcelery.platform.hjhhYh"hjh$}r(h&]h']h(]h)]h,]uh.Nh/hh]rh8Xcelery.platform.rr}r(hUhjubaubhp)r}r(hjhjhhYh"hsh$}r(h&]h']h(]h)]h,]uh.Nh/hh]rh8Xset_process_titlerr}r(hUhjubaubhy)r}r(hUhjhhYh"h|h$}r(h&]h']h(]h)]h,]uh.Nh/hh]r(h)r}r(hXprognameh$}r(h&]h']h(]h)]h,]uhjh]rh8Xprognamerr}r(hUhjubah"hubh)r}r(hX info=Noneh$}r(h&]h']h(]h)]h,]uhjh]rh8X info=Nonerr}r(hUhjubah"hubeubeubh)r}r(hUhjhhYh"hh$}r(h&]h']h(]h)]h,]uh.Nh/hh]r(h)r}r(hX2Set the ps name for the currently running process.rhjhjh"hh$}r(h&]h']h(]h)]h,]uh.Kh/hh]rh8X2Set the ps name for the currently running process.rr}r(hjhjubaubh)r}r(hX.Only works if :mod`setproctitle` is installed.rhjhjh"hh$}r(h&]h']h(]h)]h,]uh.Kh/hh]rh8X.Only works if :mod`setproctitle` is installed.rr}r(hjhjubaubeubeubeubahUU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh/hU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/r U tracebackr Upep_referencesr NUstrip_commentsr NU toc_backlinksr UentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh5NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templater Upep-%04dr!Uexit_status_levelr"KUconfigr#NUstrict_visitorr$NUcloak_email_addressesr%Utrim_footnote_reference_spacer&Uenvr'NUdump_pseudo_xmlr(NUexpose_internalsr)NUsectsubtitle_xformr*U source_linkr+NUrfc_referencesr,NUoutput_encodingr-Uutf-8r.U source_urlr/NUinput_encodingr0U utf-8-sigr1U_disable_configr2NU id_prefixr3UU tab_widthr4KUerror_encodingr5UUTF-8r6U_sourcer7Ua/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.platform.rstr8Ugettext_compactr9U generatorr:NUdump_internalsr;NU smart_quotesr<U pep_base_urlr=Uhttp://www.python.org/dev/peps/r>Usyntax_highlightr?Ulongr@Uinput_encoding_error_handlerrAjUauto_id_prefixrBUidrCUdoctitle_xformrDUstrip_elements_with_classesrENU _config_filesrF]Ufile_insertion_enabledrGU raw_enabledrHKU dump_settingsrINubUsymbol_footnote_startrJKUidsrK}rL(hjhhWhhh jh+cdocutils.nodes target rM)rN}rO(hUhhhh?h"UtargetrPh$}rQ(h&]h)]rRh+ah(]Uismodh']h,]uh.Kh/hh]ubh jRh huUsubstitution_namesrS}rTh"h/h$}rU(h&]h)]h(]Usourceh h']h,]uU footnotesrV]rWUrefidsrX}rYub.PKXDD~Kcelery-1.0-archived/.doctrees/internals/reference/celery.worker.job.doctreecdocutils.nodes document q)q}q(U nametypesq}qX#executable jobs - celery.worker.jobqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXc/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.job.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U!executable-jobs-celery-worker-jobq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX#Executable Jobs - celery.worker.jobq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X#Executable Jobs - celery.worker.jobq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X;autodoc: failed to import module u'celery.worker.job'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/worker/__init__.py", line 11, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUc/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.job.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]qUfile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDODDXcelery-1.0-archived/.doctrees/internals/reference/celery.worker.control.builtins.doctreecdocutils.nodes document q)q}q(U nametypesq}qXAbuilt-in remote control commands - celery.worker.control.builtinsqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXp/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.control.builtins.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U?built-in-remote-control-commands-celery-worker-control-builtinsq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hXABuilt-in Remote Control Commands - celery.worker.control.builtinsq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/XABuilt-in Remote Control Commands - celery.worker.control.builtinsq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/XHautodoc: failed to import module u'celery.worker.control.builtins'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/worker/__init__.py", line 11, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUp/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.control.builtins.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD+AGcelery-1.0-archived/.doctrees/internals/reference/celery.worker.doctreecdocutils.nodes document q)q}q(U nametypesq}qX&multiprocessing worker - celery.workerqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qX_/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U$multiprocessing-worker-celery-workerq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX&Multiprocessing Worker - celery.workerq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X&Multiprocessing Worker - celery.workerq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X7autodoc: failed to import module u'celery.worker'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/worker/__init__.py", line 11, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqU_/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD;ROcelery-1.0-archived/.doctrees/internals/reference/celery.backends.cache.doctreecdocutils.nodes document q)q}q(U nametypesq}qX&backend: cache - celery.backends.cacheqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXg/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.cache.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U#backend-cache-celery-backends-cacheq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX&Backend: Cache - celery.backends.cacheq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X&Backend: Cache - celery.backends.cacheq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X@autodoc: failed to import module u'celery.backends.cache'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/backends/__init__.py", line 3, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUg/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.cache.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDlxOcelery-1.0-archived/.doctrees/internals/reference/celery.datastructures.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X&celery.datastructures.LimitedSet.firstqX#celery.datastructures.SharedCounterqX&datastructures - celery.datastructuresqNX*celery.datastructures.LimitedSet.pop_valueq X-celery.datastructures.ExceptionInfo.exceptionq X4celery.datastructures.PositionQueue.UnfilledPositionq X-celery.datastructures.SharedCounter.incrementq X-celery.datastructures.ExceptionInfo.tracebackq X celery.datastructures.LocalCacheqX-celery.datastructures.SharedCounter.decrementqX(celery.datastructures.PositionQueue.fullqX*celery.datastructures.PositionQueue.filledqX#celery.datastructures.ExceptionInfoqX$celery.datastructures.LimitedSet.addqX*celery.datastructures.PositionQueue.lengthqX#celery.datastructures.PositionQueueqX celery.datastructures.LimitedSetqX#celery.datastructures.consume_queuequUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q (hhhhhU$datastructures-celery-datastructuresq!h h h h h h h h h h hhhhhhhhhhhhhhhhhhhhuUchildrenq"]q#cdocutils.nodes section q$)q%}q&(U rawsourceq'UUparentq(hUsourceq)cdocutils.nodes reprunicode q*Xg/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.datastructures.rstq+q,}q-bUtagnameq.Usectionq/U attributesq0}q1(Udupnamesq2]Uclassesq3]Ubackrefsq4]Uidsq5]q6(Xmodule-celery.datastructuresq7h!eUnamesq8]q9hauUlineq:KUdocumentq;hh"]q<(cdocutils.nodes title q=)q>}q?(h'X&Datastructures - celery.datastructuresq@h(h%h)h,h.UtitleqAh0}qB(h2]h3]h4]h5]h8]uh:Kh;hh"]qCcdocutils.nodes Text qDX&Datastructures - celery.datastructuresqEqF}qG(h'h@h(h>ubaubcsphinx.addnodes index qH)qI}qJ(h'Uh(h%h)U qKh.UindexqLh0}qM(h5]h4]h2]h3]h8]Uentries]qN(UsingleqOXcelery.datastructures (module)Xmodule-celery.datastructuresUtqPauh:Kh;hh"]ubhH)qQ}qR(h'Uh(h%h)Nh.hLh0}qS(h5]h4]h2]h3]h8]Uentries]qT(hOX.ExceptionInfo (class in celery.datastructures)hUtqUauh:Nh;hh"]ubcsphinx.addnodes desc qV)qW}qX(h'Uh(h%h)Nh.UdescqYh0}qZ(Unoindexq[Udomainq\Xpyh5]h4]h2]h3]h8]Uobjtypeq]Xclassq^Udesctypeq_h^uh:Nh;hh"]q`(csphinx.addnodes desc_signature qa)qb}qc(h'XExceptionInfo(exc_info)h(hWh)U qdh.Udesc_signatureqeh0}qf(h5]qghaUmoduleqhh*Xcelery.datastructuresqiqj}qkbh4]h2]h3]h8]qlhaUfullnameqmX ExceptionInfoqnUclassqoUUfirstqpuh:Nh;hh"]qq(csphinx.addnodes desc_annotation qr)qs}qt(h'Xclass h(hbh)hdh.Udesc_annotationquh0}qv(h2]h3]h4]h5]h8]uh:Nh;hh"]qwhDXclass qxqy}qz(h'Uh(hsubaubcsphinx.addnodes desc_addname q{)q|}q}(h'Xcelery.datastructures.h(hbh)hdh.U desc_addnameq~h0}q(h2]h3]h4]h5]h8]uh:Nh;hh"]qhDXcelery.datastructures.qq}q(h'Uh(h|ubaubcsphinx.addnodes desc_name q)q}q(h'hnh(hbh)hdh.U desc_nameqh0}q(h2]h3]h4]h5]h8]uh:Nh;hh"]qhDX ExceptionInfoqq}q(h'Uh(hubaubcsphinx.addnodes desc_parameterlist q)q}q(h'Uh(hbh)hdh.Udesc_parameterlistqh0}q(h2]h3]h4]h5]h8]uh:Nh;hh"]qcsphinx.addnodes desc_parameter q)q}q(h'Xexc_infoh0}q(h2]h3]h4]h5]h8]uh(hh"]qhDXexc_infoqq}q(h'Uh(hubah.Udesc_parameterqubaubeubcsphinx.addnodes desc_content q)q}q(h'Uh(hWh)hdh.U desc_contentqh0}q(h2]h3]h4]h5]h8]uh:Nh;hh"]q(cdocutils.nodes paragraph q)q}q(h'X2Exception wrapping an exception and its traceback.qh(hh)X~/var/build/user_builds/celery/checkouts/1.0-archived/celery/datastructures.py:docstring of celery.datastructures.ExceptionInfoqh.U paragraphqh0}q(h2]h3]h4]h5]h8]uh:Kh;hh"]qhDX2Exception wrapping an exception and its traceback.qq}q(h'hh(hubaubcdocutils.nodes field_list q)q}q(h'Uh(hh)Nh.U field_listqh0}q(h2]h3]h4]h5]h8]uh:Nh;hh"]qcdocutils.nodes field q)q}q(h'Uh0}q(h2]h3]h4]h5]h8]uh(hh"]q(cdocutils.nodes field_name q)q}q(h'Uh0}q(h2]h3]h4]h5]h8]uh(hh"]qhDX Parametersqq}q(h'Uh(hubah.U field_namequbcdocutils.nodes field_body q)q}q(h'Uh0}q(h2]h3]h4]h5]h8]uh(hh"]qh)q}q(h'Uh0}q(h2]h3]h4]h5]h8]uh(hh"]q(cdocutils.nodes strong q)q}q(h'Xexc_infoh0}q(h2]h3]h4]h5]h8]uh(hh"]qhDXexc_infoqυq}q(h'Uh(hubah.UstrongqubhDX -- qӅq}q(h'Uh(hubhDX(The exception tuple info as returned by qօq}q(h'X(The exception tuple info as returned by h(hubcsphinx.addnodes pending_xref q)q}q(h'X":func:`traceback.format_exception`qh(hh)Nh.U pending_xrefqh0}q(UreftypeXfuncUrefwarnq߉U reftargetqXtraceback.format_exceptionU refdomainXpyqh5]h4]U refexplicith2]h3]h8]UrefdocqX)internals/reference/celery.datastructuresqUpy:classqhnU py:moduleqXcelery.datastructuresquh:Nh"]qcdocutils.nodes literal q)q}q(h'hh0}q(h2]h3]q(UxrefqhXpy-funcqeh4]h5]h8]uh(hh"]qhDXtraceback.format_exception()qq}q(h'Uh(hubah.UliteralqubaubhDX.q}q(h'X.h(hubeh.hubah.U field_bodyqubeh.UfieldqubaubhH)q}q(h'Uh(hh)hh.hLh0}q(h5]h4]h2]h3]h8]Uentries]q(hOX9exception (celery.datastructures.ExceptionInfo attribute)h Utqauh:Nh;hh"]ubhV)q}q(h'Uh(hh)hh.hYh0}q(h[h\Xpyh5]h4]h2]h3]h8]h]X attributerh_juh:Nh;hh"]r(ha)r}r(h'X exceptionrh(hh)hh.heh0}r(h5]rh ahhhh4]h2]h3]h8]rh ahmXExceptionInfo.exceptionhohnhpuh:K h;hh"]rh)r }r (h'jh(jh)hh.hh0}r (h2]h3]h4]h5]h8]uh:K h;hh"]r hDX exceptionr r}r(h'Uh(j ubaubaubh)r}r(h'Uh(hh)hh.hh0}r(h2]h3]h4]h5]h8]uh:K h;hh"]rh)r}r(h'XThe original exception.rh(jh)hh.hh0}r(h2]h3]h4]h5]h8]uh:Kh;hh"]rhDXThe original exception.rr}r(h'jh(jubaubaubeubhH)r}r(h'Uh(hh)hh.hLh0}r(h5]h4]h2]h3]h8]Uentries]r(hOX9traceback (celery.datastructures.ExceptionInfo attribute)h Utr auh:Nh;hh"]ubhV)r!}r"(h'Uh(hh)hh.hYh0}r#(h[h\Xpyh5]h4]h2]h3]h8]h]X attributer$h_j$uh:Nh;hh"]r%(ha)r&}r'(h'X tracebackr(h(j!h)hh.heh0}r)(h5]r*h ahhhh4]h2]h3]h8]r+h ahmXExceptionInfo.tracebackhohnhpuh:K h;hh"]r,h)r-}r.(h'j(h(j&h)hh.hh0}r/(h2]h3]h4]h5]h8]uh:K h;hh"]r0hDX tracebackr1r2}r3(h'Uh(j-ubaubaubh)r4}r5(h'Uh(j!h)hh.hh0}r6(h2]h3]h4]h5]h8]uh:K h;hh"]r7h)r8}r9(h'X=A traceback from the point when :attr:`exception` was raised.h(j4h)hh.hh0}r:(h2]h3]h4]h5]h8]uh:K h;hh"]r;(hDX A traceback from the point when r<r=}r>(h'X A traceback from the point when h(j8ubh)r?}r@(h'X:attr:`exception`rAh(j8h)Nh.hh0}rB(UreftypeXattrh߉hX exceptionU refdomainXpyrCh5]h4]U refexplicith2]h3]h8]hhhhnhhuh:Nh"]rDh)rE}rF(h'jAh0}rG(h2]h3]rH(hjCXpy-attrrIeh4]h5]h8]uh(j?h"]rJhDX exceptionrKrL}rM(h'Uh(jEubah.hubaubhDX was raised.rNrO}rP(h'X was raised.h(j8ubeubaubeubeubeubhH)rQ}rR(h'Uh(h%h)Nh.hLh0}rS(h5]h4]h2]h3]h8]Uentries]rT(hOX+LimitedSet (class in celery.datastructures)hUtrUauh:Nh;hh"]ubhV)rV}rW(h'Uh(h%h)Nh.hYh0}rX(h[h\Xpyh5]h4]h2]h3]h8]h]XclassrYh_jYuh:Nh;hh"]rZ(ha)r[}r\(h'X%LimitedSet(maxlen=None, expires=None)h(jVh)hdh.heh0}r](h5]r^hahhh*Xcelery.datastructuresr_r`}rabh4]h2]h3]h8]rbhahmX LimitedSetrchoUhpuh:Nh;hh"]rd(hr)re}rf(h'Xclass h(j[h)hdh.huh0}rg(h2]h3]h4]h5]h8]uh:Nh;hh"]rhhDXclass rirj}rk(h'Uh(jeubaubh{)rl}rm(h'Xcelery.datastructures.h(j[h)hdh.h~h0}rn(h2]h3]h4]h5]h8]uh:Nh;hh"]rohDXcelery.datastructures.rprq}rr(h'Uh(jlubaubh)rs}rt(h'jch(j[h)hdh.hh0}ru(h2]h3]h4]h5]h8]uh:Nh;hh"]rvhDX LimitedSetrwrx}ry(h'Uh(jsubaubh)rz}r{(h'Uh(j[h)hdh.hh0}r|(h2]h3]h4]h5]h8]uh:Nh;hh"]r}(h)r~}r(h'X maxlen=Noneh0}r(h2]h3]h4]h5]h8]uh(jzh"]rhDX maxlen=Nonerr}r(h'Uh(j~ubah.hubh)r}r(h'X expires=Noneh0}r(h2]h3]h4]h5]h8]uh(jzh"]rhDX expires=Nonerr}r(h'Uh(jubah.hubeubeubh)r}r(h'Uh(jVh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]r(h)r}r(h'XKind-of Set with limitations.rh(jh)X{/var/build/user_builds/celery/checkouts/1.0-archived/celery/datastructures.py:docstring of celery.datastructures.LimitedSetrh.hh0}r(h2]h3]h4]h5]h8]uh:Kh;hh"]rhDXKind-of Set with limitations.rr}r(h'jh(jubaubh)r}r(h'XGood for when you need to test for membership (``a in set``), but the list might become to big, so you want to limit it so it doesn't consume too much resources.h(jh)jh.hh0}r(h2]h3]h4]h5]h8]uh:Kh;hh"]r(hDX/Good for when you need to test for membership (rr}r(h'X/Good for when you need to test for membership (h(jubh)r}r(h'X ``a in set``h0}r(h2]h3]h4]h5]h8]uh(jh"]rhDXa in setrr}r(h'Uh(jubah.hubhDXf), but the list might become to big, so you want to limit it so it doesn't consume too much resources.rr}r(h'Xf), but the list might become to big, so you want to limit it so it doesn't consume too much resources.h(jubeubh)r}r(h'Uh(jh)Nh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'Uh0}r(h2]h3]h4]h5]h8]uh(jh"]r(h)r}r(h'Uh0}r(h2]h3]h4]h5]h8]uh(jh"]rhDX Parametersrr}r(h'Uh(jubah.hubh)r}r(h'Uh0}r(h2]h3]h4]h5]h8]uh(jh"]rcdocutils.nodes bullet_list r)r}r(h'Uh0}r(h2]h3]h4]h5]h8]uh(jh"]r(cdocutils.nodes list_item r)r}r(h'Uh0}r(h2]h3]h4]h5]h8]uh(jh"]rh)r}r(h'Uh0}r(h2]h3]h4]h5]h8]uh(jh"]r(h)r}r(h'Xmaxlenh0}r(h2]h3]h4]h5]h8]uh(jh"]rhDXmaxlenrr}r(h'Uh(jubah.hubhDX -- rr}r(h'Uh(jubhDXCMaximum number of members before we start deleting expired members.rr}r(h'XCMaximum number of members before we start deleting expired members.rh(jubeh.hubah.U list_itemrubj)r}r(h'Uh0}r(h2]h3]h4]h5]h8]uh(jh"]rh)r}r(h'Uh0}r(h2]h3]h4]h5]h8]uh(jh"]r(h)r}r(h'Xexpiresh0}r(h2]h3]h4]h5]h8]uh(jh"]rhDXexpiresrr}r(h'Uh(jubah.hubhDX -- rr}r(h'Uh(jubhDX-Time in seconds, before a membership expires.rr}r(h'X-Time in seconds, before a membership expires.rh(jubeh.hubah.jubeh.U bullet_listrubah.hubeh.hubaubhH)r}r(h'Uh(jh)X/var/build/user_builds/celery/checkouts/1.0-archived/celery/datastructures.py:docstring of celery.datastructures.LimitedSet.addrh.hLh0}r(h5]h4]h2]h3]h8]Uentries]r(hOX/add() (celery.datastructures.LimitedSet method)hUtrauh:Nh;hh"]ubhV)r}r(h'Uh(jh)jh.hYh0}r(h[h\Xpyh5]h4]h2]h3]h8]h]Xmethodrh_juh:Nh;hh"]r(ha)r}r(h'XLimitedSet.add(value)h(jh)hdh.heh0}r(h5]rhahhh*Xcelery.datastructuresrr}rbh4]h2]h3]h8]rhahmXLimitedSet.addhojchpuh:Nh;hh"]r(h)r}r(h'Xaddh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDXaddr r }r (h'Uh(jubaubh)r }r (h'Uh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'Xvalueh0}r(h2]h3]h4]h5]h8]uh(j h"]rhDXvaluerr}r(h'Uh(jubah.hubaubeubh)r}r(h'Uh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'XAdd a new member.rh(jh)jh.hh0}r(h2]h3]h4]h5]h8]uh:Kh;hh"]rhDXAdd a new member.r r!}r"(h'jh(jubaubaubeubhH)r#}r$(h'Uh(jh)X/var/build/user_builds/celery/checkouts/1.0-archived/celery/datastructures.py:docstring of celery.datastructures.LimitedSet.firstr%h.hLh0}r&(h5]h4]h2]h3]h8]Uentries]r'(hOX2first (celery.datastructures.LimitedSet attribute)hUtr(auh:Nh;hh"]ubhV)r)}r*(h'Uh(jh)j%h.hYh0}r+(h[h\Xpyh5]h4]h2]h3]h8]h]X attributer,h_j,uh:Nh;hh"]r-(ha)r.}r/(h'XLimitedSet.firsth(j)h)hdh.heh0}r0(h5]r1hahhh*Xcelery.datastructuresr2r3}r4bh4]h2]h3]h8]r5hahmXLimitedSet.firsthojchpuh:Nh;hh"]r6h)r7}r8(h'Xfirsth(j.h)hdh.hh0}r9(h2]h3]h4]h5]h8]uh:Nh;hh"]r:hDXfirstr;r<}r=(h'Uh(j7ubaubaubh)r>}r?(h'Uh(j)h)hdh.hh0}r@(h2]h3]h4]h5]h8]uh:Nh;hh"]rAh)rB}rC(h'XGet the oldest member.rDh(j>h)j%h.hh0}rE(h2]h3]h4]h5]h8]uh:Kh;hh"]rFhDXGet the oldest member.rGrH}rI(h'jDh(jBubaubaubeubhH)rJ}rK(h'Uh(jh)X/var/build/user_builds/celery/checkouts/1.0-archived/celery/datastructures.py:docstring of celery.datastructures.LimitedSet.pop_valuerLh.hLh0}rM(h5]h4]h2]h3]h8]Uentries]rN(hOX5pop_value() (celery.datastructures.LimitedSet method)h UtrOauh:Nh;hh"]ubhV)rP}rQ(h'Uh(jh)jLh.hYh0}rR(h[h\Xpyh5]h4]h2]h3]h8]h]XmethodrSh_jSuh:Nh;hh"]rT(ha)rU}rV(h'XLimitedSet.pop_value(value)h(jPh)hdh.heh0}rW(h5]rXh ahhh*Xcelery.datastructuresrYrZ}r[bh4]h2]h3]h8]r\h ahmXLimitedSet.pop_valuehojchpuh:Nh;hh"]r](h)r^}r_(h'X pop_valueh(jUh)hdh.hh0}r`(h2]h3]h4]h5]h8]uh:Nh;hh"]rahDX pop_valuerbrc}rd(h'Uh(j^ubaubh)re}rf(h'Uh(jUh)hdh.hh0}rg(h2]h3]h4]h5]h8]uh:Nh;hh"]rhh)ri}rj(h'Xvalueh0}rk(h2]h3]h4]h5]h8]uh(jeh"]rlhDXvaluermrn}ro(h'Uh(jiubah.hubaubeubh)rp}rq(h'Uh(jPh)hdh.hh0}rr(h2]h3]h4]h5]h8]uh:Nh;hh"]rsh)rt}ru(h'X#Remove membership by finding value.rvh(jph)jLh.hh0}rw(h2]h3]h4]h5]h8]uh:Kh;hh"]rxhDX#Remove membership by finding value.ryrz}r{(h'jvh(jtubaubaubeubeubeubhH)r|}r}(h'Uh(h%h)X{/var/build/user_builds/celery/checkouts/1.0-archived/celery/datastructures.py:docstring of celery.datastructures.LocalCacher~h.hLh0}r(h5]h4]h2]h3]h8]Uentries]r(hOX+LocalCache (class in celery.datastructures)hUtrauh:Nh;hh"]ubhV)r}r(h'Uh(h%h)j~h.hYh0}r(h[h\Xpyh5]h4]h2]h3]h8]h]Xclassrh_juh:Nh;hh"]r(ha)r}r(h'XLocalCache(limit=None)h(jh)hdh.heh0}r(h5]rhahhh*Xcelery.datastructuresrr}rbh4]h2]h3]h8]rhahmX LocalCacherhoUhpuh:Nh;hh"]r(hr)r}r(h'Xclass h(jh)hdh.huh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDXclass rr}r(h'Uh(jubaubh{)r}r(h'Xcelery.datastructures.h(jh)hdh.h~h0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDXcelery.datastructures.rr}r(h'Uh(jubaubh)r}r(h'jh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDX LocalCacherr}r(h'Uh(jubaubh)r}r(h'Uh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'X limit=Noneh0}r(h2]h3]h4]h5]h8]uh(jh"]rhDX limit=Nonerr}r(h'Uh(jubah.hubaubeubh)r}r(h'Uh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]r(h)r}r(h'X(Dictionary with a finite number of keys.rh(jh)j~h.hh0}r(h2]h3]h4]h5]h8]uh:Kh;hh"]rhDX(Dictionary with a finite number of keys.rr}r(h'jh(jubaubh)r}r(h'XOlder items expires first.rh(jh)j~h.hh0}r(h2]h3]h4]h5]h8]uh:Kh;hh"]rhDXOlder items expires first.rr}r(h'jh(jubaubeubeubhH)r}r(h'Uh(h%h)Nh.hLh0}r(h5]h4]h2]h3]h8]Uentries]r(hOX.PositionQueue (class in celery.datastructures)hUtrauh:Nh;hh"]ubhV)r}r(h'Uh(h%h)Nh.hYh0}r(h[h\Xpyh5]h4]h2]h3]h8]h]Xclassrh_juh:Nh;hh"]r(ha)r}r(h'XPositionQueue(length)h(jh)hdh.heh0}r(h5]rhahhh*Xcelery.datastructuresrr}rbh4]h2]h3]h8]rhahmX PositionQueuerhoUhpuh:Nh;hh"]r(hr)r}r(h'Xclass h(jh)hdh.huh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDXclass rr}r(h'Uh(jubaubh{)r}r(h'Xcelery.datastructures.h(jh)hdh.h~h0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDXcelery.datastructures.rr}r(h'Uh(jubaubh)r}r(h'jh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDX PositionQueuerr}r(h'Uh(jubaubh)r}r(h'Uh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'Xlengthh0}r(h2]h3]h4]h5]h8]uh(jh"]rhDXlengthrr}r(h'Uh(jubah.hubaubeubh)r}r(h'Uh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]r(h)r}r(h'XA positional queue of a specific length, with slots that are either filled or unfilled. When all of the positions are filled, the queue is considered :meth:`full`.h(jh)X~/var/build/user_builds/celery/checkouts/1.0-archived/celery/datastructures.py:docstring of celery.datastructures.PositionQueuerh.hh0}r(h2]h3]h4]h5]h8]uh:Kh;hh"]r(hDXA positional queue of a specific length, with slots that are either filled or unfilled. When all of the positions are filled, the queue is considered rr}r(h'XA positional queue of a specific length, with slots that are either filled or unfilled. When all of the positions are filled, the queue is considered h(jubh)r}r(h'X :meth:`full`rh(jh)Nh.hh0}r(UreftypeXmethh߉hXfullU refdomainXpyr h5]h4]U refexplicith2]h3]h8]hhhjhhuh:Nh"]r h)r }r (h'jh0}r (h2]h3]r(hj Xpy-methreh4]h5]h8]uh(jh"]rhDXfull()rr}r(h'Uh(j ubah.hubaubhDX.r}r(h'X.h(jubeubh)r}r(h'Uh(jh)Nh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'Uh0}r(h2]h3]h4]h5]h8]uh(jh"]r(h)r}r(h'Uh0}r (h2]h3]h4]h5]h8]uh(jh"]r!hDX Parametersr"r#}r$(h'Uh(jubah.hubh)r%}r&(h'Uh0}r'(h2]h3]h4]h5]h8]uh(jh"]r(h)r)}r*(h'Uh0}r+(h2]h3]h4]h5]h8]uh(j%h"]r,(h)r-}r.(h'Xlengthh0}r/(h2]h3]h4]h5]h8]uh(j)h"]r0hDXlengthr1r2}r3(h'Uh(j-ubah.hubhDX -- r4r5}r6(h'Uh(j)ubhDXsee r7r8}r9(h'Xsee h(j)ubh)r:}r;(h'X:attr:`length`r<h(j)h)Nh.hh0}r=(UreftypeXattrh߉hXlengthU refdomainXpyr>h5]h4]U refexplicith2]h3]h8]hhhjhhuh:Nh"]r?h)r@}rA(h'j<h0}rB(h2]h3]rC(hj>Xpy-attrrDeh4]h5]h8]uh(j:h"]rEhDXlengthrFrG}rH(h'Uh(j@ubah.hubaubhDX.rI}rJ(h'X.h(j)ubeh.hubah.hubeh.hubaubhH)rK}rL(h'Uh(jh)jh.hLh0}rM(h5]h4]h2]h3]h8]Uentries]rN(hOX6length (celery.datastructures.PositionQueue attribute)hUtrOauh:Nh;hh"]ubhV)rP}rQ(h'Uh(jh)jh.hYh0}rR(h[h\Xpyh5]h4]h2]h3]h8]h]X attributerSh_jSuh:Nh;hh"]rT(ha)rU}rV(h'XlengthrWh(jPh)hKh.heh0}rX(h5]rYhahhhh4]h2]h3]h8]rZhahmXPositionQueue.lengthhojhpuh:Kh;hh"]r[h)r\}r](h'jWh(jUh)hKh.hh0}r^(h2]h3]h4]h5]h8]uh:Kh;hh"]r_hDXlengthr`ra}rb(h'Uh(j\ubaubaubh)rc}rd(h'Uh(jPh)hKh.hh0}re(h2]h3]h4]h5]h8]uh:Kh;hh"]rfh)rg}rh(h'XAThe number of items required for the queue to be considered full.rih(jch)jh.hh0}rj(h2]h3]h4]h5]h8]uh:K h;hh"]rkhDXAThe number of items required for the queue to be considered full.rlrm}rn(h'jih(jgubaubaubeubhH)ro}rp(h'Uh(jh)X/var/build/user_builds/celery/checkouts/1.0-archived/celery/datastructures.py:docstring of celery.datastructures.PositionQueue.UnfilledPositionrqh.hLh0}rr(h5]h4]h2]h3]h8]Uentries]rs(hOX?PositionQueue.UnfilledPosition (class in celery.datastructures)h Utrtauh:Nh;hh"]ubhV)ru}rv(h'Uh(jh)jqh.hYh0}rw(h[h\Xpyh5]h4]h2]h3]h8]h]Xclassrxh_jxuh:Nh;hh"]ry(ha)rz}r{(h'X(PositionQueue.UnfilledPosition(position)h(juh)hdh.heh0}r|(h5]r}h ahhh*Xcelery.datastructuresr~r}rbh4]h2]h3]h8]rh ahmXPositionQueue.UnfilledPositionhojhpuh:Nh;hh"]r(hr)r}r(h'Xclass h(jzh)hdh.huh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDXclass rr}r(h'Uh(jubaubh)r}r(h'XUnfilledPositionh(jzh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDXUnfilledPositionrr}r(h'Uh(jubaubh)r}r(h'Uh(jzh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'Xpositionh0}r(h2]h3]h4]h5]h8]uh(jh"]rhDXpositionrr}r(h'Uh(jubah.hubaubeubh)r}r(h'Uh(juh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'XDescribes an unfilled slot.rh(jh)jqh.hh0}r(h2]h3]h4]h5]h8]uh:Kh;hh"]rhDXDescribes an unfilled slot.rr}r(h'jh(jubaubaubeubhH)r}r(h'Uh(jh)X/var/build/user_builds/celery/checkouts/1.0-archived/celery/datastructures.py:docstring of celery.datastructures.PositionQueue.filledrh.hLh0}r(h5]h4]h2]h3]h8]Uentries]r(hOX6filled (celery.datastructures.PositionQueue attribute)hUtrauh:Nh;hh"]ubhV)r}r(h'Uh(jh)jh.hYh0}r(h[h\Xpyh5]h4]h2]h3]h8]h]X attributerh_juh:Nh;hh"]r(ha)r}r(h'XPositionQueue.filledh(jh)hdh.heh0}r(h5]rhahhh*Xcelery.datastructuresrr}rbh4]h2]h3]h8]rhahmXPositionQueue.filledhoX PositionQueuehpuh:Nh;hh"]r(h{)r}r(h'XPositionQueue.h(jh)hdh.h~h0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDXPositionQueue.rr}r(h'Uh(jubaubh)r}r(h'Xfilledh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDXfilledrr}r(h'Uh(jubaubeubh)r}r(h'Uh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'X#Returns the filled slots as a list.rh(jh)jh.hh0}r(h2]h3]h4]h5]h8]uh:Kh;hh"]rhDX#Returns the filled slots as a list.rr}r(h'jh(jubaubaubeubhH)r}r(h'Uh(jh)X/var/build/user_builds/celery/checkouts/1.0-archived/celery/datastructures.py:docstring of celery.datastructures.PositionQueue.fullrh.hLh0}r(h5]h4]h2]h3]h8]Uentries]r(hOX3full() (celery.datastructures.PositionQueue method)hUtrauh:Nh;hh"]ubhV)r}r(h'Uh(jh)jh.hYh0}r(h[h\Xpyh5]h4]h2]h3]h8]h]Xmethodrh_juh:Nh;hh"]r(ha)r}r(h'XPositionQueue.full()h(jh)hdh.heh0}r(h5]rhahhh*Xcelery.datastructuresrr}rbh4]h2]h3]h8]rhahmXPositionQueue.fullhoX PositionQueuehpuh:Nh;hh"]r(h{)r}r(h'XPositionQueue.h(jh)hdh.h~h0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDXPositionQueue.rr}r(h'Uh(jubaubh)r}r(h'Xfullh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDXfullrr}r(h'Uh(jubaubh)r}r(h'Uh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]ubeubh)r}r(h'Uh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'X5Returns ``True`` if all of the slots has been filled.h(jh)jh.hh0}r(h2]h3]h4]h5]h8]uh:Kh;hh"]r(hDXReturns rr}r(h'XReturns h(jubh)r}r(h'X``True``h0}r(h2]h3]h4]h5]h8]uh(jh"]r hDXTruer r }r (h'Uh(jubah.hubhDX% if all of the slots has been filled.r r}r(h'X% if all of the slots has been filled.h(jubeubaubeubeubeubhH)r}r(h'Uh(h%h)Nh.hLh0}r(h5]h4]h2]h3]h8]Uentries]r(hOX.SharedCounter (class in celery.datastructures)hUtrauh:Nh;hh"]ubhV)r}r(h'Uh(h%h)Nh.hYh0}r(h[h\Xpyh5]h4]h2]h3]h8]h]Xclassrh_juh:Nh;hh"]r(ha)r}r(h'XSharedCounter(initial_value)h(jh)hdh.heh0}r(h5]rhahhh*Xcelery.datastructuresrr}r bh4]h2]h3]h8]r!hahmX SharedCounterr"hoUhpuh:Nh;hh"]r#(hr)r$}r%(h'Xclass h(jh)hdh.huh0}r&(h2]h3]h4]h5]h8]uh:Nh;hh"]r'hDXclass r(r)}r*(h'Uh(j$ubaubh{)r+}r,(h'Xcelery.datastructures.h(jh)hdh.h~h0}r-(h2]h3]h4]h5]h8]uh:Nh;hh"]r.hDXcelery.datastructures.r/r0}r1(h'Uh(j+ubaubh)r2}r3(h'j"h(jh)hdh.hh0}r4(h2]h3]h4]h5]h8]uh:Nh;hh"]r5hDX SharedCounterr6r7}r8(h'Uh(j2ubaubh)r9}r:(h'Uh(jh)hdh.hh0}r;(h2]h3]h4]h5]h8]uh:Nh;hh"]r<h)r=}r>(h'X initial_valueh0}r?(h2]h3]h4]h5]h8]uh(j9h"]r@hDX initial_valuerArB}rC(h'Uh(j=ubah.hubaubeubh)rD}rE(h'Uh(jh)hdh.hh0}rF(h2]h3]h4]h5]h8]uh:Nh;hh"]rG(h)rH}rI(h'XThread-safe counter.rJh(jDh)X~/var/build/user_builds/celery/checkouts/1.0-archived/celery/datastructures.py:docstring of celery.datastructures.SharedCounterrKh.hh0}rL(h2]h3]h4]h5]h8]uh:Kh;hh"]rMhDXThread-safe counter.rNrO}rP(h'jJh(jHubaubh)rQ}rR(h'XPlease note that the final value is not synchronized, this means that you should not update the value by using a previous value, the only reliable operations are increment and decrement.rSh(jDh)jKh.hh0}rT(h2]h3]h4]h5]h8]uh:Kh;hh"]rUhDXPlease note that the final value is not synchronized, this means that you should not update the value by using a previous value, the only reliable operations are increment and decrement.rVrW}rX(h'jSh(jQubaubh)rY}rZ(h'XExampler[h(jDh)jKh.hh0}r\(h2]h3]h4]h5]h8]uh:Kh;hh"]r]hDXExampler^r_}r`(h'j[h(jYubaubcdocutils.nodes block_quote ra)rb}rc(h'Uh(jDh)hKh.U block_quoterdh0}re(h2]h3]h4]h5]h8]uh:Nh;hh"]rf(cdocutils.nodes doctest_block rg)rh}ri(h'X1>>> max_clients = SharedCounter(initial_value=10)h0}rj(U xml:spacerkUpreserverlh5]h4]h2]h3]h8]uh(jbh"]rmhDX1>>> max_clients = SharedCounter(initial_value=10)rnro}rp(h'Uh(jhubah.U doctest_blockrqubh)rr}rs(h'X-# Thread one >>> max_clients += 1 # OK (safe)rth(jbh)jKh.hh0}ru(h2]h3]h4]h5]h8]uh:K h"]rvhDX-# Thread one >>> max_clients += 1 # OK (safe)rwrx}ry(h'jth(jrubaubh)rz}r{(h'X-# Thread two >>> max_clients -= 3 # OK (safe)r|h(jbh)jKh.hh0}r}(h2]h3]h4]h5]h8]uh:Kh"]r~hDX-# Thread two >>> max_clients -= 3 # OK (safe)rr}r(h'j|h(jzubaubh)r}r(h'XU# Main thread >>> if client >= int(max_clients): # Max clients now at 8 ... wait()rh(jbh)jKh.hh0}r(h2]h3]h4]h5]h8]uh:Kh"]rhDXU# Main thread >>> if client >= int(max_clients): # Max clients now at 8 ... wait()rr}r(h'jh(jubaubjg)r}r(h'X3>>> max_client = max_clients + 10 # NOT OK (unsafe)h0}r(jkjlh5]h4]h2]h3]h8]uh(jbh"]rhDX3>>> max_client = max_clients + 10 # NOT OK (unsafe)rr}r(h'Uh(jubah.jqubeubhH)r}r(h'Uh(jDh)X/var/build/user_builds/celery/checkouts/1.0-archived/celery/datastructures.py:docstring of celery.datastructures.SharedCounter.decrementrh.hLh0}r(h5]h4]h2]h3]h8]Uentries]r(hOX8decrement() (celery.datastructures.SharedCounter method)hUtrauh:Nh;hh"]ubhV)r}r(h'Uh(jDh)jh.hYh0}r(h[h\Xpyh5]h4]h2]h3]h8]h]Xmethodrh_juh:Nh;hh"]r(ha)r}r(h'XSharedCounter.decrement(n=1)h(jh)hdh.heh0}r(h5]rhahhh*Xcelery.datastructuresrr}rbh4]h2]h3]h8]rhahmXSharedCounter.decrementhoj"hpuh:Nh;hh"]r(h)r}r(h'X decrementh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDX decrementrr}r(h'Uh(jubaubh)r}r(h'Uh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'Xn=1h0}r(h2]h3]h4]h5]h8]uh(jh"]rhDXn=1rr}r(h'Uh(jubah.hubaubeubh)r}r(h'Uh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'XDecrement value.rh(jh)jh.hh0}r(h2]h3]h4]h5]h8]uh:Kh;hh"]rhDXDecrement value.rr}r(h'jh(jubaubaubeubhH)r}r(h'Uh(jDh)X/var/build/user_builds/celery/checkouts/1.0-archived/celery/datastructures.py:docstring of celery.datastructures.SharedCounter.incrementrh.hLh0}r(h5]h4]h2]h3]h8]Uentries]r(hOX8increment() (celery.datastructures.SharedCounter method)h Utrauh:Nh;hh"]ubhV)r}r(h'Uh(jDh)jh.hYh0}r(h[h\Xpyh5]h4]h2]h3]h8]h]Xmethodrh_juh:Nh;hh"]r(ha)r}r(h'XSharedCounter.increment(n=1)h(jh)hdh.heh0}r(h5]rh ahhh*Xcelery.datastructuresrr}rbh4]h2]h3]h8]rh ahmXSharedCounter.incrementhoj"hpuh:Nh;hh"]r(h)r}r(h'X incrementh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDX incrementrr}r(h'Uh(jubaubh)r}r(h'Uh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'Xn=1h0}r(h2]h3]h4]h5]h8]uh(jh"]rhDXn=1rr}r(h'Uh(jubah.hubaubeubh)r}r(h'Uh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'XIncrement value.rh(jh)jh.hh0}r(h2]h3]h4]h5]h8]uh:Kh;hh"]rhDXIncrement value.rr}r(h'jh(jubaubaubeubeubeubhH)r}r(h'Uh(h%h)X~/var/build/user_builds/celery/checkouts/1.0-archived/celery/datastructures.py:docstring of celery.datastructures.consume_queuerh.hLh0}r(h5]h4]h2]h3]h8]Uentries]r(hOX1consume_queue() (in module celery.datastructures)hUtrauh:Nh;hh"]ubhV)r}r(h'Uh(h%h)jh.hYh0}r(h[h\Xpyh5]h4]h2]h3]h8]h]Xfunctionrh_juh:Nh;hh"]r(ha)r}r(h'Xconsume_queue(queue)rh(jh)hdh.heh0}r(h5]rhahhh*Xcelery.datastructuresrr}rbh4]h2]h3]h8]rhahmX consume_queuer hoUhpuh:Nh;hh"]r (h{)r }r (h'Xcelery.datastructures.h(jh)hdh.h~h0}r (h2]h3]h4]h5]h8]uh:Nh;hh"]rhDXcelery.datastructures.rr}r(h'Uh(j ubaubh)r}r(h'j h(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rhDX consume_queuerr}r(h'Uh(jubaubh)r}r(h'Uh(jh)hdh.hh0}r(h2]h3]h4]h5]h8]uh:Nh;hh"]rh)r}r(h'Xqueueh0}r(h2]h3]h4]h5]h8]uh(jh"]r hDXqueuer!r"}r#(h'Uh(jubah.hubaubeubh)r$}r%(h'Uh(jh)hdh.hh0}r&(h2]h3]h4]h5]h8]uh:Nh;hh"]r'(h)r(}r)(h'XLIterator yielding all immediately available items in a :class:`Queue.Queue`.h(j$h)jh.hh0}r*(h2]h3]h4]h5]h8]uh:Kh;hh"]r+(hDX7Iterator yielding all immediately available items in a r,r-}r.(h'X7Iterator yielding all immediately available items in a h(j(ubh)r/}r0(h'X:class:`Queue.Queue`r1h(j(h)Nh.hh0}r2(UreftypeXclassh߉hX Queue.QueueU refdomainXpyr3h5]h4]U refexplicith2]h3]h8]hhhNhhuh:Nh"]r4h)r5}r6(h'j1h0}r7(h2]h3]r8(hj3Xpy-classr9eh4]h5]h8]uh(j/h"]r:hDX Queue.Queuer;r<}r=(h'Uh(j5ubah.hubaubhDX.r>}r?(h'X.h(j(ubeubh)r@}rA(h'XBThe iterator stops as soon as the queue raises :exc:`Queue.Empty`.rBh(j$h)jh.hh0}rC(h2]h3]h4]h5]h8]uh:Kh;hh"]rD(hDX/The iterator stops as soon as the queue raises rErF}rG(h'X/The iterator stops as soon as the queue raises h(j@ubh)rH}rI(h'X:exc:`Queue.Empty`rJh(j@h)Nh.hh0}rK(UreftypeXexch߉hX Queue.EmptyU refdomainXpyrLh5]h4]U refexplicith2]h3]h8]hhhNhhuh:Nh"]rMh)rN}rO(h'jJh0}rP(h2]h3]rQ(hjLXpy-excrReh4]h5]h8]uh(jHh"]rShDX Queue.EmptyrTrU}rV(h'Uh(jNubah.hubaubhDX.rW}rX(h'X.h(j@ubeubh)rY}rZ(h'XExampler[h(j$h)jh.hh0}r\(h2]h3]h4]h5]h8]uh:Kh;hh"]r]hDXExampler^r_}r`(h'j[h(jYubaubjg)ra}rb(h'Xn>>> q = Queue() >>> map(q.put, range(4)) >>> list(consume_queue(q)) [0, 1, 2, 3] >>> list(consume_queue(q)) []h(j$h)Nh.jqh0}rc(jkjlh5]h4]h2]h3]h8]uh:Nh;hh"]rdhDXn>>> q = Queue() >>> map(q.put, range(4)) >>> list(consume_queue(q)) [0, 1, 2, 3] >>> list(consume_queue(q)) []rerf}rg(h'Uh(jaubaubeubeubeubah'UU transformerrhNU footnote_refsri}rjUrefnamesrk}rlUsymbol_footnotesrm]rnUautofootnote_refsro]rpUsymbol_footnote_refsrq]rrU citationsrs]rth;hU current_lineruNUtransform_messagesrv]rwUreporterrxNUid_startryKU autofootnotesrz]r{U citation_refsr|}r}Uindirect_targetsr~]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNhANUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUg/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.datastructures.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hj.hjh jUh jh jzh jh j&hjhjhjhjh!h%hjhhbhjhjUh7cdocutils.nodes target r)r}r(h'Uh(h%h)hKh.Utargetrh0}r(h2]h5]rh7ah4]Uismodh3]h8]uh:Kh;hh"]ubhj[hjuUsubstitution_namesr}rh.h;h0}r(h2]h5]h4]Usourceh,h3]h8]uU footnotesr]rUrefidsr}rub.PKXDD2,GGDcelery-1.0-archived/.doctrees/internals/reference/celery.log.doctreecdocutils.nodes document q)q}q(U nametypesq}qXlogging - celery.logqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qX\/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.log.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q Ulogging-celery-logq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hXLogging - celery.logq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/XLogging - celery.logq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X'autodoc: failed to import module u'celery.log'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/log.py", line 8, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqU\/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.log.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDEcelery-1.0-archived/.doctrees/internals/reference/celery.beat.doctreecdocutils.nodes document q)q}q(U nametypesq}qXclock service - celery.beatqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qX]/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.beat.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q Uclock-service-celery-beatq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hXClock Service - celery.beatq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/XClock Service - celery.beatq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/Xautodoc: failed to import module u'celery.beat'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/beat.py", line 13, in from celery import log File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/log.py", line 8, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqU]/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.beat.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]qUfile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDY'Qcelery-1.0-archived/.doctrees/internals/reference/celery.backends.pyredis.doctreecdocutils.nodes document q)q}q(U nametypesq}qX(backend: redis - celery.backends.pyredisqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXi/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.pyredis.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U%backend-redis-celery-backends-pyredisq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX(Backend: Redis - celery.backends.pyredisq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X(Backend: Redis - celery.backends.pyredisq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/XBautodoc: failed to import module u'celery.backends.pyredis'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/backends/__init__.py", line 3, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUi/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.pyredis.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDPcelery-1.0-archived/.doctrees/internals/reference/celery.worker.listener.doctreecdocutils.nodes document q)q}q(U nametypesq}qX0worker message listener - celery.worker.listenerqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXh/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.listener.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U.worker-message-listener-celery-worker-listenerq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX0Worker Message Listener - celery.worker.listenerq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X0Worker Message Listener - celery.worker.listenerq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X@autodoc: failed to import module u'celery.worker.listener'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/worker/__init__.py", line 11, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUh/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.listener.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]qUfile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD]:((Mcelery-1.0-archived/.doctrees/internals/reference/celery.utils.compat.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xcelery.utils.compat.OrderedDictqX$celery.utils.compat.OrderedDict.copyqX(celery.utils.compat.OrderedDict.fromkeysqX'celery.utils.compat.OrderedDict.popitemq X%celery.utils.compat.OrderedDict.clearq X*python compatibility - celery.utils.compatq NuUsubstitution_defsq }q Uparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hhhhhhh h h h h U(python-compatibility-celery-utils-compatquUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXe/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.utils.compat.rstqq }q!bUtagnameq"Usectionq#U attributesq$}q%(Udupnamesq&]Uclassesq']Ubackrefsq(]Uidsq)]q*(Xmodule-celery.utils.compatq+heUnamesq,]q-h auUlineq.KUdocumentq/hh]q0(cdocutils.nodes title q1)q2}q3(hX*Python Compatibility - celery.utils.compatq4hhhh h"Utitleq5h$}q6(h&]h']h(]h)]h,]uh.Kh/hh]q7cdocutils.nodes Text q8X*Python Compatibility - celery.utils.compatq9q:}q;(hh4hh2ubaubcsphinx.addnodes index q<)q=}q>(hUhhhU q?h"Uindexq@h$}qA(h)]h(]h&]h']h,]Uentries]qB(UsingleqCXcelery.utils.compat (module)Xmodule-celery.utils.compatUtqDauh.Kh/hh]ubh<)qE}qF(hUhhhNh"h@h$}qG(h)]h(]h&]h']h,]Uentries]qH(hCX*OrderedDict (class in celery.utils.compat)hUtqIauh.Nh/hh]ubcsphinx.addnodes desc qJ)qK}qL(hUhhhNh"UdescqMh$}qN(UnoindexqOUdomainqPXpyh)]h(]h&]h']h,]UobjtypeqQXclassqRUdesctypeqShRuh.Nh/hh]qT(csphinx.addnodes desc_signature qU)qV}qW(hXOrderedDict(*args, **kwds)hhKhU qXh"Udesc_signatureqYh$}qZ(h)]q[haUmoduleq\hXcelery.utils.compatq]q^}q_bh(]h&]h']h,]q`haUfullnameqaX OrderedDictqbUclassqcUUfirstqduh.Nh/hh]qe(csphinx.addnodes desc_annotation qf)qg}qh(hXclass hhVhhXh"Udesc_annotationqih$}qj(h&]h']h(]h)]h,]uh.Nh/hh]qkh8Xclass qlqm}qn(hUhhgubaubcsphinx.addnodes desc_addname qo)qp}qq(hXcelery.utils.compat.hhVhhXh"U desc_addnameqrh$}qs(h&]h']h(]h)]h,]uh.Nh/hh]qth8Xcelery.utils.compat.quqv}qw(hUhhpubaubcsphinx.addnodes desc_name qx)qy}qz(hhbhhVhhXh"U desc_nameq{h$}q|(h&]h']h(]h)]h,]uh.Nh/hh]q}h8X OrderedDictq~q}q(hUhhyubaubcsphinx.addnodes desc_parameterlist q)q}q(hUhhVhhXh"Udesc_parameterlistqh$}q(h&]h']h(]h)]h,]uh.Nh/hh]q(csphinx.addnodes desc_parameter q)q}q(hX*argsh$}q(h&]h']h(]h)]h,]uhhh]qh8X*argsqq}q(hUhhubah"Udesc_parameterqubh)q}q(hX**kwdsh$}q(h&]h']h(]h)]h,]uhhh]qh8X**kwdsqq}q(hUhhubah"hubeubeubcsphinx.addnodes desc_content q)q}q(hUhhKhhXh"U desc_contentqh$}q(h&]h']h(]h)]h,]uh.Nh/hh]q(cdocutils.nodes paragraph q)q}q(hX)Dictionary that remembers insertion orderqhhhXx/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/compat.py:docstring of celery.utils.compat.OrderedDictqh"U paragraphqh$}q(h&]h']h(]h)]h,]uh.Kh/hh]qh8X)Dictionary that remembers insertion orderqq}q(hhhhubaubh<)q}q(hUhhhNh"h@h$}q(h)]h(]h&]h']h,]Uentries]q(hCX0clear() (celery.utils.compat.OrderedDict method)h Utqauh.Nh/hh]ubhJ)q}q(hUhhhNh"hMh$}q(hOhPXpyh)]h(]h&]h']h,]hQXmethodqhShuh.Nh/hh]q(hU)q}q(hX7OrderedDict.clear() -> None. Remove all items from od.hhhhXh"hYh$}q(h)]qh ah\hXcelery.utils.compatqq}qbh(]h&]h']h,]qh ahaXOrderedDict.clearhchbhduh.Nh/hh]q(hx)q}q(hXclearhhhhXh"h{h$}q(h&]h']h(]h)]h,]uh.Nh/hh]qh8Xclearqq}q(hUhhubaubh)q}q(hUhhhhXh"hh$}q(h&]h']h(]h)]h,]uh.Nh/hh]ubcsphinx.addnodes desc_returns q)q}q(hX None. Remove all items from od.hhhhXh"U desc_returnsqh$}q(h&]h']h(]h)]h,]uh.Nh/hh]qh8X None. Remove all items from od.q˅q}q(hUhhubaubeubh)q}q(hUhhhhXh"hh$}q(h&]h']h(]h)]h,]uh.Nh/hh]ubeubh<)q}q(hUhhhNh"h@h$}q(h)]h(]h&]h']h,]Uentries]q(hCX/copy() (celery.utils.compat.OrderedDict method)hUtqauh.Nh/hh]ubhJ)q}q(hUhhhNh"hMh$}q(hOhPXpyh)]h(]h&]h']h,]hQXmethodqhShuh.Nh/hh]q(hU)q}q(hX*OrderedDict.copy() -> a shallow copy of odhhhhXh"hYh$}q(h)]qhah\hXcelery.utils.compatq߅q}qbh(]h&]h']h,]qhahaXOrderedDict.copyhchbhduh.Nh/hh]q(hx)q}q(hXcopyhhhhXh"h{h$}q(h&]h']h(]h)]h,]uh.Nh/hh]qh8Xcopyq腁q}q(hUhhubaubh)q}q(hUhhhhXh"hh$}q(h&]h']h(]h)]h,]uh.Nh/hh]ubh)q}q(hXa shallow copy of odhhhhXh"hh$}q(h&]h']h(]h)]h,]uh.Nh/hh]qh8Xa shallow copy of odqq}q(hUhhubaubeubh)q}q(hUhhhhXh"hh$}q(h&]h']h(]h)]h,]uh.Nh/hh]ubeubh<)q}q(hUhhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/compat.py:docstring of celery.utils.compat.OrderedDict.fromkeysqh"h@h$}q(h)]h(]h&]h']h,]Uentries]q(hCX9fromkeys() (celery.utils.compat.OrderedDict class method)hUtqauh.Nh/hh]ubhJ)q}q(hUhhhhh"hMh$}r(hOhPXpyh)]h(]h&]h']h,]hQX classmethodrhSjuh.Nh/hh]r(hU)r}r(hXGOrderedDict.fromkeys(S[, v]) -> New ordered dictionary with keys from ShhhhXh"hYh$}r(h)]rhah\hXcelery.utils.compatrr}r bh(]h&]h']h,]r hahaXOrderedDict.fromkeyshchbhduh.Nh/hh]r (hf)r }r (hU classmethod rhjhhXh"hih$}r(h&]h']h(]h)]h,]uh.Nh/hh]rh8X classmethod rr}r(hUhj ubaubhx)r}r(hXfromkeyshjhhXh"h{h$}r(h&]h']h(]h)]h,]uh.Nh/hh]rh8Xfromkeysrr}r(hUhjubaubh)r}r(hUhjhhXh"hh$}r(h&]h']h(]h)]h,]uh.Nh/hh]r(h)r}r (hXSh$}r!(h&]h']h(]h)]h,]uhjh]r"h8XSr#}r$(hUhjubah"hubcsphinx.addnodes desc_optional r%)r&}r'(hUh$}r((h&]h']h(]h)]h,]uhjh]r)h)r*}r+(hXvh$}r,(h&]h']h(]h)]h,]uhj&h]r-h8Xvr.}r/(hUhj*ubah"hubah"U desc_optionalr0ubeubh)r1}r2(hX'New ordered dictionary with keys from ShjhhXh"hh$}r3(h&]h']h(]h)]h,]uh.Nh/hh]r4h8X'New ordered dictionary with keys from Sr5r6}r7(hUhj1ubaubeubh)r8}r9(hUhhhhXh"hh$}r:(h&]h']h(]h)]h,]uh.Nh/hh]r;h)r<}r=(hX/and values equal to v (which defaults to None).r>hj8hhh"hh$}r?(h&]h']h(]h)]h,]uh.Kh/hh]r@h8X/and values equal to v (which defaults to None).rArB}rC(hj>hj<ubaubaubeubh<)rD}rE(hUhhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/compat.py:docstring of celery.utils.compat.OrderedDict.popitemrFh"h@h$}rG(h)]h(]h&]h']h,]Uentries]rH(hCX2popitem() (celery.utils.compat.OrderedDict method)h UtrIauh.Nh/hh]ubhJ)rJ}rK(hUhhhjFh"hMh$}rL(hOhPXpyh)]h(]h&]h']h,]hQXmethodrMhSjMuh.Nh/hh]rN(hU)rO}rP(hXOrderedDict.popitem() -> (k, v)hjJhhXh"hYh$}rQ(h)]rRh ah\hXcelery.utils.compatrSrT}rUbh(]h&]h']h,]rVh ahaXOrderedDict.popitemhchbhduh.Nh/hh]rW(hx)rX}rY(hXpopitemhjOhhXh"h{h$}rZ(h&]h']h(]h)]h,]uh.Nh/hh]r[h8Xpopitemr\r]}r^(hUhjXubaubh)r_}r`(hUhjOhhXh"hh$}ra(h&]h']h(]h)]h,]uh.Nh/hh]rb(h)rc}rd(hX) -> (kh$}re(h&]h']h(]h)]h,]uhj_h]rfh8X) -> (krgrh}ri(hUhjcubah"hubh)rj}rk(hXvh$}rl(h&]h']h(]h)]h,]uhj_h]rmh8Xvrn}ro(hUhjjubah"hubeubeubh)rp}rq(hUhjJhhXh"hh$}rr(h&]h']h(]h)]h,]uh.Nh/hh]rsh)rt}ru(hXoReturn and remove a (key, value) pair. Pairs are returned in LIFO order if last is true or FIFO order if false.rvhjphjFh"hh$}rw(h&]h']h(]h)]h,]uh.Kh/hh]rxh8XoReturn and remove a (key, value) pair. Pairs are returned in LIFO order if last is true or FIFO order if false.ryrz}r{(hjvhjtubaubaubeubeubeubeubahUU transformerr|NU footnote_refsr}}r~Urefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh/hU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh5NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUe/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.utils.compat.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hhVhhhjh jOhhh hh+cdocutils.nodes target r)r}r(hUhhhh?h"Utargetrh$}r(h&]h)]rh+ah(]Uismodh']h,]uh.Kh/hh]ubuUsubstitution_namesr}rh"h/h$}r(h&]h)]h(]Usourceh h']h,]uU footnotesr]rUrefidsr}rub.PKXDDDOcelery-1.0-archived/.doctrees/internals/reference/celery.worker.control.doctreecdocutils.nodes document q)q}q(U nametypesq}qX&worker control - celery.worker.controlqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXg/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.control.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U$worker-control-celery-worker-controlq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX&Worker Control - celery.worker.controlq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X&Worker Control - celery.worker.controlq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X?autodoc: failed to import module u'celery.worker.control'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/worker/__init__.py", line 11, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUg/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.control.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD,RNcelery-1.0-archived/.doctrees/internals/reference/celery.backends.base.doctreecdocutils.nodes document q)q}q(U nametypesq}qX$backend: base - celery.backends.baseqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXf/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.base.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U!backend-base-celery-backends-baseq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX$Backend: Base - celery.backends.baseq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X$Backend: Base - celery.backends.baseq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X?autodoc: failed to import module u'celery.backends.base'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/backends/__init__.py", line 3, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUf/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.base.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD:^^?celery-1.0-archived/.doctrees/internals/reference/index.doctreecdocutils.nodes document q)q}q(U nametypesq}qXinternal module referenceqNsUsubstitution_defsq}qUparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startq KUnameidsq}qhUinternal-module-referenceqsUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXW/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/index.rstqq}qbUtagnameqUsectionqU attributesq}q (Udupnamesq!]Uclassesq"]Ubackrefsq#]Uidsq$]q%haUnamesq&]q'hauUlineq(KUdocumentq)hh]q*(cdocutils.nodes title q+)q,}q-(hXInternal Module Referenceq.hhhhhUtitleq/h}q0(h!]h"]h#]h$]h&]uh(Kh)hh]q1cdocutils.nodes Text q2XInternal Module Referenceq3q4}q5(hh.hh,ubaubcdocutils.nodes field_list q6)q7}q8(hUhhhhhU field_listq9h}q:(h!]h"]h#]h$]h&]uh(Kh)hh]q;(cdocutils.nodes field q<)q=}q>(hUhh7hhhUfieldq?h}q@(h!]h"]h#]h$]h&]uh(Kh)hh]qA(cdocutils.nodes field_name qB)qC}qD(hXReleaseqEh}qF(h!]h"]h#]h$]h&]uhh=h]qGh2XReleaseqHqI}qJ(hhEhhCubahU field_nameqKubcdocutils.nodes field_body qL)qM}qN(hX |version|qOh}qP(h!]h"]h#]h$]h&]uhh=h]qQcdocutils.nodes paragraph qR)qS}qT(hhOhhMhhhU paragraphqUh}qV(h!]h"]h#]h$]h&]uh(Kh]qWh2X1.0qXqY}qZ(hU1.0q[hhSubaubahU field_bodyq\ubeubh<)q]}q^(hUhh7hhhh?h}q_(h!]h"]h#]h$]h&]uh(Kh)hh]q`(hB)qa}qb(hXDateqch}qd(h!]h"]h#]h$]h&]uhh]h]qeh2XDateqfqg}qh(hhchhaubahhKubhL)qi}qj(hX|today| h}qk(h!]h"]h#]h$]h&]uhh]h]qlhR)qm}qn(hX|today|qohhihhhhUh}qp(h!]h"]h#]h$]h&]uh(Kh]qqh2XFebruary 04, 2014qrqs}qt(hXFebruary 04, 2014hhmubaubahh\ubeubeubcdocutils.nodes compound qu)qv}qw(hUhhhhhUcompoundqxh}qy(h!]h"]qzUtoctree-wrapperq{ah#]h$]h&]uh(Nh)hh]q|csphinx.addnodes toctree q})q~}q(hUhhvhhhUtoctreeqh}q(UnumberedqKU includehiddenqhXinternals/reference/indexqU titlesonlyqUglobqh$]h#]h!]h"]h&]Uentriesq]q(NX!internals/reference/celery.workerqqNX*internals/reference/celery.worker.listenerqqNX%internals/reference/celery.worker.jobqqNX-internals/reference/celery.worker.controllersqqNX)internals/reference/celery.worker.bucketsqqNX+internals/reference/celery.worker.schedulerqqNX&internals/reference/celery.worker.poolqqNX+internals/reference/celery.worker.heartbeatqqNX)internals/reference/celery.worker.controlqqNX2internals/reference/celery.worker.control.builtinsqqNX2internals/reference/celery.worker.control.registryqqNX(internals/reference/celery.worker.revokeqqNXinternals/reference/celery.beatqqNX#internals/reference/celery.backendsqqNX(internals/reference/celery.backends.baseqqNX(internals/reference/celery.backends.amqpqqNX,internals/reference/celery.backends.databaseqqNX)internals/reference/celery.backends.cacheqqNX+internals/reference/celery.backends.mongodbqqNX+internals/reference/celery.backends.pyredisqqNX*internals/reference/celery.backends.tyrantqqNX(internals/reference/celery.execute.traceqqNX)internals/reference/celery.datastructuresqqNXinternals/reference/celery.logqqNX internals/reference/celery.utilsqqNX*internals/reference/celery.utils.timeutilsqqNX%internals/reference/celery.utils.infoqqNX'internals/reference/celery.utils.compatqqNX&internals/reference/celery.utils.patchqqNX#internals/reference/celery.platformqÆqNX#internals/reference/celery.managersqņqNX!internals/reference/celery.modelsqdžqeUhiddenqɉU includefilesq]q(hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhheUmaxdepthqKuh(Kh]ubaubeubahUU transformerqNU footnote_refsq}qUrefnamesq}qUsymbol_footnotesq]qUautofootnote_refsq]qUsymbol_footnote_refsq]qU citationsq]qh)hU current_lineqNUtransform_messagesq]qUreporterqNUid_startqKU autofootnotesq]qU citation_refsq}qUindirect_targetsq]qUsettingsq(cdocutils.frontend Values qoq}q(Ufootnote_backlinksqKUrecord_dependenciesqNU rfc_base_urlqUhttp://tools.ietf.org/html/qU tracebackqUpep_referencesqNUstrip_commentsqNU toc_backlinksqUentryqU language_codeqUenqU datestampqNU report_levelqKU _destinationqNU halt_levelqKU strip_classesqNh/NUerror_encoding_error_handlerqUbackslashreplaceqUdebugqNUembed_stylesheetqUoutput_encoding_error_handlerqUstrictqU sectnum_xformqKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacer Uenvr NUdump_pseudo_xmlr NUexpose_internalsr NUsectsubtitle_xformr U source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUW/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/index.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlr Uhttp://www.python.org/dev/peps/r!Usyntax_highlightr"Ulongr#Uinput_encoding_error_handlerr$hUauto_id_prefixr%Uidr&Udoctitle_xformr'Ustrip_elements_with_classesr(NU _config_filesr)]Ufile_insertion_enabledr*U raw_enabledr+KU dump_settingsr,NubUsymbol_footnote_startr-KUidsr.}r/hhsUsubstitution_namesr0}r1hh)h}r2(h!]h$]h#]Usourcehh"]h&]uU footnotesr3]r4Urefidsr5}r6ub.PKXDD';I;IGcelery-1.0-archived/.doctrees/internals/reference/celery.models.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X TASK_STATUSESqXTASK_STATUS_DONEqXPeriodicTaskMeta.taskqXPeriodicTaskMetaq XPeriodicTaskMeta.nameq XPeriodicTaskMeta.delayq XTaskMeta.statusq XTASK_STATUS_PENDINGq XTASK_STATUS_FAILUREqX PeriodicTaskMeta.total_run_countqXPeriodicTaskMeta.last_run_atqXTASK_STATUSES_CHOICESqXTaskMeta.date_doneqXTaskMeta.resultqXTaskMetaqXTASK_STATUS_RETRYqXTaskMeta.task_idqXdjango models - celery.modelsqNuUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q (hhhhhhh h h h h h h h h h hhhhhhhhhhhhhhhhhhhUdjango-models-celery-modelsq!uUchildrenq"]q#cdocutils.nodes section q$)q%}q&(U rawsourceq'UUparentq(hUsourceq)cdocutils.nodes reprunicode q*X_/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.models.rstq+q,}q-bUtagnameq.Usectionq/U attributesq0}q1(Udupnamesq2]Uclassesq3]Ubackrefsq4]Uidsq5]q6h!aUnamesq7]q8hauUlineq9KUdocumentq:hh"]q;(cdocutils.nodes title q<)q=}q>(h'XDjango Models - celery.modelsq?h(h%h)h,h.Utitleq@h0}qA(h2]h3]h4]h5]h7]uh9Kh:hh"]qBcdocutils.nodes Text qCXDjango Models - celery.modelsqDqE}qF(h'h?h(h=ubaubcsphinx.addnodes index qG)qH}qI(h'Uh(h%h)h,h.UindexqJh0}qK(h5]h4]h2]h3]h7]Uentries]qL(UsingleqMX'TASK_STATUS_PENDING (built-in variable)h UtqNauh9Nh:hh"]ubcsphinx.addnodes desc qO)qP}qQ(h'Uh(h%h)h,h.UdescqRh0}qS(UnoindexqTUdomainqUXpyh5]h4]h2]h3]h7]UobjtypeqVXdataqWUdesctypeqXhWuh9Nh:hh"]qY(csphinx.addnodes desc_signature qZ)q[}q\(h'h h(hPh)h,h.Udesc_signatureq]h0}q^(h5]q_h aUmoduleq`Nh4]h2]h3]h7]qah aUfullnameqbh UclassqcUUfirstqduh9Kh:hh"]qecsphinx.addnodes desc_name qf)qg}qh(h'h h(h[h)h,h.U desc_nameqih0}qj(h2]h3]h4]h5]h7]uh9Kh:hh"]qkhCXTASK_STATUS_PENDINGqlqm}qn(h'Uh(hgubaubaubcsphinx.addnodes desc_content qo)qp}qq(h'Uh(hPh)h,h.U desc_contentqrh0}qs(h2]h3]h4]h5]h7]uh9Kh:hh"]qtcdocutils.nodes paragraph qu)qv}qw(h'X$The string status of a pending task.qxh(hph)h,h.U paragraphqyh0}qz(h2]h3]h4]h5]h7]uh9Kh:hh"]q{hCX$The string status of a pending task.q|q}}q~(h'hxh(hvubaubaubeubhG)q}q(h'Uh(h%h)h,h.hJh0}q(h5]h4]h2]h3]h7]Uentries]q(hMX%TASK_STATUS_RETRY (built-in variable)hUtqauh9Nh:hh"]ubhO)q}q(h'Uh(h%h)h,h.hRh0}q(hThUXpyh5]h4]h2]h3]h7]hVXdataqhXhuh9Nh:hh"]q(hZ)q}q(h'hh(hh)h,h.h]h0}q(h5]qhah`Nh4]h2]h3]h7]qhahbhhcUhduh9K h:hh"]qhf)q}q(h'hh(hh)h,h.hih0}q(h2]h3]h4]h5]h7]uh9K h:hh"]qhCXTASK_STATUS_RETRYqq}q(h'Uh(hubaubaubho)q}q(h'Uh(hh)h,h.hrh0}q(h2]h3]h4]h5]h7]uh9K h:hh"]qhu)q}q(h'X3The string status of a task which is to be retried.qh(hh)h,h.hyh0}q(h2]h3]h4]h5]h7]uh9K h:hh"]qhCX3The string status of a task which is to be retried.qq}q(h'hh(hubaubaubeubhG)q}q(h'Uh(h%h)h,h.hJh0}q(h5]h4]h2]h3]h7]Uentries]q(hMX'TASK_STATUS_FAILURE (built-in variable)hUtqauh9Nh:hh"]ubhO)q}q(h'Uh(h%h)h,h.hRh0}q(hThUXpyh5]h4]h2]h3]h7]hVXdataqhXhuh9Nh:hh"]q(hZ)q}q(h'hh(hh)h,h.h]h0}q(h5]qhah`Nh4]h2]h3]h7]qhahbhhcUhduh9Kh:hh"]qhf)q}q(h'hh(hh)h,h.hih0}q(h2]h3]h4]h5]h7]uh9Kh:hh"]qhCXTASK_STATUS_FAILUREqq}q(h'Uh(hubaubaubho)q}q(h'Uh(hh)h,h.hrh0}q(h2]h3]h4]h5]h7]uh9Kh:hh"]qhu)q}q(h'X#The string status of a failed task.qh(hh)h,h.hyh0}q(h2]h3]h4]h5]h7]uh9Kh:hh"]qhCX#The string status of a failed task.q…q}q(h'hh(hubaubaubeubhG)q}q(h'Uh(h%h)h,h.hJh0}q(h5]h4]h2]h3]h7]Uentries]q(hMX$TASK_STATUS_DONE (built-in variable)hUtqauh9Nh:hh"]ubhO)q}q(h'Uh(h%h)h,h.hRh0}q(hThUXpyh5]h4]h2]h3]h7]hVXdataqhXhuh9Nh:hh"]q(hZ)q}q(h'hh(hh)h,h.h]h0}q(h5]qhah`Nh4]h2]h3]h7]qhahbhhcUhduh9Kh:hh"]qhf)q}q(h'hh(hh)h,h.hih0}q(h2]h3]h4]h5]h7]uh9Kh:hh"]qhCXTASK_STATUS_DONEqمq}q(h'Uh(hubaubaubho)q}q(h'Uh(hh)h,h.hrh0}q(h2]h3]h4]h5]h7]uh9Kh:hh"]qhu)q}q(h'X;The string status of a task that was successfully executed.qh(hh)h,h.hyh0}q(h2]h3]h4]h5]h7]uh9Kh:hh"]qhCX;The string status of a task that was successfully executed.q允q}q(h'hh(hubaubaubeubhG)q}q(h'Uh(h%h)h,h.hJh0}q(h5]h4]h2]h3]h7]Uentries]q(hMX!TASK_STATUSES (built-in variable)hUtqauh9Nh:hh"]ubhO)q}q(h'Uh(h%h)h,h.hRh0}q(hThUXpyh5]h4]h2]h3]h7]hVXdataqhXhuh9Nh:hh"]q(hZ)q}q(h'hh(hh)h,h.h]h0}q(h5]qhah`Nh4]h2]h3]h7]qhahbhhcUhduh9Kh:hh"]qhf)q}q(h'hh(hh)h,h.hih0}q(h2]h3]h4]h5]h7]uh9Kh:hh"]qhCX TASK_STATUSESqq}q(h'Uh(hubaubaubho)q}r(h'Uh(hh)h,h.hrh0}r(h2]h3]h4]h5]h7]uh9Kh:hh"]rhu)r}r(h'XList of possible task statuses.rh(hh)h,h.hyh0}r(h2]h3]h4]h5]h7]uh9Kh:hh"]rhCXList of possible task statuses.rr }r (h'jh(jubaubaubeubhG)r }r (h'Uh(h%h)h,h.hJh0}r (h5]h4]h2]h3]h7]Uentries]r(hMX)TASK_STATUSES_CHOICES (built-in variable)hUtrauh9Nh:hh"]ubhO)r}r(h'Uh(h%h)h,h.hRh0}r(hThUXpyh5]h4]h2]h3]h7]hVXdatarhXjuh9Nh:hh"]r(hZ)r}r(h'hh(jh)h,h.h]h0}r(h5]rhah`Nh4]h2]h3]h7]rhahbhhcUhduh9Kh:hh"]rhf)r}r(h'hh(jh)h,h.hih0}r(h2]h3]h4]h5]h7]uh9Kh:hh"]rhCXTASK_STATUSES_CHOICESrr }r!(h'Uh(jubaubaubho)r"}r#(h'Uh(jh)h,h.hrh0}r$(h2]h3]h4]h5]h7]uh9Kh:hh"]r%hu)r&}r'(h'XcDjango choice tuple of possible task statuses, for usage in model/form fields ``choices`` argument.h(j"h)h,h.hyh0}r((h2]h3]h4]h5]h7]uh9Kh:hh"]r)(hCXNDjango choice tuple of possible task statuses, for usage in model/form fields r*r+}r,(h'XNDjango choice tuple of possible task statuses, for usage in model/form fields h(j&ubcdocutils.nodes literal r-)r.}r/(h'X ``choices``h0}r0(h2]h3]h4]h5]h7]uh(j&h"]r1hCXchoicesr2r3}r4(h'Uh(j.ubah.Uliteralr5ubhCX argument.r6r7}r8(h'X argument.h(j&ubeubaubeubhG)r9}r:(h'Uh(h%h)Nh.hJh0}r;(h5]h4]h2]h3]h7]Uentries]r<(hMXTaskMeta (built-in class)hUtr=auh9Nh:hh"]ubhO)r>}r?(h'Uh(h%h)Nh.hRh0}r@(hThUXpyh5]h4]h2]h3]h7]hVXclassrAhXjAuh9Nh:hh"]rB(hZ)rC}rD(h'hh(j>h)h,h.h]h0}rE(h5]rFhah`Nh4]h2]h3]h7]rGhahbhhcUhduh9K4h:hh"]rH(csphinx.addnodes desc_annotation rI)rJ}rK(h'Xclass h(jCh)h,h.Udesc_annotationrLh0}rM(h2]h3]h4]h5]h7]uh9K4h:hh"]rNhCXclass rOrP}rQ(h'Uh(jJubaubhf)rR}rS(h'hh(jCh)h,h.hih0}rT(h2]h3]h4]h5]h7]uh9K4h:hh"]rUhCXTaskMetarVrW}rX(h'Uh(jRubaubeubho)rY}rZ(h'Uh(j>h)h,h.hrh0}r[(h2]h3]h4]h5]h7]uh9K4h:hh"]r\(hu)r]}r^(h'X2Model for storing the result and status of a task.r_h(jYh)h,h.hyh0}r`(h2]h3]h4]h5]h7]uh9K h:hh"]rahCX2Model for storing the result and status of a task.rbrc}rd(h'j_h(j]ubaubhu)re}rf(h'X<*Note* Only used if you're running the ``database`` backend.h(jYh)h,h.hyh0}rg(h2]h3]h4]h5]h7]uh9K"h:hh"]rh(cdocutils.nodes emphasis ri)rj}rk(h'X*Note*h0}rl(h2]h3]h4]h5]h7]uh(jeh"]rmhCXNoternro}rp(h'Uh(jjubah.UemphasisrqubhCX! Only used if you're running the rrrs}rt(h'X! Only used if you're running the h(jeubj-)ru}rv(h'X ``database``h0}rw(h2]h3]h4]h5]h7]uh(jeh"]rxhCXdatabaseryrz}r{(h'Uh(juubah.j5ubhCX backend.r|r}}r~(h'X backend.h(jeubeubhG)r}r(h'Uh(jYh)h,h.hJh0}r(h5]h4]h2]h3]h7]Uentries]r(hMXtask_id (TaskMeta attribute)hUtrauh9Nh:hh"]ubhO)r}r(h'Uh(jYh)h,h.hRh0}r(hThUXpyh5]h4]h2]h3]h7]hVX attributerhXjuh9Nh:hh"]r(hZ)r}r(h'Xtask_idrh(jh)h,h.h]h0}r(h5]rhah`Nh4]h2]h3]h7]rhahbhhchhduh9K'h:hh"]rhf)r}r(h'jh(jh)h,h.hih0}r(h2]h3]h4]h5]h7]uh9K'h:hh"]rhCXtask_idrr}r(h'Uh(jubaubaubho)r}r(h'Uh(jh)h,h.hrh0}r(h2]h3]h4]h5]h7]uh9K'h:hh"]rhu)r}r(h'XThe unique task id.rh(jh)h,h.hyh0}r(h2]h3]h4]h5]h7]uh9K&h:hh"]rhCXThe unique task id.rr}r(h'jh(jubaubaubeubhG)r}r(h'Uh(jYh)h,h.hJh0}r(h5]h4]h2]h3]h7]Uentries]r(hMXstatus (TaskMeta attribute)h Utrauh9Nh:hh"]ubhO)r}r(h'Uh(jYh)h,h.hRh0}r(hThUXpyh5]h4]h2]h3]h7]hVX attributerhXjuh9Nh:hh"]r(hZ)r}r(h'Xstatusrh(jh)h,h.h]h0}r(h5]rh ah`Nh4]h2]h3]h7]rh ahbh hchhduh9K+h:hh"]rhf)r}r(h'jh(jh)h,h.hih0}r(h2]h3]h4]h5]h7]uh9K+h:hh"]rhCXstatusrr}r(h'Uh(jubaubaubho)r}r(h'Uh(jh)h,h.hrh0}r(h2]h3]h4]h5]h7]uh9K+h:hh"]rhu)r}r(h'X!The current status for this task.rh(jh)h,h.hyh0}r(h2]h3]h4]h5]h7]uh9K*h:hh"]rhCX!The current status for this task.rr}r(h'jh(jubaubaubeubhG)r}r(h'Uh(jYh)h,h.hJh0}r(h5]h4]h2]h3]h7]Uentries]r(hMXresult (TaskMeta attribute)hUtrauh9Nh:hh"]ubhO)r}r(h'Uh(jYh)h,h.hRh0}r(hThUXpyh5]h4]h2]h3]h7]hVX attributerhXjuh9Nh:hh"]r(hZ)r}r(h'Xresultrh(jh)h,h.h]h0}r(h5]rhah`Nh4]h2]h3]h7]rhahbhhchhduh9K0h:hh"]rhf)r}r(h'jh(jh)h,h.hih0}r(h2]h3]h4]h5]h7]uh9K0h:hh"]rhCXresultrr}r(h'Uh(jubaubaubho)r}r(h'Uh(jh)h,h.hrh0}r(h2]h3]h4]h5]h7]uh9K0h:hh"]rhu)r}r(h'XhThe result after successful/failed execution. If the task failed, this contains the execption it raised.rh(jh)h,h.hyh0}r(h2]h3]h4]h5]h7]uh9K.h:hh"]rhCXhThe result after successful/failed execution. If the task failed, this contains the execption it raised.rr}r(h'jh(jubaubaubeubhG)r}r(h'Uh(jYh)h,h.hJh0}r(h5]h4]h2]h3]h7]Uentries]r(hMXdate_done (TaskMeta attribute)hUtrauh9Nh:hh"]ubhO)r}r(h'Uh(jYh)h,h.hRh0}r(hThUXpyh5]h4]h2]h3]h7]hVX attributerhXjuh9Nh:hh"]r(hZ)r}r(h'X date_donerh(jh)h,h.h]h0}r(h5]rhah`Nh4]h2]h3]h7]rhahbhhchhduh9K3h:hh"]rhf)r}r(h'jh(jh)h,h.hih0}r(h2]h3]h4]h5]h7]uh9K3h:hh"]rhCX date_donerr}r(h'Uh(jubaubaubho)r}r(h'Uh(jh)h,h.hrh0}r(h2]h3]h4]h5]h7]uh9K3h:hh"]rhu)r}r(h'X"The date this task changed status.r h(jh)h,h.hyh0}r (h2]h3]h4]h5]h7]uh9K3h:hh"]r hCX"The date this task changed status.r r }r(h'j h(jubaubaubeubeubeubhG)r}r(h'Uh(h%h)Nh.hJh0}r(h5]h4]h2]h3]h7]Uentries]r(hMX!PeriodicTaskMeta (built-in class)h Utrauh9Nh:hh"]ubhO)r}r(h'Uh(h%h)Nh.hRh0}r(hThUXpyh5]h4]h2]h3]h7]hVXclassrhXjuh9Nh:hh"]r(hZ)r}r(h'h h(jh)h,h.h]h0}r(h5]rh ah`Nh4]h2]h3]h7]rh ahbh hcUhduh9KLh:hh"]r(jI)r}r (h'Xclass h(jh)h,h.jLh0}r!(h2]h3]h4]h5]h7]uh9KLh:hh"]r"hCXclass r#r$}r%(h'Uh(jubaubhf)r&}r'(h'h h(jh)h,h.hih0}r((h2]h3]h4]h5]h7]uh9KLh:hh"]r)hCXPeriodicTaskMetar*r+}r,(h'Uh(j&ubaubeubho)r-}r.(h'Uh(jh)h,h.hrh0}r/(h2]h3]h4]h5]h7]uh9KLh:hh"]r0(hu)r1}r2(h'X"Metadata model for periodic tasks.r3h(j-h)h,h.hyh0}r4(h2]h3]h4]h5]h7]uh9K7h:hh"]r5hCX"Metadata model for periodic tasks.r6r7}r8(h'j3h(j1ubaubhG)r9}r:(h'Uh(j-h)h,h.hJh0}r;(h5]h4]h2]h3]h7]Uentries]r<(hMX!name (PeriodicTaskMeta attribute)h Utr=auh9Nh:hh"]ubhO)r>}r?(h'Uh(j-h)h,h.hRh0}r@(hThUXpyh5]h4]h2]h3]h7]hVX attributerAhXjAuh9Nh:hh"]rB(hZ)rC}rD(h'XnamerEh(j>h)h,h.h]h0}rF(h5]rGh ah`Nh4]h2]h3]h7]rHh ahbh hch hduh9Kh)h,h.hrh0}rS(h2]h3]h4]h5]h7]uh9KNUexpose_internalsr?NUsectsubtitle_xformr@U source_linkrANUrfc_referencesrBNUoutput_encodingrCUutf-8rDU source_urlrENUinput_encodingrFU utf-8-sigrGU_disable_configrHNU id_prefixrIUU tab_widthrJKUerror_encodingrKUUTF-8rLU_sourcerMU_/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.models.rstrNUgettext_compactrOU generatorrPNUdump_internalsrQNU smart_quotesrRU pep_base_urlrSUhttp://www.python.org/dev/peps/rTUsyntax_highlightrUUlongrVUinput_encoding_error_handlerrWj1Uauto_id_prefixrXUidrYUdoctitle_xformrZUstrip_elements_with_classesr[NU _config_filesr\]Ufile_insertion_enabledr]U raw_enabledr^KU dump_settingsr_NubUsymbol_footnote_startr`KUidsra}rb(hhhhhjhjh jh jCh jh jh h[hhh!h%hjghjhjhjChhhjhjuUsubstitution_namesrc}rdh.h:h0}re(h2]h5]h4]Usourceh,h3]h7]uU footnotesrf]rgUrefidsrh}riub.PKXDDiRcelery-1.0-archived/.doctrees/internals/reference/celery.backends.database.doctreecdocutils.nodes document q)q}q(U nametypesq}qX,backend: database - celery.backends.databaseqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXj/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.database.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U)backend-database-celery-backends-databaseq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX,Backend: Database - celery.backends.databaseq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X,Backend: Database - celery.backends.databaseq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/XCautodoc: failed to import module u'celery.backends.database'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/backends/__init__.py", line 3, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUj/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.database.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD~?^vNcelery-1.0-archived/.doctrees/internals/reference/celery.worker.revoke.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X+worker revoked tasks - celery.worker.revokeqNXrevokedquUsubstitution_defsq}q Uparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startqKUnameidsq}q(hU)worker-revoked-tasks-celery-worker-revokeqhhuUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXf/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.revoke.rstqq}qbUtagnameqUsectionqU attributesq }q!(Udupnamesq"]Uclassesq#]Ubackrefsq$]Uidsq%]q&haUnamesq']q(hauUlineq)KUdocumentq*hh]q+(cdocutils.nodes title q,)q-}q.(hX+Worker Revoked Tasks - celery.worker.revokeq/hhhhhUtitleq0h }q1(h"]h#]h$]h%]h']uh)Kh*hh]q2cdocutils.nodes Text q3X+Worker Revoked Tasks - celery.worker.revokeq4q5}q6(hh/hh-ubaubcsphinx.addnodes index q7)q8}q9(hUhhhhhUindexq:h }q;(h%]h$]h"]h#]h']Uentries]q<(Usingleq=Xrevoked (built-in variable)hUtq>auh)Nh*hh]ubcsphinx.addnodes desc q?)q@}qA(hUhhhhhUdescqBh }qC(UnoindexqDUdomainqEXpyh%]h$]h"]h#]h']UobjtypeqFXdataqGUdesctypeqHhGuh)Nh*hh]qI(csphinx.addnodes desc_signature qJ)qK}qL(hhhh@hhhUdesc_signatureqMh }qN(h%]qOhaUmoduleqPNh$]h"]h#]h']qQhaUfullnameqRhUclassqSUUfirstqTuh)K h*hh]qUcsphinx.addnodes desc_name qV)qW}qX(hhhhKhhhU desc_nameqYh }qZ(h"]h#]h$]h%]h']uh)K h*hh]q[h3Xrevokedq\q]}q^(hUhhWubaubaubcsphinx.addnodes desc_content q_)q`}qa(hUhh@hhhU desc_contentqbh }qc(h"]h#]h$]h%]h']uh)K h*hh]qd(cdocutils.nodes paragraph qe)qf}qg(hXHA :class:`celery.datastructures.LimitedSet` containing revoked task ids.qhhh`hhhU paragraphqih }qj(h"]h#]h$]h%]h']uh)Kh*hh]qk(h3XA qlqm}qn(hXA hhfubcsphinx.addnodes pending_xref qo)qp}qq(hX):class:`celery.datastructures.LimitedSet`qrhhfhhhU pending_xrefqsh }qt(UreftypeXclassUrefwarnquU reftargetqvX celery.datastructures.LimitedSetU refdomainXpyqwh%]h$]U refexplicith"]h#]h']UrefdocqxX(internals/reference/celery.worker.revokeqyUpy:classqzNU py:moduleq{Nuh)Kh]q|cdocutils.nodes literal q})q~}q(hhrh }q(h"]h#]q(UxrefqhwXpy-classqeh$]h%]h']uhhph]qh3X celery.datastructures.LimitedSetqq}q(hUhh~ubahUliteralqubaubh3X containing revoked task ids.qq}q(hX containing revoked task ids.hhfubeubhe)q}q(hXiItems expire after one hour, and the structure can only hold 10000 expired items at a time (about 300kb).qhh`hhhhih }q(h"]h#]h$]h%]h']uh)K h*hh]qh3XiItems expire after one hour, and the structure can only hold 10000 expired items at a time (about 300kb).qq}q(hhhhubaubeubeubeubahUU transformerqNU footnote_refsq}qUrefnamesq}qUsymbol_footnotesq]qUautofootnote_refsq]qUsymbol_footnote_refsq]qU citationsq]qh*hU current_lineqNUtransform_messagesq]qUreporterqNUid_startqKU autofootnotesq]qU citation_refsq}qUindirect_targetsq]qUsettingsq(cdocutils.frontend Values qoq}q(Ufootnote_backlinksqKUrecord_dependenciesqNU rfc_base_urlqUhttp://tools.ietf.org/html/qU tracebackqUpep_referencesqNUstrip_commentsqNU toc_backlinksqUentryqU language_codeqUenqU datestampqNU report_levelqKU _destinationqNU halt_levelqKU strip_classesqNh0NUerror_encoding_error_handlerqUbackslashreplaceqUdebugqNUembed_stylesheetqÉUoutput_encoding_error_handlerqUstrictqU sectnum_xformqKUdump_transformsqNU docinfo_xformqKUwarning_streamqNUpep_file_url_templateqUpep-%04dqUexit_status_levelqKUconfigqNUstrict_visitorqNUcloak_email_addressesqψUtrim_footnote_reference_spaceqЉUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqԉU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUf/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.revoke.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}q(hhKhhuUsubstitution_namesq}qhh*h }q(h"]h%]h$]Usourcehh#]h']uU footnotesq]qUrefidsq}qub.PKXDDș:Lcelery-1.0-archived/.doctrees/internals/reference/celery.worker.pool.doctreecdocutils.nodes document q)q}q(U nametypesq}qXtask pool - celery.worker.poolqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXd/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.pool.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q Utask-pool-celery-worker-poolq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hXTask Pool - celery.worker.poolq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/XTask Pool - celery.worker.poolq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X<autodoc: failed to import module u'celery.worker.pool'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/worker/__init__.py", line 11, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUd/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.pool.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD >Qcelery-1.0-archived/.doctrees/internals/reference/celery.worker.heartbeat.doctreecdocutils.nodes document q)q}q(U nametypesq}qX+worker heartbeats - celery.worker.heartbeatqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXi/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.heartbeat.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U)worker-heartbeats-celery-worker-heartbeatq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX+Worker Heartbeats - celery.worker.heartbeatq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X+Worker Heartbeats - celery.worker.heartbeatq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/XAautodoc: failed to import module u'celery.worker.heartbeat'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/worker/__init__.py", line 11, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUi/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.heartbeat.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]qUfile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDPQQPcelery-1.0-archived/.doctrees/internals/reference/celery.utils.timeutils.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X0time and date utilities - celery.utils.timeutilsqNX(celery.utils.timeutils.timedelta_secondsqX'celery.utils.timeutils.delta_resolutionqX celery.utils.timeutils.remainingq Xcelery.utils.timeutils.rateq Xcelery.utils.timeutils.weekdayq uUsubstitution_defsq }q Uparse_messagesq]qcdocutils.nodes system_message q)q}q(U rawsourceqUU attributesq}q(Udupnamesq]UlevelKUidsq]Ubackrefsq]UsourceX|/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/timeutils.py:docstring of celery.utils.timeutils.remainingqUclassesq]Unamesq]UlineK UtypeUERRORquUparentqcdocutils.nodes paragraph q)q}q (hUh}q!(h]h]h]h]h]uhcdocutils.nodes list_item q")q#}q$(hUh}q%(h]h]h]h]h]uhcdocutils.nodes bullet_list q&)q'}q((hUh}q)(h]h]h]h]h]uhcdocutils.nodes field_body q*)q+}q,(hUh}q-(h]h]h]h]h]uhcdocutils.nodes field q.)q/}q0(hUh}q1(h]h]h]h]h]uhcdocutils.nodes field_list q2)q3}q4(hUhcsphinx.addnodes desc_content q5)q6}q7(hUhcsphinx.addnodes desc q8)q9}q:(hUhcdocutils.nodes section q;)q<}q=(hUhhUsourceq>cdocutils.nodes reprunicode q?Xh/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.utils.timeutils.rstq@qA}qBbUtagnameqCUsectionqDh}qE(h]h]h]h]qF(Xmodule-celery.utils.timeutilsqGU.time-and-date-utilities-celery-utils-timeutilsqHeh]qIhauUlineqJKUdocumentqKhUchildrenqL]qM(cdocutils.nodes title qN)qO}qP(hX0Time and Date Utilities - celery.utils.timeutilsqQhhhAhCUtitleqRh}qS(h]h]h]h]h]uhJKhKhhL]qTcdocutils.nodes Text qUX0Time and Date Utilities - celery.utils.timeutilsqVqW}qX(hhQhhOubaubcsphinx.addnodes index qY)qZ}q[(hUhhU q\hCUindexq]h}q^(h]h]h]h]h]Uentries]q_(Usingleq`Xcelery.utils.timeutils (module)Xmodule-celery.utils.timeutilsUtqaauhJKhKhhL]ubhY)qb}qc(hUhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/timeutils.py:docstring of celery.utils.timeutils.delta_resolutionqdhCh]h}qe(h]h]h]h]h]Uentries]qf(h`X5delta_resolution() (in module celery.utils.timeutils)hUtqgauhJNhKhhL]ubh8)qh}qi(hUhhhdhCUdescqjh}qk(UnoindexqlUdomainqmXpyh]h]h]h]h]UobjtypeqnXfunctionqoUdesctypeqphouhJNhKhhL]qq(csphinx.addnodes desc_signature qr)qs}qt(hXdelta_resolution(dt, delta)hhhh>U quhCUdesc_signatureqvh}qw(h]qxhaUmoduleqyh?Xcelery.utils.timeutilsqzq{}q|bh]h]h]h]q}haUfullnameq~Xdelta_resolutionqUclassqUUfirstquhJNhKhhL]q(csphinx.addnodes desc_addname q)q}q(hXcelery.utils.timeutils.hhsh>huhCU desc_addnameqh}q(h]h]h]h]h]uhJNhKhhL]qhUXcelery.utils.timeutils.qq}q(hUhhubaubcsphinx.addnodes desc_name q)q}q(hhhhsh>huhCU desc_nameqh}q(h]h]h]h]h]uhJNhKhhL]qhUXdelta_resolutionqq}q(hUhhubaubcsphinx.addnodes desc_parameterlist q)q}q(hUhhsh>huhCUdesc_parameterlistqh}q(h]h]h]h]h]uhJNhKhhL]q(csphinx.addnodes desc_parameter q)q}q(hXdth}q(h]h]h]h]h]uhhhL]qhUXdtqq}q(hUhhubahCUdesc_parameterqubh)q}q(hXdeltah}q(h]h]h]h]h]uhhhL]qhUXdeltaqq}q(hUhhubahChubeubeubh5)q}q(hUhhhh>huhCU desc_contentqh}q(h]h]h]h]h]uhJNhKhhL]q(h)q}q(hX2Round a datetime to the resolution of a timedelta.qhhh>hdhCU paragraphqh}q(h]h]h]h]h]uhJKhKhhL]qhUX2Round a datetime to the resolution of a timedelta.qq}q(hhhhubaubh)q}q(hXIf the timedelta is in days, the datetime will be rounded to the nearest days, if the timedelta is in hours the datetime will be rounded to the nearest hour, and so on until seconds which will just return the original datetime.qhhh>hdhChh}q(h]h]h]h]h]uhJKhKhhL]qhUXIf the timedelta is in days, the datetime will be rounded to the nearest days, if the timedelta is in hours the datetime will be rounded to the nearest hour, and so on until seconds which will just return the original datetime.qq}q(hhhhubaubh)q}q(hX Examples::hhh>hdhChh}q(h]h]h]h]h]uhJKhKhhL]qhUX Examples:qŅq}q(hX Examples:hhubaubcdocutils.nodes literal_block q)q}q(hX>>> now = datetime.now() >>> now datetime.datetime(2010, 3, 30, 11, 50, 58, 41065) >>> delta_resolution(now, timedelta(days=2)) datetime.datetime(2010, 3, 30, 0, 0) >>> delta_resolution(now, timedelta(hours=2)) datetime.datetime(2010, 3, 30, 11, 0) >>> delta_resolution(now, timedelta(minutes=2)) datetime.datetime(2010, 3, 30, 11, 50) >>> delta_resolution(now, timedelta(seconds=2)) datetime.datetime(2010, 3, 30, 11, 50, 58, 41065)hhh>hdhCU literal_blockqh}q(U xml:spaceqUpreserveqh]h]h]h]h]uhJKhKhhL]qhUX>>> now = datetime.now() >>> now datetime.datetime(2010, 3, 30, 11, 50, 58, 41065) >>> delta_resolution(now, timedelta(days=2)) datetime.datetime(2010, 3, 30, 0, 0) >>> delta_resolution(now, timedelta(hours=2)) datetime.datetime(2010, 3, 30, 11, 0) >>> delta_resolution(now, timedelta(minutes=2)) datetime.datetime(2010, 3, 30, 11, 50) >>> delta_resolution(now, timedelta(seconds=2)) datetime.datetime(2010, 3, 30, 11, 50, 58, 41065)qЅq}q(hUhhubaubeubeubhY)q}q(hUhhXw/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/timeutils.py:docstring of celery.utils.timeutils.rateqhCh]h}q(h]h]h]h]h]Uentries]q(h`X)rate() (in module celery.utils.timeutils)h UtqauhJNhKhhL]ubh8)q}q(hUhhhhChjh}q(hlhmXpyh]h]h]h]h]hnXfunctionqhphuhJNhKhhL]q(hr)q}q(hX rate(rate)hhh>huhChvh}q(h]qh ahyh?Xcelery.utils.timeutilsq⅁q}qbh]h]h]h]qh ah~XrateqhUhuhJNhKhhL]q(h)q}q(hXcelery.utils.timeutils.hhh>huhChh}q(h]h]h]h]h]uhJNhKhhL]qhUXcelery.utils.timeutils.q셁q}q(hUhhubaubh)q}q(hhhhh>huhChh}q(h]h]h]h]h]uhJNhKhhL]qhUXrateqq}q(hUhhubaubh)q}q(hUhhh>huhChh}q(h]h]h]h]h]uhJNhKhhL]qh)q}q(hXrateh}q(h]h]h]h]h]uhhhL]qhUXrateqq}r(hUhhubahChubaubeubh5)r}r(hUhhh>huhChh}r(h]h]h]h]h]uhJNhKhhL]rh)r}r(hXSParses rate strings, such as ``"100/m"`` or ``"2/h"`` and converts them to seconds.hjh>hhChh}r(h]h]h]h]h]uhJKhKhhL]r(hUXParses rate strings, such as r r }r (hXParses rate strings, such as hjubcdocutils.nodes literal r )r }r(hX ``"100/m"``h}r(h]h]h]h]h]uhjhL]rhUX"100/m"rr}r(hUhj ubahCUliteralrubhUX or rr}r(hX or hjubj )r}r(hX ``"2/h"``h}r(h]h]h]h]h]uhjhL]rhUX"2/h"rr}r(hUhjubahCjubhUX and converts them to seconds.rr }r!(hX and converts them to seconds.hjubeubaubeubhY)r"}r#(hUhhhhCh]h}r$(h]h]h]h]h]Uentries]r%(h`X.remaining() (in module celery.utils.timeutils)h Utr&auhJNhKhhL]ubh9hY)r'}r((hUhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/timeutils.py:docstring of celery.utils.timeutils.timedelta_secondsr)hCh]h}r*(h]h]h]h]h]Uentries]r+(h`X6timedelta_seconds() (in module celery.utils.timeutils)hUtr,auhJNhKhhL]ubh8)r-}r.(hUhhj)hChjh}r/(hlhmXpyh]h]h]h]h]hnXfunctionr0hpj0uhJNhKhhL]r1(hr)r2}r3(hXtimedelta_seconds(delta)hj-h>huhChvh}r4(h]r5hahyh?Xcelery.utils.timeutilsr6r7}r8bh]h]h]h]r9hah~Xtimedelta_secondsr:hUhuhJNhKhhL]r;(h)r<}r=(hXcelery.utils.timeutils.hj2h>huhChh}r>(h]h]h]h]h]uhJNhKhhL]r?hUXcelery.utils.timeutils.r@rA}rB(hUhj<ubaubh)rC}rD(hj:hj2h>huhChh}rE(h]h]h]h]h]uhJNhKhhL]rFhUXtimedelta_secondsrGrH}rI(hUhjCubaubh)rJ}rK(hUhj2h>huhChh}rL(h]h]h]h]h]uhJNhKhhL]rMh)rN}rO(hXdeltah}rP(h]h]h]h]h]uhjJhL]rQhUXdeltarRrS}rT(hUhjNubahChubaubeubh5)rU}rV(hUhj-h>huhChh}rW(h]h]h]h]h]uhJNhKhhL]rX(h)rY}rZ(hX/Convert :class:`datetime.timedelta` to seconds.hjUh>j)hChh}r[(h]h]h]h]h]uhJKhKhhL]r\(hUXConvert r]r^}r_(hXConvert hjYubcsphinx.addnodes pending_xref r`)ra}rb(hX:class:`datetime.timedelta`rchjYh>NhCU pending_xrefrdh}re(UreftypeXclassUrefwarnrfU reftargetrgXdatetime.timedeltaU refdomainXpyrhh]h]U refexplicith]h]h]UrefdocriX*internals/reference/celery.utils.timeutilsrjUpy:classrkNU py:modulerlXcelery.utils.timeutilsrmuhJNhL]rnj )ro}rp(hjch}rq(h]h]rr(UxrefrsjhXpy-classrteh]h]h]uhjahL]ruhUXdatetime.timedeltarvrw}rx(hUhjoubahCjubaubhUX to seconds.ryrz}r{(hX to seconds.hjYubeubh)r|}r}(hX$Doesn't account for negative values.r~hjUh>j)hChh}r(h]h]h]h]h]uhJKhKhhL]rhUX$Doesn't account for negative values.rr}r(hj~hj|ubaubeubeubhY)r}r(hUhhXz/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/timeutils.py:docstring of celery.utils.timeutils.weekdayrhCh]h}r(h]h]h]h]h]Uentries]r(h`X,weekday() (in module celery.utils.timeutils)h UtrauhJNhKhhL]ubh8)r}r(hUhhjhChjh}r(hlhmXpyh]h]h]h]h]hnXfunctionrhpjuhJNhKhhL]r(hr)r}r(hX weekday(name)rhjh>huhChvh}r(h]rh ahyh?Xcelery.utils.timeutilsrr}rbh]h]h]h]rh ah~XweekdayrhUhuhJNhKhhL]r(h)r}r(hXcelery.utils.timeutils.hjh>huhChh}r(h]h]h]h]h]uhJNhKhhL]rhUXcelery.utils.timeutils.rr}r(hUhjubaubh)r}r(hjhjh>huhChh}r(h]h]h]h]h]uhJNhKhhL]rhUXweekdayrr}r(hUhjubaubh)r}r(hUhjh>huhChh}r(h]h]h]h]h]uhJNhKhhL]rh)r}r(hXnameh}r(h]h]h]h]h]uhjhL]rhUXnamerr}r(hUhjubahChubaubeubh5)r}r(hUhjh>huhChh}r(h]h]h]h]h]uhJNhKhhL]r(h)r}r(hX<Return the position of a weekday (0 - 7, where 0 is Sunday).rhjh>jhChh}r(h]h]h]h]h]uhJKhKhhL]rhUX<Return the position of a weekday (0 - 7, where 0 is Sunday).rr}r(hjhjubaubcdocutils.nodes doctest_block r)r}r(hXA>>> weekday("sunday") 0 >>> weekday("sun") 0 >>> weekday("mon") 1hjh>jhCU doctest_blockrh}r(hhh]h]h]h]h]uhJKhKhhL]rhUXA>>> weekday("sunday") 0 >>> weekday("sun") 0 >>> weekday("mon") 1rr}r(hUhjubaubeubeubeubh>hhChjh}r(hlhmXpyh]h]h]h]h]hnXfunctionrhpjuhJNhKhhL]r(hr)r}r(hX2remaining(start, ends_in, now=None, relative=True)hh9h>huhChvh}r(h]rh ahyh?Xcelery.utils.timeutilsrr}rbh]h]h]h]rh ah~X remainingrhUhuhJNhKhhL]r(h)r}r(hXcelery.utils.timeutils.hjh>huhChh}r(h]h]h]h]h]uhJNhKhhL]rhUXcelery.utils.timeutils.rr}r(hUhjubaubh)r}r(hjhjh>huhChh}r(h]h]h]h]h]uhJNhKhhL]rhUX remainingrr}r(hUhjubaubh)r}r(hUhjh>huhChh}r(h]h]h]h]h]uhJNhKhhL]r(h)r}r(hXstarth}r(h]h]h]h]h]uhjhL]rhUXstartrr}r(hUhjubahChubh)r}r(hXends_inh}r(h]h]h]h]h]uhjhL]rhUXends_inrr}r(hUhjubahChubh)r}r(hXnow=Noneh}r(h]h]h]h]h]uhjhL]rhUXnow=Nonerr}r(hUhjubahChubh)r}r(hX relative=Trueh}r(h]h]h]h]h]uhjhL]rhUX relative=Truerr}r(hUhjubahChubeubeubh6eubh>huhChh}r(h]h]h]h]h]uhJNhKhhL]r(h)r}r(hX>Calculate the remaining time for a start date and a timedelta.rhh6h>hhChh}r(h]h]h]h]h]uhJKhKhhL]r hUX>Calculate the remaining time for a start date and a timedelta.r r }r (hjhjubaubh)r }r(hX<E.g. "how many seconds left for 30 seconds after ``start``?"rhh6h>hhChh}r(h]h]h]h]h]uhJKhKhhL]r(hUX1E.g. "how many seconds left for 30 seconds after rr}r(hX1E.g. "how many seconds left for 30 seconds after hj ubj )r}r(hX ``start``h}r(h]h]h]h]h]uhj hL]rhUXstartrr}r(hUhjubahCjubhUX?"rr}r(hX?"hj ubeubh3h)r}r (hX Examples::r!hh6h>hhChh}r"(h]h]h]h]h]uhJK hKhhL]r#hUX Examples:r$r%}r&(hX Examples:hjubaubh)r'}r((hXF>>> remaining(datetime.now(), ends_in=timedelta(seconds=30)) '0:0:29.999948' >>> str(remaining(datetime.now() - timedelta(minutes=29), ends_in=timedelta(hours=2))) '1:30:59.999938' >>> str(remaining(datetime.now() - timedelta(minutes=29), ends_in=timedelta(hours=2), relative=False)) '1:11:18.458437'hh6h>hhChh}r)(hhh]h]h]h]h]uhJK7hKhhL]r*hUXF>>> remaining(datetime.now(), ends_in=timedelta(seconds=30)) '0:0:29.999948' >>> str(remaining(datetime.now() - timedelta(minutes=29), ends_in=timedelta(hours=2))) '1:30:59.999938' >>> str(remaining(datetime.now() - timedelta(minutes=29), ends_in=timedelta(hours=2), relative=False)) '1:11:18.458437'r+r,}r-(hUhj'ubaubeubh>hhCU field_listr.h}r/(h]h]h]h]h]uhJNhKhhL]r0h/aubhL]r1(cdocutils.nodes field_name r2)r3}r4(hUh}r5(h]h]h]h]h]uhh/hL]r6hUX Parametersr7r8}r9(hUhj3ubahCU field_namer:ubh+ehCUfieldr;ubhL]r<h'ahCU field_bodyr=ubhL]r>(h")r?}r@(hUh}rA(h]h]h]h]h]uhh'hL]rBh)rC}rD(hUh}rE(h]h]h]h]h]uhj?hL]rF(cdocutils.nodes strong rG)rH}rI(hXstarth}rJ(h]h]h]h]h]uhjChL]rKhUXstartrLrM}rN(hUhjHubahCUstrongrOubhUX -- rPrQ}rR(hUhjCubhUXStart rSrT}rU(hXStart hjCubj`)rV}rW(hX:class:`datetime.datetime`rXhjCh>NhCjdh}rY(UreftypeXclassjfjgXdatetime.datetimeU refdomainXpyrZh]h]U refexplicith]h]h]jijjjkNjljmuhJNhL]r[j )r\}r](hjXh}r^(h]h]r_(jsjZXpy-classr`eh]h]h]uhjVhL]rahUXdatetime.datetimerbrc}rd(hUhj\ubahCjubaubhUX.re}rf(hX.hjCubehChubahCU list_itemrgubh")rh}ri(hUh}rj(h]h]h]h]h]uhh'hL]rkh)rl}rm(hUh}rn(h]h]h]h]h]uhjhhL]ro(jG)rp}rq(hXends_inh}rr(h]h]h]h]h]uhjlhL]rshUXends_inrtru}rv(hUhjpubahCjOubhUX -- rwrx}ry(hUhjlubhUXThe end delta as a rzr{}r|(hXThe end delta as a hjlubj`)r}}r~(hX:class:`datetime.timedelta`rhjlh>NhCjdh}r(UreftypeXclassjfjgXdatetime.timedeltaU refdomainXpyrh]h]U refexplicith]h]h]jijjjkNjljmuhJNhL]rj )r}r(hjh}r(h]h]r(jsjXpy-classreh]h]h]uhj}hL]rhUXdatetime.timedeltarr}r(hUhjubahCjubaubhUX.r}r(hX.hjlubehChubahCjgubh#h")r}r(hUh}r(h]h]h]h]h]uhh'hL]rh)r}r(hUh}r(h]h]h]h]h]uhjhL]r(jG)r}r(hXnowh}r(h]h]h]h]h]uhjhL]rhUXnowrr}r(hUhjubahCjOubhUX -- rr}r(hUhjubhUXThe current time, defaults to rr}r(hXThe current time, defaults to hjubj`)r}r(hX:func:`datetime.now`rhjh>NhCjdh}r(UreftypeXfuncjfjgX datetime.nowU refdomainXpyrh]h]U refexplicith]h]h]jijjjkNjljmuhJNhL]rj )r}r(hjh}r(h]h]r(jsjXpy-funcreh]h]h]uhjhL]rhUXdatetime.now()rr}r(hUhjubahCjubaubhUX.r}r(hX.hjubehChubahCjgubehCU bullet_listrubhL]rhahCjgubhL]r(jG)r}r(hXrelativeh}r(h]h]h]h]h]uhhhL]rhUXrelativerr}r(hUhjubahCjOubhUX -- rr}r(hUhhubh)r}r(hXsIf set to ``False``, the end time will be calculated using :func:`delta_resolution` (i.e. rounded to the resolutionhhh>hhChh}r(h]h]h]h]h]uhJKhL]r(hUX If set to rr}r(hX If set to hjubj )r}r(hX ``False``h}r(h]h]h]h]h]uhjhL]rhUXFalserr}r(hUhjubahCjubhUX(, the end time will be calculated using rr}r(hX(, the end time will be calculated using hjubj`)r}r(hX:func:`delta_resolution`rhjh>NhCjdh}r(UreftypeXfuncjfjgXdelta_resolutionU refdomainXpyrh]h]U refexplicith]h]h]jijjjkNjljmuhJNhL]rj )r}r(hjh}r(h]h]r(jsjXpy-funcreh]h]h]uhjhL]rhUXdelta_resolution()rr}r(hUhjubahCjubaubhUX (i.e. rounded to the resolutionrr}r(hX (i.e. rounded to the resolutionhjubeubcdocutils.nodes block_quote r)r}r(hUh}r(h]h]h]h]h]uhhhL]rh)r}r(hXof ``ends_in``).rhjh>hhChh}r(h]h]h]h]h]uhJK hL]r(hUXof rr}r(hXof hjubj )r}r(hX ``ends_in``h}r(h]h]h]h]h]uhjhL]rhUXends_inrr}r(hUhjubahCjubhUX).rr}r(hX).hjubeubahCU block_quoterubehChubhL]rh)r}r(hUh}r(h]h]h]h]h]uhhhL]rhUXUnexpected indentation.rr}r(hUhjubahChubahCUsystem_messagerubaUcurrent_sourcerNU decorationrNUautofootnote_startrKUnameidsr}r (hhHhhhhh h h h h h uhL]r hNU docinfo_xformr?KUwarning_streamr@NUpep_file_url_templaterAUpep-%04drBUexit_status_levelrCKUconfigrDNUstrict_visitorrENUcloak_email_addressesrFUtrim_footnote_reference_spacerGUenvrHNUdump_pseudo_xmlrINUexpose_internalsrJNUsectsubtitle_xformrKU source_linkrLNUrfc_referencesrMNUoutput_encodingrNUutf-8rOU source_urlrPNUinput_encodingrQU utf-8-sigrRU_disable_configrSNU id_prefixrTUU tab_widthrUKUerror_encodingrVUUTF-8rWU_sourcerXUh/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.utils.timeutils.rstrYUgettext_compactrZU generatorr[NUdump_internalsr\NU smart_quotesr]U pep_base_urlr^Uhttp://www.python.org/dev/peps/r_Usyntax_highlightr`UlongraUinput_encoding_error_handlerrbj<Uauto_id_prefixrcUidrdUdoctitle_xformreUstrip_elements_with_classesrfNU _config_filesrg]Ufile_insertion_enabledrhU raw_enabledriKU dump_settingsrjNubUsymbol_footnote_startrkKUidsrl}rm(hj2hhshHhh\hCUtargetrqh}rr(h]h]rshGah]Uismodh]h]uhJKhKhhL]ubuUsubstitution_namesrt}ruhChKh}rv(h]h]h]UsourcehAh]h]uU footnotesrw]rxUrefidsry}rzub.PKXDDMPcelery-1.0-archived/.doctrees/internals/reference/celery.backends.tyrant.doctreecdocutils.nodes document q)q}q(U nametypesq}qX.backend: tokyo tyrant - celery.backends.tyrantqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXh/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.tyrant.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U+backend-tokyo-tyrant-celery-backends-tyrantq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX.Backend: Tokyo Tyrant - celery.backends.tyrantq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X.Backend: Tokyo Tyrant - celery.backends.tyrantq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/XAautodoc: failed to import module u'celery.backends.tyrant'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/backends/__init__.py", line 3, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUh/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.tyrant.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]qUfile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDTQcelery-1.0-archived/.doctrees/internals/reference/celery.worker.scheduler.doctreecdocutils.nodes document q)q}q(U nametypesq}qX*worker scheduler - celery.worker.schedulerqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXi/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.scheduler.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U(worker-scheduler-celery-worker-schedulerq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX*Worker Scheduler - celery.worker.schedulerq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X*Worker Scheduler - celery.worker.schedulerq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/XAautodoc: failed to import module u'celery.worker.scheduler'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/worker/__init__.py", line 11, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUi/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.scheduler.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDKcelery-1.0-archived/.doctrees/internals/reference/celery.utils.info.doctreecdocutils.nodes document q)q}q(U nametypesq}qX"debugging info - celery.utils.infoqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXc/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.utils.info.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U debugging-info-celery-utils-infoq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX"Debugging Info - celery.utils.infoq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X"Debugging Info - celery.utils.infoq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X5autodoc: failed to import module u'celery.utils.info'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/utils/info.py", line 3, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUc/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.utils.info.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]qUfile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDl||Icelery-1.0-archived/.doctrees/internals/reference/celery.backends.doctreecdocutils.nodes document q)q}q(U nametypesq}qXbackends - celery.backendsqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXa/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q Ubackends-celery-backendsq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hXBackends - celery.backendsq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/XBackends - celery.backendsq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X:autodoc: failed to import module u'celery.backends'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/backends/__init__.py", line 3, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUa/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDb@@Xcelery-1.0-archived/.doctrees/internals/reference/celery.worker.control.registry.doctreecdocutils.nodes document q)q}q(U nametypesq}qX@remote control command registry - celery.worker.control.registryqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXp/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.control.registry.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U>remote-control-command-registry-celery-worker-control-registryq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX@Remote Control Command Registry - celery.worker.control.registryq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X@Remote Control Command Registry - celery.worker.control.registryq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/XHautodoc: failed to import module u'celery.worker.control.registry'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/worker/__init__.py", line 11, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUp/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.control.registry.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDDOcelery-1.0-archived/.doctrees/internals/reference/celery.worker.buckets.doctreecdocutils.nodes document q)q}q(U nametypesq}qX4token bucket (rate limiting) - celery.worker.bucketsqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXg/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.buckets.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U0token-bucket-rate-limiting-celery-worker-bucketsq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX4Token Bucket (rate limiting) - celery.worker.bucketsq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X4Token Bucket (rate limiting) - celery.worker.bucketsq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X?autodoc: failed to import module u'celery.worker.buckets'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/worker/__init__.py", line 11, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUg/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.worker.buckets.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDḌ QCRCRIcelery-1.0-archived/.doctrees/internals/reference/celery.managers.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X$celery.managers.TaskManager.get_taskqX!celery.managers.transaction_retryqXcelery.managers.TaskManagerqX.celery.managers.TaskSetManager.restore_tasksetq X+celery.managers.TaskSetManager.store_resultq X(celery.managers.TaskManager.store_resultq X'django model managers - celery.managersq NXcelery.managers.TaskSetManagerq uUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hhhhhhh h h h h h h U%django-model-managers-celery-managersqh h uUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode q Xa/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.managers.rstq!q"}q#bUtagnameq$Usectionq%U attributesq&}q'(Udupnamesq(]Uclassesq)]Ubackrefsq*]Uidsq+]q,(Xmodule-celery.managersq-heUnamesq.]q/h auUlineq0KUdocumentq1hh]q2(cdocutils.nodes title q3)q4}q5(hX'Django Model Managers - celery.managersq6hhhh"h$Utitleq7h&}q8(h(]h)]h*]h+]h.]uh0Kh1hh]q9cdocutils.nodes Text q:X'Django Model Managers - celery.managersq;q<}q=(hh6hh4ubaubcsphinx.addnodes index q>)q?}q@(hUhhhU qAh$UindexqBh&}qC(h+]h*]h(]h)]h.]Uentries]qD(UsingleqEXcelery.managers (module)Xmodule-celery.managersUtqFauh0Kh1hh]ubh>)qG}qH(hUhhhNh$hBh&}qI(h+]h*]h(]h)]h.]Uentries]qJ(hEX&TaskManager (class in celery.managers)hUtqKauh0Nh1hh]ubcsphinx.addnodes desc qL)qM}qN(hUhhhNh$UdescqOh&}qP(UnoindexqQUdomainqRXpyh+]h*]h(]h)]h.]UobjtypeqSXclassqTUdesctypeqUhTuh0Nh1hh]qV(csphinx.addnodes desc_signature qW)qX}qY(hX TaskManager()hhMhU qZh$Udesc_signatureq[h&}q\(h+]q]haUmoduleq^h Xcelery.managersq_q`}qabh*]h(]h)]h.]qbhaUfullnameqcX TaskManagerqdUclassqeUUfirstqfuh0Nh1hh]qg(csphinx.addnodes desc_annotation qh)qi}qj(hXclass hhXhhZh$Udesc_annotationqkh&}ql(h(]h)]h*]h+]h.]uh0Nh1hh]qmh:Xclass qnqo}qp(hUhhiubaubcsphinx.addnodes desc_addname qq)qr}qs(hXcelery.managers.hhXhhZh$U desc_addnameqth&}qu(h(]h)]h*]h+]h.]uh0Nh1hh]qvh:Xcelery.managers.qwqx}qy(hUhhrubaubcsphinx.addnodes desc_name qz)q{}q|(hhdhhXhhZh$U desc_nameq}h&}q~(h(]h)]h*]h+]h.]uh0Nh1hh]qh:X TaskManagerqq}q(hUhh{ubaubeubcsphinx.addnodes desc_content q)q}q(hUhhMhhZh$U desc_contentqh&}q(h(]h)]h*]h+]h.]uh0Nh1hh]q(cdocutils.nodes paragraph q)q}q(hX/Manager for :class:`celery.models.Task` models.hhhXp/var/build/user_builds/celery/checkouts/1.0-archived/celery/managers.py:docstring of celery.managers.TaskManagerqh$U paragraphqh&}q(h(]h)]h*]h+]h.]uh0Kh1hh]q(h:X Manager for qq}q(hX Manager for hhubcsphinx.addnodes pending_xref q)q}q(hX:class:`celery.models.Task`qhhhh"h$U pending_xrefqh&}q(UreftypeXclassUrefwarnqU reftargetqXcelery.models.TaskU refdomainXpyqh+]h*]U refexplicith(]h)]h.]UrefdocqX#internals/reference/celery.managersqUpy:classqhdU py:moduleqXcelery.managersquh0Kh]qcdocutils.nodes literal q)q}q(hhh&}q(h(]h)]q(UxrefqhXpy-classqeh*]h+]h.]uhhh]qh:Xcelery.models.Taskqq}q(hUhhubah$Uliteralqubaubh:X models.qq}q(hX models.hhubeubh>)q}q(hUhhhNh$hBh&}q(h+]h*]h(]h)]h.]Uentries]q(hEX/get_task() (celery.managers.TaskManager method)hUtqauh0Nh1hh]ubhL)q}q(hUhhhNh$hOh&}q(hQhRXpyh+]h*]h(]h)]h.]hSXmethodqhUhuh0Nh1hh]q(hW)q}q(hX%TaskManager.get_task(*args, **kwargs)hhhhZh$h[h&}q(h+]qhah^h Xcelery.managersqq}qbh*]h(]h)]h.]qhahcXTaskManager.get_taskhehdhfuh0Nh1hh]q(hz)q}q(hXget_taskhhhhZh$h}h&}q(h(]h)]h*]h+]h.]uh0Nh1hh]qh:Xget_taskqȅq}q(hUhhubaubcsphinx.addnodes desc_parameterlist q)q}q(hUhhhhZh$Udesc_parameterlistqh&}q(h(]h)]h*]h+]h.]uh0Nh1hh]q(csphinx.addnodes desc_parameter q)q}q(hX*argsh&}q(h(]h)]h*]h+]h.]uhhh]qh:X*argsqօq}q(hUhhubah$Udesc_parameterqubh)q}q(hX**kwargsh&}q(h(]h)]h*]h+]h.]uhhh]qh:X**kwargsqޅq}q(hUhhubah$hubeubeubh)q}q(hUhhhhZh$hh&}q(h(]h)]h*]h+]h.]uh0Nh1hh]q(h)q}q(hX&Get task meta for task by ``task_id``.hhhXy/var/build/user_builds/celery/checkouts/1.0-archived/celery/managers.py:docstring of celery.managers.TaskManager.get_taskqh$hh&}q(h(]h)]h*]h+]h.]uh0Kh1hh]q(h:XGet task meta for task by qꅁq}q(hXGet task meta for task by hhubh)q}q(hX ``task_id``h&}q(h(]h)]h*]h+]h.]uhhh]qh:Xtask_idqq}q(hUhhubah$hubh:X.q}q(hX.hhubeubcdocutils.nodes field_list q)q}q(hUhhhNh$U field_listqh&}q(h(]h)]h*]h+]h.]uh0Nh1hh]qcdocutils.nodes field q)q}q(hUh&}q(h(]h)]h*]h+]h.]uhhh]r(cdocutils.nodes field_name r)r}r(hUh&}r(h(]h)]h*]h+]h.]uhhh]rh:X Parametersrr}r(hUhjubah$U field_namer ubcdocutils.nodes field_body r )r }r (hUh&}r (h(]h)]h*]h+]h.]uhhh]rh)r}r(hUh&}r(h(]h)]h*]h+]h.]uhj h]r(cdocutils.nodes strong r)r}r(hXexception_retry_counth&}r(h(]h)]h*]h+]h.]uhjh]rh:Xexception_retry_countrr}r(hUhjubah$Ustrongrubh:X -- rr}r(hUhjubh:XHow many times to retry by transaction rollback on exception. This could theoretically happen in a race condition if another worker is trying to create the same task. The default is to retry once.rr }r!(hXHow many times to retry by transaction rollback on exception. This could theoretically happen in a race condition if another worker is trying to create the same task. The default is to retry once.hjubeh$hubah$U field_bodyr"ubeh$Ufieldr#ubaubeubeubh>)r$}r%(hUhhhNh$hBh&}r&(h+]h*]h(]h)]h.]Uentries]r'(hEX3store_result() (celery.managers.TaskManager method)h Utr(auh0Nh1hh]ubhL)r)}r*(hUhhhNh$hOh&}r+(hQhRXpyh+]h*]h(]h)]h.]hSXmethodr,hUj,uh0Nh1hh]r-(hW)r.}r/(hX)TaskManager.store_result(*args, **kwargs)hj)hhZh$h[h&}r0(h+]r1h ah^h Xcelery.managersr2r3}r4bh*]h(]h)]h.]r5h ahcXTaskManager.store_resulthehdhfuh0Nh1hh]r6(hz)r7}r8(hX store_resulthj.hhZh$h}h&}r9(h(]h)]h*]h+]h.]uh0Nh1hh]r:h:X store_resultr;r<}r=(hUhj7ubaubh)r>}r?(hUhj.hhZh$hh&}r@(h(]h)]h*]h+]h.]uh0Nh1hh]rA(h)rB}rC(hX*argsh&}rD(h(]h)]h*]h+]h.]uhj>h]rEh:X*argsrFrG}rH(hUhjBubah$hubh)rI}rJ(hX**kwargsh&}rK(h(]h)]h*]h+]h.]uhj>h]rLh:X**kwargsrMrN}rO(hUhjIubah$hubeubeubh)rP}rQ(hUhj)hhZh$hh&}rR(h(]h)]h*]h+]h.]uh0Nh1hh]rS(h)rT}rU(hX&Store the result and status of a task.rVhjPhX}/var/build/user_builds/celery/checkouts/1.0-archived/celery/managers.py:docstring of celery.managers.TaskManager.store_resultrWh$hh&}rX(h(]h)]h*]h+]h.]uh0Kh1hh]rYh:X&Store the result and status of a task.rZr[}r\(hjVhjTubaubh)r]}r^(hUhjPhNh$hh&}r_(h(]h)]h*]h+]h.]uh0Nh1hh]r`h)ra}rb(hUh&}rc(h(]h)]h*]h+]h.]uhj]h]rd(j)re}rf(hUh&}rg(h(]h)]h*]h+]h.]uhjah]rhh:X Parametersrirj}rk(hUhjeubah$j ubj )rl}rm(hUh&}rn(h(]h)]h*]h+]h.]uhjah]rocdocutils.nodes bullet_list rp)rq}rr(hUh&}rs(h(]h)]h*]h+]h.]uhjlh]rt(cdocutils.nodes list_item ru)rv}rw(hUh&}rx(h(]h)]h*]h+]h.]uhjqh]ryh)rz}r{(hUh&}r|(h(]h)]h*]h+]h.]uhjvh]r}(j)r~}r(hXtask_idh&}r(h(]h)]h*]h+]h.]uhjzh]rh:Xtask_idrr}r(hUhj~ubah$jubh:X -- rr}r(hUhjzubh:Xtask idrr}r(hXtask idrhjzubeh$hubah$U list_itemrubju)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjqh]rh)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh]r(j)r}r(hXresulth&}r(h(]h)]h*]h+]h.]uhjh]rh:Xresultrr}r(hUhjubah$jubh:X -- rr}r(hUhjubh:XJThe return value of the task, or an exception instance raised by the task.rr}r(hXJThe return value of the task, or an exception instance raised by the task.rhjubeh$hubah$jubju)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjqh]rh)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh]r(j)r}r(hXstatush&}r(h(]h)]h*]h+]h.]uhjh]rh:Xstatusrr}r(hUhjubah$jubh:X -- rr}r(hUhjubh:XTask status. See rr}r(hXTask status. See hjubh)r}r(hX,:meth:`celery.result.AsyncResult.get_status`rhjhNh$hh&}r(UreftypeXmethhhX$celery.result.AsyncResult.get_statusU refdomainXpyrh+]h*]U refexplicith(]h)]h.]hhhhdhhuh0Nh]rh)r}r(hjh&}r(h(]h)]r(hjXpy-methreh*]h+]h.]uhjh]rh:X&celery.result.AsyncResult.get_status()rr}r(hUhjubah$hubaubh:X& for a list of possible status values.rr}r(hX& for a list of possible status values.hjubeh$hubah$jubju)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjqh]rh)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh]r(j)r}r(hX tracebackh&}r(h(]h)]h*]h+]h.]uhjh]rh:X tracebackrr}r(hUhjubah$jubh:X -- rr}r(hUhjubh:X=The traceback at the point of exception (if the task failed).rr}r(hX=The traceback at the point of exception (if the task failed).rhjubeh$hubah$jubju)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjqh]rh)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh]r(j)r}r(hXexception_retry_counth&}r(h(]h)]h*]h+]h.]uhjh]rh:Xexception_retry_countrr}r(hUhjubah$jubh:X -- rr}r(hUhjubh:XHow many times to retry by transaction rollback on exception. This could theoretically happen in a race condition if another worker is trying to create the same task. The default is to retry twice.rr}r(hXHow many times to retry by transaction rollback on exception. This could theoretically happen in a race condition if another worker is trying to create the same task. The default is to retry twice.rhjubeh$hubah$jubeh$U bullet_listrubah$j"ubeh$j#ubaubeubeubeubeubh>)r}r(hUhhhNh$hBh&}r(h+]h*]h(]h)]h.]Uentries]r(hEX)TaskSetManager (class in celery.managers)h Utrauh0Nh1hh]ubhL)r}r(hUhhhNh$hOh&}r(hQhRXpyh+]h*]h(]h)]h.]hSXclassrhUjuh0Nh1hh]r(hW)r}r(hXTaskSetManager()rhjhhZh$h[h&}r(h+]rh ah^h Xcelery.managersrr}rbh*]h(]h)]h.]r h ahcXTaskSetManagerr heUhfuh0Nh1hh]r (hh)r }r (hXclass hjhhZh$hkh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh:Xclass rr}r(hUhj ubaubhq)r}r(hXcelery.managers.hjhhZh$hth&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh:Xcelery.managers.rr}r(hUhjubaubhz)r}r(hj hjhhZh$h}h&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh:XTaskSetManagerrr}r (hUhjubaubeubh)r!}r"(hUhjhhZh$hh&}r#(h(]h)]h*]h+]h.]uh0Nh1hh]r$(h)r%}r&(hX2Manager for :class:`celery.models.TaskSet` models.r'hj!hXs/var/build/user_builds/celery/checkouts/1.0-archived/celery/managers.py:docstring of celery.managers.TaskSetManagerr(h$hh&}r)(h(]h)]h*]h+]h.]uh0Kh1hh]r*(h:X Manager for r+r,}r-(hX Manager for hj%ubh)r.}r/(hX:class:`celery.models.TaskSet`r0hj%hNh$hh&}r1(UreftypeXclasshhXcelery.models.TaskSetU refdomainXpyr2h+]h*]U refexplicith(]h)]h.]hhhj hhuh0Nh]r3h)r4}r5(hj0h&}r6(h(]h)]r7(hj2Xpy-classr8eh*]h+]h.]uhj.h]r9h:Xcelery.models.TaskSetr:r;}r<(hUhj4ubah$hubaubh:X models.r=r>}r?(hX models.hj%ubeubh>)r@}rA(hUhj!hX/var/build/user_builds/celery/checkouts/1.0-archived/celery/managers.py:docstring of celery.managers.TaskSetManager.restore_tasksetrBh$hBh&}rC(h+]h*]h(]h)]h.]Uentries]rD(hEX9restore_taskset() (celery.managers.TaskSetManager method)h UtrEauh0Nh1hh]ubhL)rF}rG(hUhj!hjBh$hOh&}rH(hQhRXpyh+]h*]h(]h)]h.]hSXmethodrIhUjIuh0Nh1hh]rJ(hW)rK}rL(hX/TaskSetManager.restore_taskset(*args, **kwargs)hjFhhZh$h[h&}rM(h+]rNh ah^h Xcelery.managersrOrP}rQbh*]h(]h)]h.]rRh ahcXTaskSetManager.restore_tasksethej hfuh0Nh1hh]rS(hz)rT}rU(hXrestore_tasksethjKhhZh$h}h&}rV(h(]h)]h*]h+]h.]uh0Nh1hh]rWh:Xrestore_tasksetrXrY}rZ(hUhjTubaubh)r[}r\(hUhjKhhZh$hh&}r](h(]h)]h*]h+]h.]uh0Nh1hh]r^(h)r_}r`(hX*argsh&}ra(h(]h)]h*]h+]h.]uhj[h]rbh:X*argsrcrd}re(hUhj_ubah$hubh)rf}rg(hX**kwargsh&}rh(h(]h)]h*]h+]h.]uhj[h]rih:X**kwargsrjrk}rl(hUhjfubah$hubeubeubh)rm}rn(hUhjFhhZh$hh&}ro(h(]h)]h*]h+]h.]uh0Nh1hh]rph)rq}rr(hX,Get taskset meta for task by ``taskset_id``.hjmhjBh$hh&}rs(h(]h)]h*]h+]h.]uh0Kh1hh]rt(h:XGet taskset meta for task by rurv}rw(hXGet taskset meta for task by hjqubh)rx}ry(hX``taskset_id``h&}rz(h(]h)]h*]h+]h.]uhjqh]r{h:X taskset_idr|r}}r~(hUhjxubah$hubh:X.r}r(hX.hjqubeubaubeubh>)r}r(hUhj!hNh$hBh&}r(h+]h*]h(]h)]h.]Uentries]r(hEX6store_result() (celery.managers.TaskSetManager method)h Utrauh0Nh1hh]ubhL)r}r(hUhj!hNh$hOh&}r(hQhRXpyh+]h*]h(]h)]h.]hSXmethodrhUjuh0Nh1hh]r(hW)r}r(hX,TaskSetManager.store_result(*args, **kwargs)hjhhZh$h[h&}r(h+]rh ah^h Xcelery.managersrr}rbh*]h(]h)]h.]rh ahcXTaskSetManager.store_resulthej hfuh0Nh1hh]r(hz)r}r(hX store_resulthjhhZh$h}h&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh:X store_resultrr}r(hUhjubaubh)r}r(hUhjhhZh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]r(h)r}r(hX*argsh&}r(h(]h)]h*]h+]h.]uhjh]rh:X*argsrr}r(hUhjubah$hubh)r}r(hX**kwargsh&}r(h(]h)]h*]h+]h.]uhjh]rh:X**kwargsrr}r(hUhjubah$hubeubeubh)r}r(hUhjhhZh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]r(h)r}r(hXStore the result of a taskset.rhjhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/managers.py:docstring of celery.managers.TaskSetManager.store_resultrh$hh&}r(h(]h)]h*]h+]h.]uh0Kh1hh]rh:XStore the result of a taskset.rr}r(hjhjubaubh)r}r(hUhjhNh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh]r(j)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh]rh:X Parametersrr}r(hUhjubah$j ubj )r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh]rjp)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh]r(ju)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh]rh)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh]r(j)r}r(hX taskset_idh&}r(h(]h)]h*]h+]h.]uhjh]rh:X taskset_idrr}r(hUhjubah$jubh:X -- rr}r(hUhjubh:X task set idrr}r(hX task set idrhjubeh$hubah$jubju)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh]rh)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh]r(j)r}r(hXresulth&}r(h(]h)]h*]h+]h.]uhjh]rh:Xresultrr}r(hUhjubah$jubh:X -- rr}r(hUhjubh:XThe return value of the tasksetrr}r(hXThe return value of the tasksetrhjubeh$hubah$jubeh$jubah$j"ubeh$j#ubaubeubeubeubeubh>)r}r(hUhhhXv/var/build/user_builds/celery/checkouts/1.0-archived/celery/managers.py:docstring of celery.managers.transaction_retryrh$hBh&}r(h+]h*]h(]h)]h.]Uentries]r(hEX/transaction_retry() (in module celery.managers)hUtrauh0Nh1hh]ubhL)r}r(hUhhhjh$hOh&}r(hQhRXpyh+]h*]h(]h)]h.]hSXfunctionrhUjuh0Nh1hh]r(hW)r}r (hX transaction_retry(max_retries=1)r hjhhZh$h[h&}r (h+]r hah^h Xcelery.managersr r}rbh*]h(]h)]h.]rhahcXtransaction_retryrheUhfuh0Nh1hh]r(hq)r}r(hXcelery.managers.hjhhZh$hth&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh:Xcelery.managers.rr}r(hUhjubaubhz)r}r(hjhjhhZh$h}h&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh:Xtransaction_retryrr}r (hUhjubaubh)r!}r"(hUhjhhZh$hh&}r#(h(]h)]h*]h+]h.]uh0Nh1hh]r$h)r%}r&(hX max_retries=1h&}r'(h(]h)]h*]h+]h.]uhj!h]r(h:X max_retries=1r)r*}r+(hUhj%ubah$hubaubeubh)r,}r-(hUhjhhZh$hh&}r.(h(]h)]h*]h+]h.]uh0Nh1hh]r/(h)r0}r1(hX0Decorator for methods doing database operations.r2hj,hjh$hh&}r3(h(]h)]h*]h+]h.]uh0Kh1hh]r4h:X0Decorator for methods doing database operations.r5r6}r7(hj2hj0ubaubh)r8}r9(hX[If the database operation fails, it will retry the operation at most ``max_retries`` times.hj,hjh$hh&}r:(h(]h)]h*]h+]h.]uh0Kh1hh]r;(h:XEIf the database operation fails, it will retry the operation at most r<r=}r>(hXEIf the database operation fails, it will retry the operation at most hj8ubh)r?}r@(hX``max_retries``h&}rA(h(]h)]h*]h+]h.]uhj8h]rBh:X max_retriesrCrD}rE(hUhj?ubah$hubh:X times.rFrG}rH(hX times.hj8ubeubeubeubeubahUU transformerrINU footnote_refsrJ}rKUrefnamesrL}rMUsymbol_footnotesrN]rOUautofootnote_refsrP]rQUsymbol_footnote_refsrR]rSU citationsrT]rUh1hU current_linerVNUtransform_messagesrW]rXUreporterrYNUid_startrZKU autofootnotesr[]r\U citation_refsr]}r^Uindirect_targetsr_]r`Usettingsra(cdocutils.frontend Values rborc}rd(Ufootnote_backlinksreKUrecord_dependenciesrfNU rfc_base_urlrgUhttp://tools.ietf.org/html/rhU tracebackriUpep_referencesrjNUstrip_commentsrkNU toc_backlinksrlUentryrmU language_codernUenroU datestamprpNU report_levelrqKU _destinationrrNU halt_levelrsKU strip_classesrtNh7NUerror_encoding_error_handlerruUbackslashreplacervUdebugrwNUembed_stylesheetrxUoutput_encoding_error_handlerryUstrictrzU sectnum_xformr{KUdump_transformsr|NU docinfo_xformr}KUwarning_streamr~NUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUa/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.managers.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjzUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hhh-cdocutils.nodes target r)r}r(hUhhhhAh$Utargetrh&}r(h(]h+]rh-ah*]Uismodh)]h.]uh0Kh1hh]ubhjhhXh jKh jh j.h jhhuUsubstitution_namesr}rh$h1h&}r(h(]h+]h*]Usourceh"h)]h.]uU footnotesr]rUrefidsr}rub.PKXDD4PQcelery-1.0-archived/.doctrees/internals/reference/celery.backends.mongodb.doctreecdocutils.nodes document q)q}q(U nametypesq}qX*backend: mongodb - celery.backends.mongodbqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXi/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.mongodb.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U'backend-mongodb-celery-backends-mongodbq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX*Backend: MongoDB - celery.backends.mongodbq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X*Backend: MongoDB - celery.backends.mongodbq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/XBautodoc: failed to import module u'celery.backends.mongodb'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/backends/__init__.py", line 3, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUi/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.mongodb.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]qUfile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD!PccFcelery-1.0-archived/.doctrees/internals/reference/celery.utils.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xcelery.utils.retry_over_timeqXcelery.utils.noopqXcelery.utils.get_cls_by_nameqXcelery.utils.gen_unique_idq Xcelery.utils.get_full_cls_nameq Xcelery.utils.mattrgetterq Xcelery.utils.firstq Xcelery.utils.padlistq Xcelery.utils.fun_takes_kwargsqXcelery.utils.instantiateqXcelery.utils.chunksqXcelery.utils.mitemgetterqX&multiprocessing worker - celery.workerqNXcelery.utils.repeatlastquUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hhhhhhh h h h h h h h h h hhhhhhhhhU$multiprocessing-worker-celery-workerqhhuUchildrenq]qcdocutils.nodes section q )q!}q"(U rawsourceq#UUparentq$hUsourceq%cdocutils.nodes reprunicode q&X^/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.utils.rstq'q(}q)bUtagnameq*Usectionq+U attributesq,}q-(Udupnamesq.]Uclassesq/]Ubackrefsq0]Uidsq1]q2(Xmodule-celery.utilsq3heUnamesq4]q5hauUlineq6KUdocumentq7hh]q8(cdocutils.nodes title q9)q:}q;(h#X&Multiprocessing Worker - celery.workerq(h.]h/]h0]h1]h4]uh6Kh7hh]q?cdocutils.nodes Text q@X&Multiprocessing Worker - celery.workerqAqB}qC(h#hqGh*UindexqHh,}qI(h1]h0]h.]h/]h4]Uentries]qJ(UsingleqKXcelery.utils (module)Xmodule-celery.utilsUtqLauh6Kh7hh]ubhD)qM}qN(h#Uh$h!h%Xn/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/__init__.py:docstring of celery.utils.chunksqOh*hHh,}qP(h1]h0]h.]h/]h4]Uentries]qQ(hKX!chunks() (in module celery.utils)hUtqRauh6Nh7hh]ubcsphinx.addnodes desc qS)qT}qU(h#Uh$h!h%hOh*UdescqVh,}qW(UnoindexqXUdomainqYXpyh1]h0]h.]h/]h4]UobjtypeqZXfunctionq[Udesctypeq\h[uh6Nh7hh]q](csphinx.addnodes desc_signature q^)q_}q`(h#X chunks(it, n)h$hTh%U qah*Udesc_signatureqbh,}qc(h1]qdhaUmoduleqeh&X celery.utilsqfqg}qhbh0]h.]h/]h4]qihaUfullnameqjXchunksqkUclassqlUUfirstqmuh6Nh7hh]qn(csphinx.addnodes desc_addname qo)qp}qq(h#X celery.utils.h$h_h%hah*U desc_addnameqrh,}qs(h.]h/]h0]h1]h4]uh6Nh7hh]qth@X celery.utils.quqv}qw(h#Uh$hpubaubcsphinx.addnodes desc_name qx)qy}qz(h#hkh$h_h%hah*U desc_nameq{h,}q|(h.]h/]h0]h1]h4]uh6Nh7hh]q}h@Xchunksq~q}q(h#Uh$hyubaubcsphinx.addnodes desc_parameterlist q)q}q(h#Uh$h_h%hah*Udesc_parameterlistqh,}q(h.]h/]h0]h1]h4]uh6Nh7hh]q(csphinx.addnodes desc_parameter q)q}q(h#Xith,}q(h.]h/]h0]h1]h4]uh$hh]qh@Xitqq}q(h#Uh$hubah*Udesc_parameterqubh)q}q(h#Xnh,}q(h.]h/]h0]h1]h4]uh$hh]qh@Xnq}q(h#Uh$hubah*hubeubeubcsphinx.addnodes desc_content q)q}q(h#Uh$hTh%hah*U desc_contentqh,}q(h.]h/]h0]h1]h4]uh6Nh7hh]q(cdocutils.nodes paragraph q)q}q(h#X7Split an iterator into chunks with ``n`` elements each.h$hh%hOh*U paragraphqh,}q(h.]h/]h0]h1]h4]uh6Kh7hh]q(h@X#Split an iterator into chunks with qq}q(h#X#Split an iterator into chunks with h$hubcdocutils.nodes literal q)q}q(h#X``n``h,}q(h.]h/]h0]h1]h4]uh$hh]qh@Xnq}q(h#Uh$hubah*Uliteralqubh@X elements each.qq}q(h#X elements each.h$hubeubh)q}q(h#XExamplesqh$hh%hOh*hh,}q(h.]h/]h0]h1]h4]uh6Kh7hh]qh@XExamplesqq}q(h#hh$hubaubcdocutils.nodes block_quote q)q}q(h#Uh$hh%hOh*U block_quoteqh,}q(h.]h/]h0]h1]h4]uh6Nh7hh]q(h)q}q(h#X# n == 2 >>> x = chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 2) >>> list(x) [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10]]qh$hh%hOh*hh,}q(h.]h/]h0]h1]h4]uh6Kh]qh@X# n == 2 >>> x = chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 2) >>> list(x) [[0, 1], [2, 3], [4, 5], [6, 7], [8, 9], [10]]qÅq}q(h#hh$hubaubh)q}q(h#X{# n == 3 >>> x = chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 3) >>> list(x) [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10]]qh$hh%hOh*hh,}q(h.]h/]h0]h1]h4]uh6K h]qh@X{# n == 3 >>> x = chunks(iter([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), 3) >>> list(x) [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, 10]]q˅q}q(h#hh$hubaubeubeubeubhD)q}q(h#Uh$h!h%Xm/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/__init__.py:docstring of celery.utils.firstqh*hHh,}q(h1]h0]h.]h/]h4]Uentries]q(hKX first() (in module celery.utils)h Utqauh6Nh7hh]ubhS)q}q(h#Uh$h!h%hh*hVh,}q(hXhYXpyh1]h0]h.]h/]h4]hZXfunctionqh\huh6Nh7hh]q(h^)q}q(h#Xfirst(predicate, iterable)h$hh%hah*hbh,}q(h1]qh aheh&X celery.utilsq݅q}qbh0]h.]h/]h4]qh ahjXfirstqhlUhmuh6Nh7hh]q(ho)q}q(h#X celery.utils.h$hh%hah*hrh,}q(h.]h/]h0]h1]h4]uh6Nh7hh]qh@X celery.utils.q煁q}q(h#Uh$hubaubhx)q}q(h#hh$hh%hah*h{h,}q(h.]h/]h0]h1]h4]uh6Nh7hh]qh@Xfirstqq}q(h#Uh$hubaubh)q}q(h#Uh$hh%hah*hh,}q(h.]h/]h0]h1]h4]uh6Nh7hh]q(h)q}q(h#X predicateh,}q(h.]h/]h0]h1]h4]uh$hh]qh@X predicateqq}q(h#Uh$hubah*hubh)q}q(h#Xiterableh,}q(h.]h/]h0]h1]h4]uh$hh]qh@Xiterablerr}r(h#Uh$hubah*hubeubeubh)r}r(h#Uh$hh%hah*hh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh)r}r(h#XZReturns the first element in ``iterable`` that ``predicate`` returns a ``True`` value for.h$jh%hh*hh,}r (h.]h/]h0]h1]h4]uh6Kh7hh]r (h@XReturns the first element in r r }r (h#XReturns the first element in h$jubh)r}r(h#X ``iterable``h,}r(h.]h/]h0]h1]h4]uh$jh]rh@Xiterablerr}r(h#Uh$jubah*hubh@X that rr}r(h#X that h$jubh)r}r(h#X ``predicate``h,}r(h.]h/]h0]h1]h4]uh$jh]rh@X predicaterr}r(h#Uh$jubah*hubh@X returns a rr }r!(h#X returns a h$jubh)r"}r#(h#X``True``h,}r$(h.]h/]h0]h1]h4]uh$jh]r%h@XTruer&r'}r((h#Uh$j"ubah*hubh@X value for.r)r*}r+(h#X value for.h$jubeubaubeubhD)r,}r-(h#Uh$h!h%Xx/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/__init__.py:docstring of celery.utils.fun_takes_kwargsr.h*hHh,}r/(h1]h0]h.]h/]h4]Uentries]r0(hKX+fun_takes_kwargs() (in module celery.utils)hUtr1auh6Nh7hh]ubhS)r2}r3(h#Uh$h!h%j.h*hVh,}r4(hXhYXpyh1]h0]h.]h/]h4]hZXfunctionr5h\j5uh6Nh7hh]r6(h^)r7}r8(h#X fun_takes_kwargs(fun, kwlist=[])h$j2h%hah*hbh,}r9(h1]r:haheh&X celery.utilsr;r<}r=bh0]h.]h/]h4]r>hahjXfun_takes_kwargsr?hlUhmuh6Nh7hh]r@(ho)rA}rB(h#X celery.utils.h$j7h%hah*hrh,}rC(h.]h/]h0]h1]h4]uh6Nh7hh]rDh@X celery.utils.rErF}rG(h#Uh$jAubaubhx)rH}rI(h#j?h$j7h%hah*h{h,}rJ(h.]h/]h0]h1]h4]uh6Nh7hh]rKh@Xfun_takes_kwargsrLrM}rN(h#Uh$jHubaubh)rO}rP(h#Uh$j7h%hah*hh,}rQ(h.]h/]h0]h1]h4]uh6Nh7hh]rR(h)rS}rT(h#Xfunh,}rU(h.]h/]h0]h1]h4]uh$jOh]rVh@XfunrWrX}rY(h#Uh$jSubah*hubh)rZ}r[(h#Xkwlist=h,}r\(h.]h/]h0]h1]h4]uh$jOh]r]h@Xkwlist=r^r_}r`(h#Uh$jZubah*hubcsphinx.addnodes desc_optional ra)rb}rc(h#Uh,}rd(h.]h/]h0]h1]h4]uh$jOh]h*U desc_optionalreubeubeubh)rf}rg(h#Uh$j2h%hah*hh,}rh(h.]h/]h0]h1]h4]uh6Nh7hh]ri(h)rj}rk(h#XiWith a function, and a list of keyword arguments, returns arguments in the list which the function takes.rlh$jfh%j.h*hh,}rm(h.]h/]h0]h1]h4]uh6Kh7hh]rnh@XiWith a function, and a list of keyword arguments, returns arguments in the list which the function takes.rorp}rq(h#jlh$jjubaubh)rr}rs(h#XwIf the object has an ``argspec`` attribute that is used instead of using the :meth:`inspect.getargspec`` introspection.h$jfh%j.h*hh,}rt(h.]h/]h0]h1]h4]uh6Kh7hh]ru(h@XIf the object has an rvrw}rx(h#XIf the object has an h$jrubh)ry}rz(h#X ``argspec``h,}r{(h.]h/]h0]h1]h4]uh$jrh]r|h@Xargspecr}r~}r(h#Uh$jyubah*hubh@X- attribute that is used instead of using the rr}r(h#X- attribute that is used instead of using the h$jrubcsphinx.addnodes pending_xref r)r}r(h#X:meth:`inspect.getargspec``rh$jrh%Nh*U pending_xrefrh,}r(UreftypeXmethUrefwarnrU reftargetrXinspect.getargspec`U refdomainXpyrh1]h0]U refexplicith.]h/]h4]UrefdocrX internals/reference/celery.utilsrUpy:classrNU py:modulerX celery.utilsruh6Nh]rh)r}r(h#jh,}r(h.]h/]r(UxrefrjXpy-methreh0]h1]h4]uh$jh]rh@Xinspect.getargspec`()rr}r(h#Uh$jubah*hubaubh@X introspection.rr}r(h#X introspection.h$jrubeubcdocutils.nodes field_list r)r}r(h#Uh$jfh%j.h*U field_listrh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rcdocutils.nodes field r)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]r(cdocutils.nodes field_name r)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]rh@X Parametersrr}r(h#Uh$jubah*U field_namerubcdocutils.nodes field_body r)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]rcdocutils.nodes bullet_list r)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]r(cdocutils.nodes list_item r)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]rh)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]r(cdocutils.nodes strong r)r}r(h#Xfunh,}r(h.]h/]h0]h1]h4]uh$jh]rh@Xfunrr}r(h#Uh$jubah*Ustrongrubh@X -- rr}r(h#Uh$jubh@X%The function to inspect arguments of.rr}r(h#X%The function to inspect arguments of.h$jubeh*hubah*U list_itemrubj)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]rh)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]r(j)r}r(h#Xkwlisth,}r(h.]h/]h0]h1]h4]uh$jh]rh@Xkwlistrr}r(h#Uh$jubah*jubh@X -- rr}r(h#Uh$jubh@XThe list of keyword arguments.rr}r(h#XThe list of keyword arguments.h$jubeh*hubah*jubeh*U bullet_listrubah*U field_bodyrubeh*Ufieldrubaubh)r}r(h#XExamplesrh$jfh%j.h*hh,}r(h.]h/]h0]h1]h4]uh6K h7hh]rh@XExamplesrr}r(h#jh$jubaubcdocutils.nodes doctest_block r)r}r(h#X>>> def foo(self, x, y, logfile=None, loglevel=None): ... return x * y >>> fun_takes_kwargs(foo, ["logfile", "loglevel", "task_id"]) ["logfile", "loglevel"]h$jfh%Nh*U doctest_blockrh,}r(U xml:spacerUpreserverh1]h0]h.]h/]h4]uh6Nh7hh]rh@X>>> def foo(self, x, y, logfile=None, loglevel=None): ... return x * y >>> fun_takes_kwargs(foo, ["logfile", "loglevel", "task_id"]) ["logfile", "loglevel"]rr}r(h#Uh$jubaubj)r}r(h#X>>> def foo(self, x, y, **kwargs): >>> fun_takes_kwargs(foo, ["logfile", "loglevel", "task_id"]) ["logfile", "loglevel", "task_id"]h$jfh%Nh*jh,}r(jjh1]h0]h.]h/]h4]uh6Nh7hh]rh@X>>> def foo(self, x, y, **kwargs): >>> fun_takes_kwargs(foo, ["logfile", "loglevel", "task_id"]) ["logfile", "loglevel", "task_id"]rr}r(h#Uh$jubaubeubeubhD)r}r (h#Uh$h!h%Xu/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/__init__.py:docstring of celery.utils.gen_unique_idr h*hHh,}r (h1]h0]h.]h/]h4]Uentries]r (hKX(gen_unique_id() (in module celery.utils)h Utr auh6Nh7hh]ubhS)r}r(h#Uh$h!h%j h*hVh,}r(hXhYXpyh1]h0]h.]h/]h4]hZXfunctionrh\juh6Nh7hh]r(h^)r}r(h#Xgen_unique_id()h$jh%hah*hbh,}r(h1]rh aheh&X celery.utilsrr}rbh0]h.]h/]h4]rh ahjX gen_unique_idrhlUhmuh6Nh7hh]r(ho)r}r(h#X celery.utils.h$jh%hah*hrh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]r h@X celery.utils.r!r"}r#(h#Uh$jubaubhx)r$}r%(h#jh$jh%hah*h{h,}r&(h.]h/]h0]h1]h4]uh6Nh7hh]r'h@X gen_unique_idr(r)}r*(h#Uh$j$ubaubh)r+}r,(h#Uh$jh%hah*hh,}r-(h.]h/]h0]h1]h4]uh6Nh7hh]ubeubh)r.}r/(h#Uh$jh%hah*hh,}r0(h.]h/]h0]h1]h4]uh6Nh7hh]r1(h)r2}r3(h#XMGenerate a unique id, having - hopefully - a very small chance of collission.r4h$j.h%j h*hh,}r5(h.]h/]h0]h1]h4]uh6Kh7hh]r6h@XMGenerate a unique id, having - hopefully - a very small chance of collission.r7r8}r9(h#j4h$j2ubaubh)r:}r;(h#X/For now this is provided by :func:`uuid.uuid4`.h$j.h%j h*hh,}r<(h.]h/]h0]h1]h4]uh6Kh7hh]r=(h@XFor now this is provided by r>r?}r@(h#XFor now this is provided by h$j:ubj)rA}rB(h#X:func:`uuid.uuid4`rCh$j:h%Nh*jh,}rD(UreftypeXfuncjjX uuid.uuid4U refdomainXpyrEh1]h0]U refexplicith.]h/]h4]jjjNjjuh6Nh]rFh)rG}rH(h#jCh,}rI(h.]h/]rJ(jjEXpy-funcrKeh0]h1]h4]uh$jAh]rLh@X uuid.uuid4()rMrN}rO(h#Uh$jGubah*hubaubh@X.rP}rQ(h#X.h$j:ubeubeubeubhD)rR}rS(h#Uh$h!h%Xw/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/__init__.py:docstring of celery.utils.get_cls_by_namerTh*hHh,}rU(h1]h0]h.]h/]h4]Uentries]rV(hKX*get_cls_by_name() (in module celery.utils)hUtrWauh6Nh7hh]ubhS)rX}rY(h#Uh$h!h%jTh*hVh,}rZ(hXhYXpyh1]h0]h.]h/]h4]hZXfunctionr[h\j[uh6Nh7hh]r\(h^)r]}r^(h#X!get_cls_by_name(name, aliases={})h$jXh%hah*hbh,}r_(h1]r`haheh&X celery.utilsrarb}rcbh0]h.]h/]h4]rdhahjXget_cls_by_namerehlUhmuh6Nh7hh]rf(ho)rg}rh(h#X celery.utils.h$j]h%hah*hrh,}ri(h.]h/]h0]h1]h4]uh6Nh7hh]rjh@X celery.utils.rkrl}rm(h#Uh$jgubaubhx)rn}ro(h#jeh$j]h%hah*h{h,}rp(h.]h/]h0]h1]h4]uh6Nh7hh]rqh@Xget_cls_by_namerrrs}rt(h#Uh$jnubaubh)ru}rv(h#Uh$j]h%hah*hh,}rw(h.]h/]h0]h1]h4]uh6Nh7hh]rx(h)ry}rz(h#Xnameh,}r{(h.]h/]h0]h1]h4]uh$juh]r|h@Xnamer}r~}r(h#Uh$jyubah*hubh)r}r(h#X aliases={}h,}r(h.]h/]h0]h1]h4]uh$juh]rh@X aliases={}rr}r(h#Uh$jubah*hubeubeubh)r}r(h#Uh$jXh%hah*hh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]r(h)r}r(h#XGet class by name.rh$jh%jTh*hh,}r(h.]h/]h0]h1]h4]uh6Kh7hh]rh@XGet class by name.rr}r(h#jh$jubaubh)r}r(h#X=The name should be the full dot-separated path to the class::h$jh%jTh*hh,}r(h.]h/]h0]h1]h4]uh6Kh7hh]rh@X<The name should be the full dot-separated path to the class:rr}r(h#X<The name should be the full dot-separated path to the class:h$jubaubcdocutils.nodes literal_block r)r}r(h#Xmodulename.ClassNameh$jh%jTh*U literal_blockrh,}r(jjh1]h0]h.]h/]h4]uh6KHh7hh]rh@Xmodulename.ClassNamerr}r(h#Uh$jubaubh)r}r(h#X Example::h$jh%jTh*hh,}r(h.]h/]h0]h1]h4]uh6Kh7hh]rh@XExample:rr}r(h#XExample:h$jubaubj)r}r(h#X<celery.worker.pool.TaskPool ^- class nameh$jh%jTh*jh,}r(jjh1]h0]h.]h/]h4]uh6KLh7hh]rh@X<celery.worker.pool.TaskPool ^- class namerr}r(h#Uh$jubaubh)r}r(h#XxIf ``aliases`` is provided, a dict containing short name/long name mappings, the name is looked up in the aliases first.h$jh%jTh*hh,}r(h.]h/]h0]h1]h4]uh6K h7hh]r(h@XIf rr}r(h#XIf h$jubh)r}r(h#X ``aliases``h,}r(h.]h/]h0]h1]h4]uh$jh]rh@Xaliasesrr}r(h#Uh$jubah*hubh@Xj is provided, a dict containing short name/long name mappings, the name is looked up in the aliases first.rr}r(h#Xj is provided, a dict containing short name/long name mappings, the name is looked up in the aliases first.h$jubeubh)r}r(h#X Examples:rh$jh%jTh*hh,}r(h.]h/]h0]h1]h4]uh6Kh7hh]rh@X Examples:rr}r(h#jh$jubaubh)r}r(h#Uh$jh%jTh*hh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]r(j)r}r(h#XX>>> get_cls_by_name("celery.worker.pool.TaskPool") h,}r(jjh1]h0]h.]h/]h4]uh$jh]rh@XX>>> get_cls_by_name("celery.worker.pool.TaskPool") rr}r(h#Uh$jubah*jubj)r}r(h#Xy>>> get_cls_by_name("default", { ... "default": "celery.worker.pool.TaskPool"}) h,}r(jjh1]h0]h.]h/]h4]uh$jh]rh@Xy>>> get_cls_by_name("default", { ... "default": "celery.worker.pool.TaskPool"}) rr}r(h#Uh$jubah*jubh)r}r(h#X# Does not try to look up non-string names. >>> from celery.worker.pool import TaskPool >>> get_cls_by_name(TaskPool) is TaskPool Truerh$jh%jTh*hh,}r(h.]h/]h0]h1]h4]uh6Kh]rh@X# Does not try to look up non-string names. >>> from celery.worker.pool import TaskPool >>> get_cls_by_name(TaskPool) is TaskPool Truerr}r(h#jh$jubaubeubeubeubhD)r}r(h#Uh$h!h%Xy/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/__init__.py:docstring of celery.utils.get_full_cls_namerh*hHh,}r(h1]h0]h.]h/]h4]Uentries]r(hKX,get_full_cls_name() (in module celery.utils)h Utrauh6Nh7hh]ubhS)r}r(h#Uh$h!h%jh*hVh,}r(hXhYXpyh1]h0]h.]h/]h4]hZXfunctionrh\juh6Nh7hh]r(h^)r}r(h#Xget_full_cls_name(cls)h$jh%hah*hbh,}r(h1]rh aheh&X celery.utilsrr}rbh0]h.]h/]h4]rh ahjXget_full_cls_namerhlUhmuh6Nh7hh]r(ho)r}r(h#X celery.utils.h$jh%hah*hrh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh@X celery.utils.rr}r(h#Uh$jubaubhx)r}r(h#jh$jh%hah*h{h,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh@Xget_full_cls_namerr}r(h#Uh$jubaubh)r}r(h#Uh$jh%hah*hh,}r (h.]h/]h0]h1]h4]uh6Nh7hh]r h)r }r (h#Xclsh,}r (h.]h/]h0]h1]h4]uh$jh]rh@Xclsrr}r(h#Uh$j ubah*hubaubeubh)r}r(h#Uh$jh%hah*hh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh)r}r(h#X1With a class, get its full module and class name.rh$jh%jh*hh,}r(h.]h/]h0]h1]h4]uh6Kh7hh]rh@X1With a class, get its full module and class name.rr}r(h#jh$jubaubaubeubhD)r}r(h#Uh$h!h%Xs/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/__init__.py:docstring of celery.utils.instantiater h*hHh,}r!(h1]h0]h.]h/]h4]Uentries]r"(hKX&instantiate() (in module celery.utils)hUtr#auh6Nh7hh]ubhS)r$}r%(h#Uh$h!h%j h*hVh,}r&(hXhYXpyh1]h0]h.]h/]h4]hZXfunctionr'h\j'uh6Nh7hh]r((h^)r)}r*(h#X"instantiate(name, *args, **kwargs)h$j$h%hah*hbh,}r+(h1]r,haheh&X celery.utilsr-r.}r/bh0]h.]h/]h4]r0hahjX instantiater1hlUhmuh6Nh7hh]r2(ho)r3}r4(h#X celery.utils.h$j)h%hah*hrh,}r5(h.]h/]h0]h1]h4]uh6Nh7hh]r6h@X celery.utils.r7r8}r9(h#Uh$j3ubaubhx)r:}r;(h#j1h$j)h%hah*h{h,}r<(h.]h/]h0]h1]h4]uh6Nh7hh]r=h@X instantiater>r?}r@(h#Uh$j:ubaubh)rA}rB(h#Uh$j)h%hah*hh,}rC(h.]h/]h0]h1]h4]uh6Nh7hh]rD(h)rE}rF(h#Xnameh,}rG(h.]h/]h0]h1]h4]uh$jAh]rHh@XnamerIrJ}rK(h#Uh$jEubah*hubh)rL}rM(h#X*argsh,}rN(h.]h/]h0]h1]h4]uh$jAh]rOh@X*argsrPrQ}rR(h#Uh$jLubah*hubh)rS}rT(h#X**kwargsh,}rU(h.]h/]h0]h1]h4]uh$jAh]rVh@X**kwargsrWrX}rY(h#Uh$jSubah*hubeubeubh)rZ}r[(h#Uh$j$h%hah*hh,}r\(h.]h/]h0]h1]h4]uh6Nh7hh]r](h)r^}r_(h#XInstantiate class by name.r`h$jZh%j h*hh,}ra(h.]h/]h0]h1]h4]uh6Kh7hh]rbh@XInstantiate class by name.rcrd}re(h#j`h$j^ubaubh)rf}rg(h#XSee :func:`get_cls_by_name`.h$jZh%j h*hh,}rh(h.]h/]h0]h1]h4]uh6Kh7hh]ri(h@XSee rjrk}rl(h#XSee h$jfubj)rm}rn(h#X:func:`get_cls_by_name`roh$jfh%Nh*jh,}rp(UreftypeXfuncjjXget_cls_by_nameU refdomainXpyrqh1]h0]U refexplicith.]h/]h4]jjjNjjuh6Nh]rrh)rs}rt(h#joh,}ru(h.]h/]rv(jjqXpy-funcrweh0]h1]h4]uh$jmh]rxh@Xget_cls_by_name()ryrz}r{(h#Uh$jsubah*hubaubh@X.r|}r}(h#X.h$jfubeubeubeubhD)r~}r(h#Uh$h!h%Xs/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/__init__.py:docstring of celery.utils.mattrgetterrh*hHh,}r(h1]h0]h.]h/]h4]Uentries]r(hKX&mattrgetter() (in module celery.utils)h Utrauh6Nh7hh]ubhS)r}r(h#Uh$h!h%jh*hVh,}r(hXhYXpyh1]h0]h.]h/]h4]hZXfunctionrh\juh6Nh7hh]r(h^)r}r(h#Xmattrgetter(*attrs)h$jh%hah*hbh,}r(h1]rh aheh&X celery.utilsrr}rbh0]h.]h/]h4]rh ahjX mattrgetterrhlUhmuh6Nh7hh]r(ho)r}r(h#X celery.utils.h$jh%hah*hrh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh@X celery.utils.rr}r(h#Uh$jubaubhx)r}r(h#jh$jh%hah*h{h,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh@X mattrgetterrr}r(h#Uh$jubaubh)r}r(h#Uh$jh%hah*hh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh)r}r(h#X*attrsh,}r(h.]h/]h0]h1]h4]uh$jh]rh@X*attrsrr}r(h#Uh$jubah*hubaubeubh)r}r(h#Uh$jh%hah*hh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh)r}r(h#XuLike :func:`operator.itemgetter` but returns ``None`` on missing attributes instead of raising :exc:`AttributeError`.h$jh%jh*hh,}r(h.]h/]h0]h1]h4]uh6Kh7hh]r(h@XLike rr}r(h#XLike h$jubj)r}r(h#X:func:`operator.itemgetter`rh$jh%Nh*jh,}r(UreftypeXfuncjjXoperator.itemgetterU refdomainXpyrh1]h0]U refexplicith.]h/]h4]jjjNjjuh6Nh]rh)r}r(h#jh,}r(h.]h/]r(jjXpy-funcreh0]h1]h4]uh$jh]rh@Xoperator.itemgetter()rr}r(h#Uh$jubah*hubaubh@X but returns rr}r(h#X but returns h$jubh)r}r(h#X``None``h,}r(h.]h/]h0]h1]h4]uh$jh]rh@XNonerr}r(h#Uh$jubah*hubh@X* on missing attributes instead of raising rr}r(h#X* on missing attributes instead of raising h$jubj)r}r(h#X:exc:`AttributeError`rh$jh%Nh*jh,}r(UreftypeXexcjjXAttributeErrorU refdomainXpyrh1]h0]U refexplicith.]h/]h4]jjjNjjuh6Nh]rh)r}r(h#jh,}r(h.]h/]r(jjXpy-excreh0]h1]h4]uh$jh]rh@XAttributeErrorrr}r(h#Uh$jubah*hubaubh@X.r}r(h#X.h$jubeubaubeubhD)r}r(h#Uh$h!h%Xs/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/__init__.py:docstring of celery.utils.mitemgetterrh*hHh,}r(h1]h0]h.]h/]h4]Uentries]r(hKX&mitemgetter() (in module celery.utils)hUtrauh6Nh7hh]ubhS)r}r(h#Uh$h!h%jh*hVh,}r(hXhYXpyh1]h0]h.]h/]h4]hZXfunctionrh\juh6Nh7hh]r(h^)r}r(h#Xmitemgetter(*items)h$jh%hah*hbh,}r(h1]rhaheh&X celery.utilsrr}rbh0]h.]h/]h4]rhahjX mitemgetterrhlUhmuh6Nh7hh]r(ho)r}r(h#X celery.utils.h$jh%hah*hrh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh@X celery.utils.rr}r(h#Uh$jubaubhx)r}r(h#jh$jh%hah*h{h,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh@X mitemgetterrr}r(h#Uh$jubaubh)r}r(h#Uh$jh%hah*hh,}r (h.]h/]h0]h1]h4]uh6Nh7hh]r h)r }r (h#X*itemsh,}r (h.]h/]h0]h1]h4]uh$jh]rh@X*itemsrr}r(h#Uh$j ubah*hubaubeubh)r}r(h#Uh$jh%hah*hh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh)r}r(h#XjLike :func:`operator.itemgetter` but returns ``None`` on missing items instead of raising :exc:`KeyError`.h$jh%jh*hh,}r(h.]h/]h0]h1]h4]uh6Kh7hh]r(h@XLike rr}r(h#XLike h$jubj)r}r(h#X:func:`operator.itemgetter`rh$jh%Nh*jh,}r (UreftypeXfuncjjXoperator.itemgetterU refdomainXpyr!h1]h0]U refexplicith.]h/]h4]jjjNjjuh6Nh]r"h)r#}r$(h#jh,}r%(h.]h/]r&(jj!Xpy-funcr'eh0]h1]h4]uh$jh]r(h@Xoperator.itemgetter()r)r*}r+(h#Uh$j#ubah*hubaubh@X but returns r,r-}r.(h#X but returns h$jubh)r/}r0(h#X``None``h,}r1(h.]h/]h0]h1]h4]uh$jh]r2h@XNoner3r4}r5(h#Uh$j/ubah*hubh@X% on missing items instead of raising r6r7}r8(h#X% on missing items instead of raising h$jubj)r9}r:(h#X:exc:`KeyError`r;h$jh%Nh*jh,}r<(UreftypeXexcjjXKeyErrorU refdomainXpyr=h1]h0]U refexplicith.]h/]h4]jjjNjjuh6Nh]r>h)r?}r@(h#j;h,}rA(h.]h/]rB(jj=Xpy-excrCeh0]h1]h4]uh$j9h]rDh@XKeyErrorrErF}rG(h#Uh$j?ubah*hubaubh@X.rH}rI(h#X.h$jubeubaubeubhD)rJ}rK(h#Uh$h!h%Xl/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/__init__.py:docstring of celery.utils.nooprLh*hHh,}rM(h1]h0]h.]h/]h4]Uentries]rN(hKXnoop() (in module celery.utils)hUtrOauh6Nh7hh]ubhS)rP}rQ(h#Uh$h!h%jLh*hVh,}rR(hXhYXpyh1]h0]h.]h/]h4]hZXfunctionrSh\jSuh6Nh7hh]rT(h^)rU}rV(h#Xnoop(*args, **kwargs)h$jPh%hah*hbh,}rW(h1]rXhaheh&X celery.utilsrYrZ}r[bh0]h.]h/]h4]r\hahjXnoopr]hlUhmuh6Nh7hh]r^(ho)r_}r`(h#X celery.utils.h$jUh%hah*hrh,}ra(h.]h/]h0]h1]h4]uh6Nh7hh]rbh@X celery.utils.rcrd}re(h#Uh$j_ubaubhx)rf}rg(h#j]h$jUh%hah*h{h,}rh(h.]h/]h0]h1]h4]uh6Nh7hh]rih@Xnooprjrk}rl(h#Uh$jfubaubh)rm}rn(h#Uh$jUh%hah*hh,}ro(h.]h/]h0]h1]h4]uh6Nh7hh]rp(h)rq}rr(h#X*argsh,}rs(h.]h/]h0]h1]h4]uh$jmh]rth@X*argsrurv}rw(h#Uh$jqubah*hubh)rx}ry(h#X**kwargsh,}rz(h.]h/]h0]h1]h4]uh$jmh]r{h@X**kwargsr|r}}r~(h#Uh$jxubah*hubeubeubh)r}r(h#Uh$jPh%hah*hh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]r(h)r}r(h#X No operation.rh$jh%jLh*hh,}r(h.]h/]h0]h1]h4]uh6Kh7hh]rh@X No operation.rr}r(h#jh$jubaubh)r}r(h#X7Takes any arguments/keyword arguments and does nothing.rh$jh%jLh*hh,}r(h.]h/]h0]h1]h4]uh6Kh7hh]rh@X7Takes any arguments/keyword arguments and does nothing.rr}r(h#jh$jubaubeubeubhD)r}r(h#Uh$h!h%Xo/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/__init__.py:docstring of celery.utils.padlistrh*hHh,}r(h1]h0]h.]h/]h4]Uentries]r(hKX"padlist() (in module celery.utils)h Utrauh6Nh7hh]ubhS)r}r(h#Uh$h!h%jh*hVh,}r(hXhYXpyh1]h0]h.]h/]h4]hZXfunctionrh\juh6Nh7hh]r(h^)r}r(h#X&padlist(container, size, default=None)h$jh%hah*hbh,}r(h1]rh aheh&X celery.utilsrr}rbh0]h.]h/]h4]rh ahjXpadlistrhlUhmuh6Nh7hh]r(ho)r}r(h#X celery.utils.h$jh%hah*hrh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh@X celery.utils.rr}r(h#Uh$jubaubhx)r}r(h#jh$jh%hah*h{h,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh@Xpadlistrr}r(h#Uh$jubaubh)r}r(h#Uh$jh%hah*hh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]r(h)r}r(h#X containerh,}r(h.]h/]h0]h1]h4]uh$jh]rh@X containerrr}r(h#Uh$jubah*hubh)r}r(h#Xsizeh,}r(h.]h/]h0]h1]h4]uh$jh]rh@Xsizerr}r(h#Uh$jubah*hubh)r}r(h#X default=Noneh,}r(h.]h/]h0]h1]h4]uh$jh]rh@X default=Nonerr}r(h#Uh$jubah*hubeubeubh)r}r(h#Uh$jh%hah*hh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]r(h)r}r(h#XPad list with default elements.rh$jh%jh*hh,}r(h.]h/]h0]h1]h4]uh6Kh7hh]rh@XPad list with default elements.rr}r(h#jh$jubaubh)r}r(h#X Examples:rh$jh%jh*hh,}r(h.]h/]h0]h1]h4]uh6Kh7hh]rh@X Examples:rr}r(h#jh$jubaubj)r}r(h#Xh>>> first, last, city = padlist(["George", "Constanza", "NYC"], 3) ("George", "Constanza", "NYC") >>> first, last, city = padlist(["George", "Constanza"], 3) ("George", "Constanza", None) >>> first, last, city, planet = padlist(["George", "Constanza", "NYC"], 4, default="Earth") ("George", "Constanza", "NYC", "Earth")h$jh%Nh*jh,}r(jjh1]h0]h.]h/]h4]uh6Nh7hh]rh@Xh>>> first, last, city = padlist(["George", "Constanza", "NYC"], 3) ("George", "Constanza", "NYC") >>> first, last, city = padlist(["George", "Constanza"], 3) ("George", "Constanza", None) >>> first, last, city, planet = padlist(["George", "Constanza", "NYC"], 4, default="Earth") ("George", "Constanza", "NYC", "Earth")rr}r(h#Uh$jubaubeubeubhD)r}r(h#Uh$h!h%Xr/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/__init__.py:docstring of celery.utils.repeatlastrh*hHh,}r(h1]h0]h.]h/]h4]Uentries]r(hKX%repeatlast() (in module celery.utils)hUtrauh6Nh7hh]ubhS)r}r(h#Uh$h!h%jh*hVh,}r(hXhYXpyh1]h0]h.]h/]h4]hZXfunctionrh\juh6Nh7hh]r(h^)r}r(h#Xrepeatlast(it)h$jh%hah*hbh,}r(h1]rhaheh&X celery.utilsrr}rbh0]h.]h/]h4]rhahjX repeatlastrhlUhmuh6Nh7hh]r(ho)r}r(h#X celery.utils.h$jh%hah*hrh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh@X celery.utils.rr}r(h#Uh$jubaubhx)r}r(h#jh$jh%hah*h{h,}r(h.]h/]h0]h1]h4]uh6Nh7hh]r h@X repeatlastr r }r (h#Uh$jubaubh)r }r(h#Uh$jh%hah*hh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh)r}r(h#Xith,}r(h.]h/]h0]h1]h4]uh$j h]rh@Xitrr}r(h#Uh$jubah*hubaubeubh)r}r(h#Uh$jh%hah*hh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rh)r}r(h#XbIterate over all elements in the iterator, and when its exhausted yield the last value infinitely.rh$jh%jh*hh,}r(h.]h/]h0]h1]h4]uh6Kh7hh]r h@XbIterate over all elements in the iterator, and when its exhausted yield the last value infinitely.r!r"}r#(h#jh$jubaubaubeubhD)r$}r%(h#Uh$h!h%Nh*hHh,}r&(h1]h0]h.]h/]h4]Uentries]r'(hKX*retry_over_time() (in module celery.utils)hUtr(auh6Nh7hh]ubhS)r)}r*(h#Uh$h!h%Nh*hVh,}r+(hXhYXpyh1]h0]h.]h/]h4]hZXfunctionr,h\j,uh6Nh7hh]r-(h^)r.}r/(h#Xretry_over_time(fun, catch, args=[], kwargs={}, errback=, max_retries=None, interval_start=2, interval_step=2, interval_max=30)h$j)h%hah*hbh,}r0(h1]r1haheh&X celery.utilsr2r3}r4bh0]h.]h/]h4]r5hahjXretry_over_timer6hlUhmuh6Nh7hh]r7(ho)r8}r9(h#X celery.utils.h$j.h%hah*hrh,}r:(h.]h/]h0]h1]h4]uh6Nh7hh]r;h@X celery.utils.r<r=}r>(h#Uh$j8ubaubhx)r?}r@(h#j6h$j.h%hah*h{h,}rA(h.]h/]h0]h1]h4]uh6Nh7hh]rBh@Xretry_over_timerCrD}rE(h#Uh$j?ubaubh)rF}rG(h#Uh$j.h%hah*hh,}rH(h.]h/]h0]h1]h4]uh6Nh7hh]rI(h)rJ}rK(h#Xfunh,}rL(h.]h/]h0]h1]h4]uh$jFh]rMh@XfunrNrO}rP(h#Uh$jJubah*hubh)rQ}rR(h#Xcatchh,}rS(h.]h/]h0]h1]h4]uh$jFh]rTh@XcatchrUrV}rW(h#Uh$jQubah*hubh)rX}rY(h#Xargs=h,}rZ(h.]h/]h0]h1]h4]uh$jFh]r[h@Xargs=r\r]}r^(h#Uh$jXubah*hubja)r_}r`(h#Uh,}ra(h.]h/]h0]h1]h4]uh$jFh]h*jeubh)rb}rc(h#X kwargs={}h,}rd(h.]h/]h0]h1]h4]uh$jFh]reh@X kwargs={}rfrg}rh(h#Uh$jbubah*hubh)ri}rj(h#X$errback=h,}rk(h.]h/]h0]h1]h4]uh$jFh]rlh@X$errback=rmrn}ro(h#Uh$jiubah*hubh)rp}rq(h#Xmax_retries=Noneh,}rr(h.]h/]h0]h1]h4]uh$jFh]rsh@Xmax_retries=Nonertru}rv(h#Uh$jpubah*hubh)rw}rx(h#Xinterval_start=2h,}ry(h.]h/]h0]h1]h4]uh$jFh]rzh@Xinterval_start=2r{r|}r}(h#Uh$jwubah*hubh)r~}r(h#Xinterval_step=2h,}r(h.]h/]h0]h1]h4]uh$jFh]rh@Xinterval_step=2rr}r(h#Uh$j~ubah*hubh)r}r(h#Xinterval_max=30h,}r(h.]h/]h0]h1]h4]uh$jFh]rh@Xinterval_max=30rr}r(h#Uh$jubah*hubeubeubh)r}r(h#Uh$j)h%hah*hh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]r(h)r}r(h#X?Retry the function over and over until max retries is exceeded.rh$jh%Xw/var/build/user_builds/celery/checkouts/1.0-archived/celery/utils/__init__.py:docstring of celery.utils.retry_over_timerh*hh,}r(h.]h/]h0]h1]h4]uh6Kh7hh]rh@X?Retry the function over and over until max retries is exceeded.rr}r(h#jh$jubaubh)r}r(h#XFor each retry we sleep a for a while before we try again, this interval is increased for every retry until the max seconds is reached.rh$jh%jh*hh,}r(h.]h/]h0]h1]h4]uh6Kh7hh]rh@XFor each retry we sleep a for a while before we try again, this interval is increased for every retry until the max seconds is reached.rr}r(h#jh$jubaubj)r}r(h#Uh$jh%Nh*jh,}r(h.]h/]h0]h1]h4]uh6Nh7hh]rj)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]r(j)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]rh@X Parametersrr}r(h#Uh$jubah*jubj)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]rj)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]r(j)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]rh)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]r(j)r}r(h#Xfunh,}r(h.]h/]h0]h1]h4]uh$jh]rh@Xfunrr}r(h#Uh$jubah*jubh@X -- rr}r(h#Uh$jubh@XThe function to tryrr}r(h#XThe function to tryrh$jubeh*hubah*jubj)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]rh)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]r(j)r}r(h#Xcatchh,}r(h.]h/]h0]h1]h4]uh$jh]rh@Xcatchrr}r(h#Uh$jubah*jubh@X -- rr}r(h#Uh$jubh@XEExceptions to catch, can be either tuple or a single exception class.rr}r(h#XEExceptions to catch, can be either tuple or a single exception class.rh$jubeh*hubah*jubj)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]rh)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]r(j)r}r(h#Xargsh,}r(h.]h/]h0]h1]h4]uh$jh]rh@Xargsrr}r(h#Uh$jubah*jubh@X -- rr}r(h#Uh$jubh@X/Positional arguments passed on to the function.rr}r(h#X/Positional arguments passed on to the function.rh$jubeh*hubah*jubj)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]rh)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]r(j)r}r(h#Xkwargsh,}r(h.]h/]h0]h1]h4]uh$jh]rh@Xkwargsrr}r(h#Uh$jubah*jubh@X -- r r }r (h#Uh$jubh@X,Keyword arguments passed on to the function.r r }r(h#X,Keyword arguments passed on to the function.rh$jubeh*hubah*jubj)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]rh)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]r(j)r}r(h#Xerrbackh,}r(h.]h/]h0]h1]h4]uh$jh]rh@Xerrbackrr}r(h#Uh$jubah*jubh@X -- rr }r!(h#Uh$jubh@X"Callback for when an exception in r"r#}r$(h#X"Callback for when an exception in h$jubh)r%}r&(h#X ``catch``h,}r'(h.]h/]h0]h1]h4]uh$jh]r(h@Xcatchr)r*}r+(h#Uh$j%ubah*hubh@X2 is raised. The callback must take two arguments: r,r-}r.(h#X2 is raised. The callback must take two arguments: h$jubh)r/}r0(h#X``exc``h,}r1(h.]h/]h0]h1]h4]uh$jh]r2h@Xexcr3r4}r5(h#Uh$j/ubah*hubh@X and r6r7}r8(h#X and h$jubh)r9}r:(h#X ``interval``h,}r;(h.]h/]h0]h1]h4]uh$jh]r<h@Xintervalr=r>}r?(h#Uh$j9ubah*hubh@X, where r@rA}rB(h#X, where h$jubh)rC}rD(h#X``exc``h,}rE(h.]h/]h0]h1]h4]uh$jh]rFh@XexcrGrH}rI(h#Uh$jCubah*hubh@X is the exception instance, and rJrK}rL(h#X is the exception instance, and h$jubh)rM}rN(h#X ``interval``h,}rO(h.]h/]h0]h1]h4]uh$jh]rPh@XintervalrQrR}rS(h#Uh$jMubah*hubh@X' is the time in seconds to sleep next..rTrU}rV(h#X' is the time in seconds to sleep next..h$jubeh*hubah*jubj)rW}rX(h#Uh,}rY(h.]h/]h0]h1]h4]uh$jh]rZh)r[}r\(h#Uh,}r](h.]h/]h0]h1]h4]uh$jWh]r^(j)r_}r`(h#X max_retriesh,}ra(h.]h/]h0]h1]h4]uh$j[h]rbh@X max_retriesrcrd}re(h#Uh$j_ubah*jubh@X -- rfrg}rh(h#Uh$j[ubh@XWMaximum number of retries before we give up. If this is not set, we will retry forever.rirj}rk(h#XWMaximum number of retries before we give up. If this is not set, we will retry forever.rlh$j[ubeh*hubah*jubj)rm}rn(h#Uh,}ro(h.]h/]h0]h1]h4]uh$jh]rph)rq}rr(h#Uh,}rs(h.]h/]h0]h1]h4]uh$jmh]rt(j)ru}rv(h#Xinterval_starth,}rw(h.]h/]h0]h1]h4]uh$jqh]rxh@Xinterval_startryrz}r{(h#Uh$juubah*jubh@X -- r|r}}r~(h#Uh$jqubh@X8How long (in seconds) we start sleeping between retries.rr}r(h#X8How long (in seconds) we start sleeping between retries.rh$jqubeh*hubah*jubj)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]rh)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]r(j)r}r(h#X interval_steph,}r(h.]h/]h0]h1]h4]uh$jh]rh@X interval_steprr}r(h#Uh$jubah*jubh@X -- rr}r(h#Uh$jubh@X5By how much the interval is increased for each retry.rr}r(h#X5By how much the interval is increased for each retry.rh$jubeh*hubah*jubj)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]rh)r}r(h#Uh,}r(h.]h/]h0]h1]h4]uh$jh]r(j)r}r(h#X interval_maxh,}r(h.]h/]h0]h1]h4]uh$jh]rh@X interval_maxrr}r(h#Uh$jubah*jubh@X -- rr}r(h#Uh$jubh@X3Maximum number of seconds to sleep between retries.rr}r(h#X3Maximum number of seconds to sleep between retries.rh$jubeh*hubah*jubeh*jubah*jubeh*jubaubeubeubeubah#UU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh7hU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh=NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerU^/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.utils.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformr Ustrip_elements_with_classesr NU _config_filesr ]Ufile_insertion_enabledr U raw_enabledr KU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hj.hjUhj]h jh jh jh hh jhj7hh!hj)hh_hjh3cdocutils.nodes target r)r}r(h#Uh$h!h%hGh*Utargetrh,}r(h.]h1]rh3ah0]Uismodh/]h4]uh6Kh7hh]ubhjuUsubstitution_namesr}rh*h7h,}r(h.]h1]h0]Usourceh(h/]h4]uU footnotesr]rUrefidsr}rub.PKXDD;hNcelery-1.0-archived/.doctrees/internals/reference/celery.execute.trace.doctreecdocutils.nodes document q)q}q(U nametypesq}qX(tracing execution - celery.execute.traceqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXf/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.execute.trace.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U&tracing-execution-celery-execute-traceq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX(Tracing Execution - celery.execute.traceq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X(Tracing Execution - celery.execute.traceq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X>autodoc: failed to import module u'celery.execute.trace'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/execute/__init__.py", line 1, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUf/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.execute.trace.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDJ&MNcelery-1.0-archived/.doctrees/internals/reference/celery.backends.amqp.doctreecdocutils.nodes document q)q}q(U nametypesq}qX$backend: amqp - celery.backends.amqpqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXf/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.amqp.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U!backend-amqp-celery-backends-amqpq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX$Backend: AMQP - celery.backends.amqpq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X$Backend: AMQP - celery.backends.amqpq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X?autodoc: failed to import module u'celery.backends.amqp'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/backends/__init__.py", line 3, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUf/var/build/user_builds/celery/checkouts/1.0-archived/docs/internals/reference/celery.backends.amqp.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDk11<celery-1.0-archived/.doctrees/userguide/remote-tasks.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xexecuting tasks on a web serverqNXhttp callback tasks (webhooks)qNuUsubstitution_defsq}q Uparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startqKUnameidsq}q(hUexecuting-tasks-on-a-web-serverqhUhttp-callback-tasks-webhooksquUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXT/var/build/user_builds/celery/checkouts/1.0-archived/docs/userguide/remote-tasks.rstqq}qbUtagnameqUsectionq U attributesq!}q"(Udupnamesq#]Uclassesq$]Ubackrefsq%]Uidsq&]q'(Xmodule-celery.task.httpq(heUnamesq)]q*hauUlineq+KUdocumentq,hh]q-(cdocutils.nodes title q.)q/}q0(hXHTTP Callback Tasks (Webhooks)q1hhhhhUtitleq2h!}q3(h#]h$]h%]h&]h)]uh+Kh,hh]q4cdocutils.nodes Text q5XHTTP Callback Tasks (Webhooks)q6q7}q8(hh1hh/ubaubcsphinx.addnodes index q9)q:}q;(hUhhhhhUindexq(Usingleq?Xcelery.task.http (module)Xmodule-celery.task.httpUtq@auh+Kh,hh]ubh)qA}qB(hUhhhhhh h!}qC(h#]h$]h%]h&]qDhah)]qEhauh+Kh,hh]qF(h.)qG}qH(hXExecuting tasks on a web serverqIhhAhhhh2h!}qJ(h#]h$]h%]h&]h)]uh+Kh,hh]qKh5XExecuting tasks on a web serverqLqM}qN(hhIhhGubaubcdocutils.nodes paragraph qO)qP}qQ(hXlIf you need to call into another language, framework or similar, you can do so by using HTTP callback tasks.qRhhAhhhU paragraphqSh!}qT(h#]h$]h%]h&]h)]uh+K h,hh]qUh5XlIf you need to call into another language, framework or similar, you can do so by using HTTP callback tasks.qVqW}qX(hhRhhPubaubhO)qY}qZ(hX{The HTTP callback tasks use GET/POST arguments and a simple JSON response to return results. The scheme to call a task is::hhAhhhhSh!}q[(h#]h$]h%]h&]h)]uh+K h,hh]q\h5XzThe HTTP callback tasks use GET/POST arguments and a simple JSON response to return results. The scheme to call a task is:q]q^}q_(hXzThe HTTP callback tasks use GET/POST arguments and a simple JSON response to return results. The scheme to call a task is:hhYubaubcdocutils.nodes literal_block q`)qa}qb(hX3GET http://example.com/mytask/?arg1=a&arg2=b&arg3=chhAhhhU literal_blockqch!}qd(U xml:spaceqeUpreserveqfh&]h%]h#]h$]h)]uh+Kh,hh]qgh5X3GET http://example.com/mytask/?arg1=a&arg2=b&arg3=cqhqi}qj(hUhhaubaubhO)qk}ql(hXor using POST::qmhhAhhhhSh!}qn(h#]h$]h%]h&]h)]uh+Kh,hh]qoh5Xor using POST:qpqq}qr(hXor using POST:hhkubaubh`)qs}qt(hXPOST http://example.com/mytaskhhAhhhhch!}qu(hehfh&]h%]h#]h$]h)]uh+Kh,hh]qvh5XPOST http://example.com/mytaskqwqx}qy(hUhhsubaubhO)qz}q{(hXj**Note:** POST data has to be form encoded. Whether to use GET or POST is up to you and your requirements.hhAhhhhSh!}q|(h#]h$]h%]h&]h)]uh+Kh,hh]q}(cdocutils.nodes strong q~)q}q(hX **Note:**h!}q(h#]h$]h%]h&]h)]uhhzh]qh5XNote:qq}q(hUhhubahUstrongqubh5Xa POST data has to be form encoded. Whether to use GET or POST is up to you and your requirements.qq}q(hXa POST data has to be form encoded. Whether to use GET or POST is up to you and your requirements.hhzubeubhO)q}q(hXdThe web page should then return a response in the following format if the execution was successful::hhAhhhhSh!}q(h#]h$]h%]h&]h)]uh+Kh,hh]qh5XcThe web page should then return a response in the following format if the execution was successful:qq}q(hXcThe web page should then return a response in the following format if the execution was successful:hhubaubh`)q}q(hX%{"status": "success", "retval": ....}hhAhhhhch!}q(hehfh&]h%]h#]h$]h)]uh+Kh,hh]qh5X%{"status": "success", "retval": ....}qq}q(hUhhubaubhO)q}q(hXor if there was an error::qhhAhhhhSh!}q(h#]h$]h%]h&]h)]uh+Kh,hh]qh5Xor if there was an error:qq}q(hXor if there was an error:hhubaubh`)q}q(hX:{"status": "failure": "reason": "Invalid moon alignment."}hhAhhhhch!}q(hehfh&]h%]h#]h$]h)]uh+K h,hh]qh5X:{"status": "failure": "reason": "Invalid moon alignment."}qq}q(hUhhubaubhO)q}q(hX?With this information you could define a simple task in Django:qhhAhhhhSh!}q(h#]h$]h%]h&]h)]uh+K#h,hh]qh5X?With this information you could define a simple task in Django:qq}q(hhhhubaubh`)q}q(hX+from django.http import HttpResponse from anyjson import serialize def multiply(request): x = int(request.GET["x"]) y = int(request.GET["y"]) result = x * y response = {"status": "success", "retval": result} return HttpResponse(serialize(response), mimetype="application/json")hhAhhhhch!}q(UlinenosqUlanguageqXpythonhehfh&]h%]h#]h$]h)]uh+K%h,hh]qh5X+from django.http import HttpResponse from anyjson import serialize def multiply(request): x = int(request.GET["x"]) y = int(request.GET["y"]) result = x * y response = {"status": "success", "retval": result} return HttpResponse(serialize(response), mimetype="application/json")qq}q(hUhhubaubhO)q}q(hXor in Ruby on Rails:qhhAhhhhSh!}q(h#]h$]h%]h&]h)]uh+K3h,hh]qh5Xor in Ruby on Rails:qq}q(hhhhubaubh`)q}q(hXdef multiply @x = params[:x].to_i @y = params[:y].to_i @status = {:status => "success", :retval => @x * @y} render :json => @status endhhAhhhhch!}q(hhXrubyhehfh&]h%]h#]h$]h)]uh+K5h,hh]qh5Xdef multiply @x = params[:x].to_i @y = params[:y].to_i @status = {:status => "success", :retval => @x * @y} render :json => @status endqąq}q(hUhhubaubhO)q}q(hXgYou can easily port this scheme to any language/framework; new examples and libraries are very welcome.qhhAhhhhSh!}q(h#]h$]h%]h&]h)]uh+K@h,hh]qh5XgYou can easily port this scheme to any language/framework; new examples and libraries are very welcome.q̅q}q(hhhhubaubhO)q}q(hX3To execute the task you use the :class:`URL` class:qhhAhhhhSh!}q(h#]h$]h%]h&]h)]uh+KCh,hh]q(h5X To execute the task you use the qԅq}q(hX To execute the task you use the hhubcsphinx.addnodes pending_xref q)q}q(hX :class:`URL`qhhhhhU pending_xrefqh!}q(UreftypeXclassUrefwarnq݉U reftargetqXURLU refdomainXpyqh&]h%]U refexplicith#]h$]h)]UrefdocqXuserguide/remote-tasksqUpy:classqNU py:moduleqXcelery.task.httpquh+KCh]qcdocutils.nodes literal q)q}q(hhh!}q(h#]h$]q(UxrefqhXpy-classqeh%]h&]h)]uhhh]qh5XURLqq}q(hUhhubahUliteralqubaubh5X class:qq}q(hX class:hhubeubcdocutils.nodes doctest_block q)q}q(hXg>>> from celery.task.http import URL >>> res = URL("http://example.com/multiply").get_async(x=10, y=10)hhAhNhU doctest_blockqh!}q(hehfh&]h%]h#]h$]h)]uh+Nh,hh]qh5Xg>>> from celery.task.http import URL >>> res = URL("http://example.com/multiply").get_async(x=10, y=10)qq}q(hUhhubaubhO)q}q(hXo:class:`URL` is a shortcut to the :class:`HttpDispatchTask`. You can subclass this to extend the functionality.hhAhhhhSh!}r(h#]h$]h%]h&]h)]uh+KIh,hh]r(h)r}r(hX :class:`URL`rhhhhhhh!}r(UreftypeXclassh݉hXURLU refdomainXpyrh&]h%]U refexplicith#]h$]h)]hhhNhhuh+KIh]rh)r}r (hjh!}r (h#]h$]r (hjXpy-classr eh%]h&]h)]uhjh]r h5XURLrr}r(hUhjubahhubaubh5X is a shortcut to the rr}r(hX is a shortcut to the hhubh)r}r(hX:class:`HttpDispatchTask`rhhhhhhh!}r(UreftypeXclassh݉hXHttpDispatchTaskU refdomainXpyrh&]h%]U refexplicith#]h$]h)]hhhNhhuh+KIh]rh)r}r(hjh!}r(h#]h$]r(hjXpy-classreh%]h&]h)]uhjh]rh5XHttpDispatchTaskr r!}r"(hUhjubahhubaubh5X4. You can subclass this to extend the functionality.r#r$}r%(hX4. You can subclass this to extend the functionality.hhubeubh)r&}r'(hX>>> from celery.task.http import HttpDispatchTask >>> res = HttpDispatchTask.delay(url="http://example.com/multiply", method="GET", x=10, y=10) >>> res.get() 100hhAhNhhh!}r((hehfh&]h%]h#]h$]h)]uh+Nh,hh]r)h5X>>> from celery.task.http import HttpDispatchTask >>> res = HttpDispatchTask.delay(url="http://example.com/multiply", method="GET", x=10, y=10) >>> res.get() 100r*r+}r,(hUhj&ubaubhO)r-}r.(hXbThe output of celeryd (or the logfile if you've enabled it) should show the task being processed::r/hhAhhhhSh!}r0(h#]h$]h%]h&]h)]uh+KQh,hh]r1h5XaThe output of celeryd (or the logfile if you've enabled it) should show the task being processed:r2r3}r4(hXaThe output of celeryd (or the logfile if you've enabled it) should show the task being processed:hj-ubaubh`)r5}r6(hXw[INFO/MainProcess] Task celery.task.http.HttpDispatchTask [f2cc8efc-2a14-40cd-85ad-f1c77c94beeb] processed: 100hhAhhhhch!}r7(hehfh&]h%]h#]h$]h)]uh+KSh,hh]r8h5Xw[INFO/MainProcess] Task celery.task.http.HttpDispatchTask [f2cc8efc-2a14-40cd-85ad-f1c77c94beeb] processed: 100r9r:}r;(hUhj5ubaubhO)r<}r=(hXSince applying tasks can be done via HTTP using the ``celery.views.apply`` view, executing tasks from other languages is easy. For an example service exposing tasks via HTTP you should have a look at ``examples/celery_http_gateway``.hhAhhhhSh!}r>(h#]h$]h%]h&]h)]uh+KVh,hh]r?(h5X4Since applying tasks can be done via HTTP using the r@rA}rB(hX4Since applying tasks can be done via HTTP using the hj<ubh)rC}rD(hX``celery.views.apply``h!}rE(h#]h$]h%]h&]h)]uhj<h]rFh5Xcelery.views.applyrGrH}rI(hUhjCubahhubh5X~ view, executing tasks from other languages is easy. For an example service exposing tasks via HTTP you should have a look at rJrK}rL(hX~ view, executing tasks from other languages is easy. For an example service exposing tasks via HTTP you should have a look at hj<ubh)rM}rN(hX ``examples/celery_http_gateway``h!}rO(h#]h$]h%]h&]h)]uhj<h]rPh5Xexamples/celery_http_gatewayrQrR}rS(hUhjMubahhubh5X.rT}rU(hX.hj<ubeubeubeubahUU transformerrVNU footnote_refsrW}rXUrefnamesrY}rZUsymbol_footnotesr[]r\Uautofootnote_refsr]]r^Usymbol_footnote_refsr_]r`U citationsra]rbh,hU current_linercNUtransform_messagesrd]reUreporterrfNUid_startrgKU autofootnotesrh]riU citation_refsrj}rkUindirect_targetsrl]rmUsettingsrn(cdocutils.frontend Values roorp}rq(Ufootnote_backlinksrrKUrecord_dependenciesrsNU rfc_base_urlrtUhttp://tools.ietf.org/html/ruU tracebackrvUpep_referencesrwNUstrip_commentsrxNU toc_backlinksryUentryrzU language_coder{Uenr|U datestampr}NU report_levelr~KU _destinationrNU halt_levelrKU strip_classesrNh2NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUT/var/build/user_builds/celery/checkouts/1.0-archived/docs/userguide/remote-tasks.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hhh(cdocutils.nodes target r)r}r(hUhhhhhUtargetrh!}r(h#]h&]rh(ah%]Uismodh$]h)]uh+Kh,hh]ubhhAuUsubstitution_namesr}rhh,h!}r(h#]h&]h%]Usourcehh$]h)]uU footnotesr]rUrefidsr}rub.PKXDDkAA7celery-1.0-archived/.doctrees/userguide/routing.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xexchange typesqNXCqueue.declare(queue_name, passive, durable, exclusive, auto_delete)qNX mailinglistqX2queue.bind(queue_name, exchange_name, routing_key)q NX exchange.delete(name, if_unused)q NXlast-value-cache plug-inq X#exchanges, queues and routing keys.q NXmessagesq NXrelated api commandsqNX'queue.delete(name, if_unused, if_empty)qNX routing tasksqNX amqp primerqNXdirect exchangesqNXtopic exchangesqNX producers, consumers and brokersqNXhands-on with the apiqNXNexchange.declare(exchange_name, type, passive, durable, auto_delete, internal)qNuUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hUexchange-typesq hU>queue-declare-queue-name-passive-durable-exclusive-auto-deleteq!hU mailinglistq"h U/queue-bind-queue-name-exchange-name-routing-keyq#h Uexchange-delete-name-if-unusedq$h Ulast-value-cache-plug-inq%h U!exchanges-queues-and-routing-keysq&h Umessagesq'hUrelated-api-commandsq(hU$queue-delete-name-if-unused-if-emptyq)hU routing-tasksq*hU amqp-primerq+hUdirect-exchangesq,hUtopic-exchangesq-hUproducers-consumers-and-brokersq.hUhands-on-with-the-apiq/hUHexchange-declare-exchange-name-type-passive-durable-auto-delete-internalq0uUchildrenq1]q2cdocutils.nodes section q3)q4}q5(U rawsourceq6UUparentq7hUsourceq8cdocutils.nodes reprunicode q9XO/var/build/user_builds/celery/checkouts/1.0-archived/docs/userguide/routing.rstq:q;}qU attributesq?}q@(UdupnamesqA]UclassesqB]UbackrefsqC]UidsqD]qEh*aUnamesqF]qGhauUlineqHKUdocumentqIhh1]qJ(cdocutils.nodes title qK)qL}qM(h6X Routing TasksqNh7h4h8h;h=UtitleqOh?}qP(hA]hB]hC]hD]hF]uhHKhIhh1]qQcdocutils.nodes Text qRX Routing TasksqSqT}qU(h6hNh7hLubaubcdocutils.nodes paragraph qV)qW}qX(h6X**NOTE** This document refers to functionality only available in brokers using AMQP. Other brokers may implement some functionality, see their respective documenation for more information, or contact the `mailinglist`_.h7h4h8h;h=U paragraphqYh?}qZ(hA]hB]hC]hD]hF]uhHKhIhh1]q[(cdocutils.nodes strong q\)q]}q^(h6X**NOTE**h?}q_(hA]hB]hC]hD]hF]uh7hWh1]q`hRXNOTEqaqb}qc(h6Uh7h]ubah=UstrongqdubhRX This document refers to functionality only available in brokers using AMQP. Other brokers may implement some functionality, see their respective documenation for more information, or contact the qeqf}qg(h6X This document refers to functionality only available in brokers using AMQP. Other brokers may implement some functionality, see their respective documenation for more information, or contact the h7hWubcdocutils.nodes reference qh)qi}qj(h6X`mailinglist`_UresolvedqkKh7hWh=U referenceqlh?}qm(UnameX mailinglistqnUrefuriqoX+http://groups.google.com/group/celery-usersqphD]hC]hA]hB]hF]uh1]qqhRX mailinglistqrqs}qt(h6Uh7hiubaubhRX.qu}qv(h6X.h7hWubeubcdocutils.nodes target qw)qx}qy(h6X>.. _`mailinglist`: http://groups.google.com/group/celery-usersU referencedqzKh7h4h8h;h=Utargetq{h?}q|(hohphD]q}h"ahC]hA]hB]hF]q~hauhHK hIhh1]ubh3)q}q(h6Uh7h4h8h;h=h>h?}q(hA]hB]hC]hD]qh+ahF]qhauhHK hIhh1]q(hK)q}q(h6X AMQP Primerqh7hh8h;h=hOh?}q(hA]hB]hC]hD]hF]uhHK hIhh1]qhRX AMQP Primerqq}q(h6hh7hubaubh3)q}q(h6Uh7hh8h;h=h>h?}q(hA]hB]hC]hD]qh'ahF]qh auhHKhIhh1]q(hK)q}q(h6XMessagesqh7hh8h;h=hOh?}q(hA]hB]hC]hD]hF]uhHKhIhh1]qhRXMessagesqq}q(h6hh7hubaubhV)q}q(h6XA message consists of headers and a body. Celery uses headers to store the content type of the message and its content encoding. In Celery the content type is usually the serialization format used to serialize the message, and the body contains the name of the task to execute, the task id (UUID), the arguments to execute it with and some additional metadata - like the number of retries and its ETA (if any).qh7hh8h;h=hYh?}q(hA]hB]hC]hD]hF]uhHKhIhh1]qhRXA message consists of headers and a body. Celery uses headers to store the content type of the message and its content encoding. In Celery the content type is usually the serialization format used to serialize the message, and the body contains the name of the task to execute, the task id (UUID), the arguments to execute it with and some additional metadata - like the number of retries and its ETA (if any).qq}q(h6hh7hubaubhV)q}q(h6XCThis is an example task message represented as a Python dictionary:qh7hh8h;h=hYh?}q(hA]hB]hC]hD]hF]uhHKhIhh1]qhRXCThis is an example task message represented as a Python dictionary:qq}q(h6hh7hubaubcdocutils.nodes literal_block q)q}q(h6XB{"task": "myapp.tasks.add", "id": "args": [4, 4], "kwargs": {}}h7hh8h;h=U literal_blockqh?}q(UlinenosqUlanguageqXpythonU xml:spaceqUpreserveqhD]hC]hA]hB]hF]uhHKhIhh1]qhRXB{"task": "myapp.tasks.add", "id": "args": [4, 4], "kwargs": {}}qq}q(h6Uh7hubaubeubh3)q}q(h6Uh7hh8h;h=h>h?}q(hA]hB]hC]hD]qh.ahF]qhauhHK"hIhh1]q(hK)q}q(h6X Producers, consumers and brokersqh7hh8h;h=hOh?}q(hA]hB]hC]hD]hF]uhHK"hIhh1]qhRX Producers, consumers and brokersqÅq}q(h6hh7hubaubhV)q}q(h6XThe client sending messages is typically called a *publisher*, or a *producer*, while the entity receiving messages is called a *consumer*.h7hh8h;h=hYh?}q(hA]hB]hC]hD]hF]uhHK$hIhh1]q(hRX2The client sending messages is typically called a qʅq}q(h6X2The client sending messages is typically called a h7hubcdocutils.nodes emphasis q)q}q(h6X *publisher*h?}q(hA]hB]hC]hD]hF]uh7hh1]qhRX publisherq҅q}q(h6Uh7hubah=UemphasisqubhRX, or a qօq}q(h6X, or a h7hubh)q}q(h6X *producer*h?}q(hA]hB]hC]hD]hF]uh7hh1]qhRXproducerq݅q}q(h6Uh7hubah=hubhRX2, while the entity receiving messages is called a qq}q(h6X2, while the entity receiving messages is called a h7hubh)q}q(h6X *consumer*h?}q(hA]hB]hC]hD]hF]uh7hh1]qhRXconsumerq煁q}q(h6Uh7hubah=hubhRX.q}q(h6X.h7hubeubhV)q}q(h6XQThe *broker* is the message server, routing messages from producers to consumers.h7hh8h;h=hYh?}q(hA]hB]hC]hD]hF]uhHK(hIhh1]q(hRXThe qq}q(h6XThe h7hubh)q}q(h6X*broker*h?}q(hA]hB]hC]hD]hF]uh7hh1]qhRXbrokerqq}q(h6Uh7hubah=hubhRXE is the message server, routing messages from producers to consumers.qq}q(h6XE is the message server, routing messages from producers to consumers.h7hubeubhV)q}q(h6XFYou are likely to see these terms used a lot in AMQP related material.qh7hh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHK+hIhh1]rhRXFYou are likely to see these terms used a lot in AMQP related material.rr}r(h6hh7hubaubeubh3)r}r(h6Uh7hh8h;h=h>h?}r(hA]hB]hC]hD]rh&ahF]r h auhHK.hIhh1]r (hK)r }r (h6X#Exchanges, queues and routing keys.r h7jh8h;h=hOh?}r(hA]hB]hC]hD]hF]uhHK.hIhh1]rhRX#Exchanges, queues and routing keys.rr}r(h6j h7j ubaubhV)r}r(h6X7TODO Mindblowing one-line simple explanation here. TODOrh7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHK/hIhh1]rhRX7TODO Mindblowing one-line simple explanation here. TODOrr}r(h6jh7jubaubcdocutils.nodes enumerated_list r)r}r(h6Uh7jh8h;h=Uenumerated_listrh?}r(Usuffixr U.hD]hC]hA]Uprefixr!UhB]hF]Uenumtyper"Uarabicr#uhHK1hIhh1]r$(cdocutils.nodes list_item r%)r&}r'(h6XMessages are sent to exchanges.r(h7jh8h;h=U list_itemr)h?}r*(hA]hB]hC]hD]hF]uhHNhIhh1]r+hV)r,}r-(h6j(h7j&h8h;h=hYh?}r.(hA]hB]hC]hD]hF]uhHK1h1]r/hRXMessages are sent to exchanges.r0r1}r2(h6j(h7j,ubaubaubj%)r3}r4(h6XyAn exchange routes messages to one or more queues. Several exchange types exists, providing different ways to do routing.h7jh8h;h=j)h?}r5(hA]hB]hC]hD]hF]uhHNhIhh1]r6hV)r7}r8(h6XyAn exchange routes messages to one or more queues. Several exchange types exists, providing different ways to do routing.r9h7j3h8h;h=hYh?}r:(hA]hB]hC]hD]hF]uhHK2h1]r;hRXyAn exchange routes messages to one or more queues. Several exchange types exists, providing different ways to do routing.r<r=}r>(h6j9h7j7ubaubaubj%)r?}r@(h6X>The message waits in the queue until someone consumes from it.rAh7jh8h;h=j)h?}rB(hA]hB]hC]hD]hF]uhHNhIhh1]rChV)rD}rE(h6jAh7j?h8h;h=hYh?}rF(hA]hB]hC]hD]hF]uhHK4h1]rGhRX>The message waits in the queue until someone consumes from it.rHrI}rJ(h6jAh7jDubaubaubj%)rK}rL(h6XEThe message is deleted from the queue when it has been acknowledged. h7jh8h;h=j)h?}rM(hA]hB]hC]hD]hF]uhHNhIhh1]rNhV)rO}rP(h6XDThe message is deleted from the queue when it has been acknowledged.rQh7jKh8h;h=hYh?}rR(hA]hB]hC]hD]hF]uhHK5h1]rShRXDThe message is deleted from the queue when it has been acknowledged.rTrU}rV(h6jQh7jOubaubaubeubhV)rW}rX(h6X4The steps required to send and receive messages are:rYh7jh8h;h=hYh?}rZ(hA]hB]hC]hD]hF]uhHK7hIhh1]r[hRX4The steps required to send and receive messages are:r\r]}r^(h6jYh7jWubaubj)r_}r`(h6Uh7jh8h;h=jh?}ra(j U.hD]hC]hA]j!UhB]hF]j"j#uhHK9hIhh1]rb(j%)rc}rd(h6XCreate an exchangereh7j_h8h;h=j)h?}rf(hA]hB]hC]hD]hF]uhHNhIhh1]rghV)rh}ri(h6jeh7jch8h;h=hYh?}rj(hA]hB]hC]hD]hF]uhHK9h1]rkhRXCreate an exchangerlrm}rn(h6jeh7jhubaubaubj%)ro}rp(h6XCreate a queuerqh7j_h8h;h=j)h?}rr(hA]hB]hC]hD]hF]uhHNhIhh1]rshV)rt}ru(h6jqh7joh8h;h=hYh?}rv(hA]hB]hC]hD]hF]uhHK:h1]rwhRXCreate a queuerxry}rz(h6jqh7jtubaubaubj%)r{}r|(h6X Bind the queue to the exchange. h7j_h8h;h=j)h?}r}(hA]hB]hC]hD]hF]uhHNhIhh1]r~hV)r}r(h6XBind the queue to the exchange.rh7j{h8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHK;h1]rhRXBind the queue to the exchange.rr}r(h6jh7jubaubaubeubhV)r}r(h6XCelery automatically creates the entities necessary for the queues in ``CELERY_QUEUES`` to work (unless the queue's ``auto_declare`` setting is set)h7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHK=hIhh1]r(hRXFCelery automatically creates the entities necessary for the queues in rr}r(h6XFCelery automatically creates the entities necessary for the queues in h7jubcdocutils.nodes literal r)r}r(h6X``CELERY_QUEUES``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRX CELERY_QUEUESrr}r(h6Uh7jubah=UliteralrubhRX to work (unless the queue's rr}r(h6X to work (unless the queue's h7jubj)r}r(h6X``auto_declare``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRX auto_declarerr}r(h6Uh7jubah=jubhRX setting is set)rr}r(h6X setting is set)h7jubeubhV)r}r(h6XHere's an example queue configuration with three queues; One for video, one for images and one default queue for everything else:rh7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHKAhIhh1]rhRXHere's an example queue configuration with three queues; One for video, one for images and one default queue for everything else:rr}r(h6jh7jubaubh)r}r(h6XCELERY_QUEUES = { "default": { "exchange": "default", "binding_key": "default"}, "videos": { "exchange": "media", "binding_key": "media.video", }, "images": { "exchange": "media", "binding_key": "media.image", } } CELERY_DEFAULT_QUEUE = "default" CELERY_DEFAULT_EXCHANGE_TYPE = "direct" CELERY_DEFAULT_ROUTING_KEY = "default"h7jh8h;h=hh?}r(hhXpythonhhhD]hC]hA]hB]hF]uhHKDhIhh1]rhRXCELERY_QUEUES = { "default": { "exchange": "default", "binding_key": "default"}, "videos": { "exchange": "media", "binding_key": "media.video", }, "images": { "exchange": "media", "binding_key": "media.image", } } CELERY_DEFAULT_QUEUE = "default" CELERY_DEFAULT_EXCHANGE_TYPE = "direct" CELERY_DEFAULT_ROUTING_KEY = "default"rr}r(h6Uh7jubaubhV)r}r(h6X**NOTE**: In Celery the ``routing_key`` is the key used to send the message, while ``binding_key`` is the key the queue is bound with. In the AMQP API they are both referred to as a routing key.h7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHKXhIhh1]r(h\)r}r(h6X**NOTE**h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRXNOTErr}r(h6Uh7jubah=hdubhRX: In Celery the rr}r(h6X: In Celery the h7jubj)r}r(h6X``routing_key``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRX routing_keyrr}r(h6Uh7jubah=jubhRX, is the key used to send the message, while rr}r(h6X, is the key used to send the message, while h7jubj)r}r(h6X``binding_key``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRX binding_keyrr}r(h6Uh7jubah=jubhRX` is the key the queue is bound with. In the AMQP API they are both referred to as a routing key.rr}r(h6X` is the key the queue is bound with. In the AMQP API they are both referred to as a routing key.h7jubeubeubh3)r}r(h6Uh7hh8h;h=h>h?}r(hA]hB]hC]hD]rh ahF]rhauhHK]hIhh1]r(hK)r}r(h6XExchange typesrh7jh8h;h=hOh?}r(hA]hB]hC]hD]hF]uhHK]hIhh1]rhRXExchange typesrr}r(h6jh7jubaubhV)r}r(h6X-The exchange type defines how the messages are routed through the exchange. The exchange types defined in the standard are ``direct``, ``topic``, ``fanout`` and ``headers``. Also non-standard exchange types are available as plugins to RabbitMQ, like the `last-value-cache plug-in`_ by Michael Bridgen.h7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHK_hIhh1]r(hRX{The exchange type defines how the messages are routed through the exchange. The exchange types defined in the standard are rr}r(h6X{The exchange type defines how the messages are routed through the exchange. The exchange types defined in the standard are h7jubj)r}r(h6X ``direct``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRXdirectrr}r(h6Uh7jubah=jubhRX, rr}r(h6X, h7jubj)r}r(h6X ``topic``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRXtopicrr}r(h6Uh7jubah=jubhRX, rr}r(h6X, h7jubj)r}r(h6X ``fanout``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRXfanoutrr}r(h6Uh7jubah=jubhRX and rr}r(h6X and h7jubj)r}r (h6X ``headers``h?}r (hA]hB]hC]hD]hF]uh7jh1]r hRXheadersr r }r(h6Uh7jubah=jubhRXR. Also non-standard exchange types are available as plugins to RabbitMQ, like the rr}r(h6XR. Also non-standard exchange types are available as plugins to RabbitMQ, like the h7jubhh)r}r(h6X`last-value-cache plug-in`_hkKh7jh=hlh?}r(UnameXlast-value-cache plug-inhoX.http://github.com/squaremo/rabbitmq-lvc-pluginrhD]hC]hA]hB]hF]uh1]rhRXlast-value-cache plug-inrr}r(h6Uh7jubaubhRX by Michael Bridgen.rr}r(h6X by Michael Bridgen.h7jubeubhw)r}r(h6XR.. _`last-value-cache plug-in`: http://github.com/squaremo/rabbitmq-lvc-pluginhzKh7jh8h;h=h{h?}r(hojhD]r h%ahC]hA]hB]hF]r!h auhHKehIhh1]ubh3)r"}r#(h6Uh7jh8h;h=h>h?}r$(hA]hB]hC]hD]r%h,ahF]r&hauhHKihIhh1]r'(hK)r(}r)(h6XDirect exchangesr*h7j"h8h;h=hOh?}r+(hA]hB]hC]hD]hF]uhHKihIhh1]r,hRXDirect exchangesr-r.}r/(h6j*h7j(ubaubhV)r0}r1(h6XDirect exchanges match by exact routing keys, so a queue bound with the routing key ``video`` only receives messages with the same routing key.h7j"h8h;h=hYh?}r2(hA]hB]hC]hD]hF]uhHKkhIhh1]r3(hRXTDirect exchanges match by exact routing keys, so a queue bound with the routing key r4r5}r6(h6XTDirect exchanges match by exact routing keys, so a queue bound with the routing key h7j0ubj)r7}r8(h6X ``video``h?}r9(hA]hB]hC]hD]hF]uh7j0h1]r:hRXvideor;r<}r=(h6Uh7j7ubah=jubhRX2 only receives messages with the same routing key.r>r?}r@(h6X2 only receives messages with the same routing key.h7j0ubeubeubh3)rA}rB(h6Uh7jh8h;h=h>h?}rC(hA]hB]hC]hD]rDh-ahF]rEhauhHKohIhh1]rF(hK)rG}rH(h6XTopic exchangesrIh7jAh8h;h=hOh?}rJ(hA]hB]hC]hD]hF]uhHKohIhh1]rKhRXTopic exchangesrLrM}rN(h6jIh7jGubaubhV)rO}rP(h6XTopic exchanges matches routing keys using dot-separated words, and can include wildcard characters: ``*`` matches a single word, ``#`` matches zero or more words.h7jAh8h;h=hYh?}rQ(hA]hB]hC]hD]hF]uhHKqhIhh1]rR(hRXeTopic exchanges matches routing keys using dot-separated words, and can include wildcard characters: rSrT}rU(h6XeTopic exchanges matches routing keys using dot-separated words, and can include wildcard characters: h7jOubj)rV}rW(h6X``*``h?}rX(hA]hB]hC]hD]hF]uh7jOh1]rYhRX*rZ}r[(h6Uh7jVubah=jubhRX matches a single word, r\r]}r^(h6X matches a single word, h7jOubj)r_}r`(h6X``#``h?}ra(hA]hB]hC]hD]hF]uh7jOh1]rbhRX#rc}rd(h6Uh7j_ubah=jubhRX matches zero or more words.rerf}rg(h6X matches zero or more words.h7jOubeubhV)rh}ri(h6XWith routing keys like ``usa.news``, ``usa.weather``, ``norway.news`` and ``norway.weather``, bindings could be ``*.news`` (all news), ``usa.#`` (all items in the USA) or ``usa.weather`` (all USA weather items).h7jAh8h;h=hYh?}rj(hA]hB]hC]hD]hF]uhHKuhIhh1]rk(hRXWith routing keys like rlrm}rn(h6XWith routing keys like h7jhubj)ro}rp(h6X ``usa.news``h?}rq(hA]hB]hC]hD]hF]uh7jhh1]rrhRXusa.newsrsrt}ru(h6Uh7joubah=jubhRX, rvrw}rx(h6X, h7jhubj)ry}rz(h6X``usa.weather``h?}r{(hA]hB]hC]hD]hF]uh7jhh1]r|hRX usa.weatherr}r~}r(h6Uh7jyubah=jubhRX, rr}r(h6X, h7jhubj)r}r(h6X``norway.news``h?}r(hA]hB]hC]hD]hF]uh7jhh1]rhRX norway.newsrr}r(h6Uh7jubah=jubhRX and rr}r(h6X and h7jhubj)r}r(h6X``norway.weather``h?}r(hA]hB]hC]hD]hF]uh7jhh1]rhRXnorway.weatherrr}r(h6Uh7jubah=jubhRX, bindings could be rr}r(h6X, bindings could be h7jhubj)r}r(h6X ``*.news``h?}r(hA]hB]hC]hD]hF]uh7jhh1]rhRX*.newsrr}r(h6Uh7jubah=jubhRX (all news), rr}r(h6X (all news), h7jhubj)r}r(h6X ``usa.#``h?}r(hA]hB]hC]hD]hF]uh7jhh1]rhRXusa.#rr}r(h6Uh7jubah=jubhRX (all items in the USA) or rr}r(h6X (all items in the USA) or h7jhubj)r}r(h6X``usa.weather``h?}r(hA]hB]hC]hD]hF]uh7jhh1]rhRX usa.weatherrr}r(h6Uh7jubah=jubhRX (all USA weather items).rr}r(h6X (all USA weather items).h7jhubeubeubeubh3)r}r(h6Uh7hh8h;h=h>h?}r(hA]hB]hC]hD]rh(ahF]rhauhHK{hIhh1]r(hK)r}r(h6XRelated API commandsrh7jh8h;h=hOh?}r(hA]hB]hC]hD]hF]uhHK{hIhh1]rhRXRelated API commandsrr}r(h6jh7jubaubh3)r}r(h6Uh7jh8h;h=h>h?}r(hA]hB]hC]hD]rh0ahF]rhauhHK~hIhh1]r(hK)r}r(h6XNexchange.declare(exchange_name, type, passive, durable, auto_delete, internal)rh7jh8h;h=hOh?}r(hA]hB]hC]hD]hF]uhHK~hIhh1]rhRXNexchange.declare(exchange_name, type, passive, durable, auto_delete, internal)rr}r(h6jh7jubaubhV)r}r(h6XDeclares an exchange by name.rh7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]rhRXDeclares an exchange by name.rr}r(h6jh7jubaubcdocutils.nodes bullet_list r)r}r(h6Uh7jh8h;h=U bullet_listrh?}r(UbulletrX*hD]hC]hA]hB]hF]uhHKhIhh1]r(j%)r}r(h6Xo``passive`` means the exchange won't be created, but you can use this to check if the exchange already exists. h7jh8h;h=j)h?}r(hA]hB]hC]hD]hF]uhHNhIhh1]rhV)r}r(h6Xn``passive`` means the exchange won't be created, but you can use this to check if the exchange already exists.h7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHKh1]r(j)r}r(h6X ``passive``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRXpassiverr}r(h6Uh7jubah=jubhRXc means the exchange won't be created, but you can use this to check if the exchange already exists.rr}r(h6Xc means the exchange won't be created, but you can use this to check if the exchange already exists.h7jubeubaubj%)r}r(h6XKDurable exchanges are persistent. That is - they survive a broker restart. h7jh8h;h=j)h?}r(hA]hB]hC]hD]hF]uhHNhIhh1]rhV)r}r(h6XJDurable exchanges are persistent. That is - they survive a broker restart.rh7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHKh1]rhRXJDurable exchanges are persistent. That is - they survive a broker restart.rr}r(h6jh7jubaubaubj%)r}r(h6Xf``auto_delete`` means the queue will be deleted by the broker when there are no more queues using it. h7jh8h;h=j)h?}r(hA]hB]hC]hD]hF]uhHNhIhh1]rhV)r}r(h6Xe``auto_delete`` means the queue will be deleted by the broker when there are no more queues using it.h7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHKh1]r(j)r}r(h6X``auto_delete``h?}r(hA]hB]hC]hD]hF]uh7jh1]r hRX auto_deleter r }r (h6Uh7jubah=jubhRXV means the queue will be deleted by the broker when there are no more queues using it.r r}r(h6XV means the queue will be deleted by the broker when there are no more queues using it.h7jubeubaubeubeubh3)r}r(h6Uh7jh8h;h=h>h?}r(hA]hB]hC]hD]rh!ahF]rhauhHKhIhh1]r(hK)r}r(h6XCqueue.declare(queue_name, passive, durable, exclusive, auto_delete)rh7jh8h;h=hOh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]rhRXCqueue.declare(queue_name, passive, durable, exclusive, auto_delete)rr}r(h6jh7jubaubhV)r}r(h6XDeclares a queue by name.r h7jh8h;h=hYh?}r!(hA]hB]hC]hD]hF]uhHKhIhh1]r"hRXDeclares a queue by name.r#r$}r%(h6j h7jubaubj)r&}r'(h6Uh7jh8h;h=jh?}r((jX*hD]hC]hA]hB]hF]uhHKhIhh1]r)j%)r*}r+(h6X_exclusive queues can only be consumed from by the current connection. implies ``auto_delete``. h7j&h8h;h=j)h?}r,(hA]hB]hC]hD]hF]uhHNhIhh1]r-hV)r.}r/(h6X^exclusive queues can only be consumed from by the current connection. implies ``auto_delete``.h7j*h8h;h=hYh?}r0(hA]hB]hC]hD]hF]uhHKh1]r1(hRXNexclusive queues can only be consumed from by the current connection. implies r2r3}r4(h6XNexclusive queues can only be consumed from by the current connection. implies h7j.ubj)r5}r6(h6X``auto_delete``h?}r7(hA]hB]hC]hD]hF]uh7j.h1]r8hRX auto_deleter9r:}r;(h6Uh7j5ubah=jubhRX.r<}r=(h6X.h7j.ubeubaubaubeubh3)r>}r?(h6Uh7jh8h;h=h>h?}r@(hA]hB]hC]hD]rAh#ahF]rBh auhHKhIhh1]rC(hK)rD}rE(h6X2queue.bind(queue_name, exchange_name, routing_key)rFh7j>h8h;h=hOh?}rG(hA]hB]hC]hD]hF]uhHKhIhh1]rHhRX2queue.bind(queue_name, exchange_name, routing_key)rIrJ}rK(h6jFh7jDubaubhV)rL}rM(h6XpBinds a queue to an exchange with a routing key. Unbound queues will not receive messages, so this is necessary.rNh7j>h8h;h=hYh?}rO(hA]hB]hC]hD]hF]uhHKhIhh1]rPhRXpBinds a queue to an exchange with a routing key. Unbound queues will not receive messages, so this is necessary.rQrR}rS(h6jNh7jLubaubeubh3)rT}rU(h6Uh7jh8h;h=h>h?}rV(hA]hB]hC]hD]rWh)ahF]rXhauhHKhIhh1]rY(hK)rZ}r[(h6X'queue.delete(name, if_unused, if_empty)r\h7jTh8h;h=hOh?}r](hA]hB]hC]hD]hF]uhHKhIhh1]r^hRX'queue.delete(name, if_unused, if_empty)r_r`}ra(h6j\h7jZubaubhV)rb}rc(h6X Deletes a queue and its binding.rdh7jTh8h;h=hYh?}re(hA]hB]hC]hD]hF]uhHKhIhh1]rfhRX Deletes a queue and its binding.rgrh}ri(h6jdh7jbubaubeubh3)rj}rk(h6Uh7jh8h;h=h>h?}rl(hA]hB]hC]hD]rmh$ahF]rnh auhHKhIhh1]ro(hK)rp}rq(h6X exchange.delete(name, if_unused)rrh7jjh8h;h=hOh?}rs(hA]hB]hC]hD]hF]uhHKhIhh1]rthRX exchange.delete(name, if_unused)rurv}rw(h6jrh7jpubaubhV)rx}ry(h6XDeletes an exchange.rzh7jjh8h;h=hYh?}r{(hA]hB]hC]hD]hF]uhHKhIhh1]r|hRXDeletes an exchange.r}r~}r(h6jzh7jxubaubhV)r}r(h6X1**NOTE**: Declaring does not necessarily mean "create". When you declare you *assert* that the entity exists and that it's operable. There is no rule as to whom should initially create the exchange/queue/binding, whether consumer or producer. Usually the first one to need it will be the one to create it.h7jjh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]r(h\)r}r(h6X**NOTE**h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRXNOTErr}r(h6Uh7jubah=hdubhRXE: Declaring does not necessarily mean "create". When you declare you rr}r(h6XE: Declaring does not necessarily mean "create". When you declare you h7jubh)r}r(h6X*assert*h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRXassertrr}r(h6Uh7jubah=hubhRX that the entity exists and that it's operable. There is no rule as to whom should initially create the exchange/queue/binding, whether consumer or producer. Usually the first one to need it will be the one to create it.rr}r(h6X that the entity exists and that it's operable. There is no rule as to whom should initially create the exchange/queue/binding, whether consumer or producer. Usually the first one to need it will be the one to create it.h7jubeubeubeubh3)r}r(h6Uh7hh8h;h=h>h?}r(hA]hB]hC]hD]rh/ahF]rhauhHKhIhh1]r(hK)r}r(h6XHands-on with the APIrh7jh8h;h=hOh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]rhRXHands-on with the APIrr}r(h6jh7jubaubhV)r}r(h6XCelery comes with a tool called ``camqadm`` (short for celery AMQP admin). It's used for simple admnistration tasks like creating/deleting queues and exchanges, purging queues and sending messages. In short it's for simple command-line access to the AMQP API.h7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]r(hRX Celery comes with a tool called rr}r(h6X Celery comes with a tool called h7jubj)r}r(h6X ``camqadm``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRXcamqadmrr}r(h6Uh7jubah=jubhRX (short for celery AMQP admin). It's used for simple admnistration tasks like creating/deleting queues and exchanges, purging queues and sending messages. In short it's for simple command-line access to the AMQP API.rr}r(h6X (short for celery AMQP admin). It's used for simple admnistration tasks like creating/deleting queues and exchanges, purging queues and sending messages. In short it's for simple command-line access to the AMQP API.h7jubeubhV)r}r(h6X|You can write commands directly in the arguments to ``camqadm``, or just start with no arguments to start it in shell-mode::h7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]r(hRX4You can write commands directly in the arguments to rr}r(h6X4You can write commands directly in the arguments to h7jubj)r}r(h6X ``camqadm``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRXcamqadmrr}r(h6Uh7jubah=jubhRX<, or just start with no arguments to start it in shell-mode:rr}r(h6X<, or just start with no arguments to start it in shell-mode:h7jubeubh)r}r(h6XI$ camqadm -> connecting to amqp://guest@localhost:5672/. -> connected. 1>h7jh8h;h=hh?}r(hhhD]hC]hA]hB]hF]uhHKhIhh1]rhRXI$ camqadm -> connecting to amqp://guest@localhost:5672/. -> connected. 1>rr}r(h6Uh7jubaubhV)r}r(h6XHere ``1>`` is the prompt. The number is counting the number of commands you have executed. Type ``help`` for a list of commands. It also has autocompletion, so you can start typing a command and then hit the ``tab`` key to show a list of possible matches.h7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]r(hRXHere rr}r(h6XHere h7jubj)r}r(h6X``1>``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRX1>rr}r(h6Uh7jubah=jubhRXV is the prompt. The number is counting the number of commands you have executed. Type rr}r(h6XV is the prompt. The number is counting the number of commands you have executed. Type h7jubj)r}r(h6X``help``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRXhelprr}r(h6Uh7jubah=jubhRXh for a list of commands. It also has autocompletion, so you can start typing a command and then hit the rr}r(h6Xh for a list of commands. It also has autocompletion, so you can start typing a command and then hit the h7jubj)r}r(h6X``tab``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRXtabrr}r(h6Uh7jubah=jubhRX( key to show a list of possible matches.rr}r(h6X( key to show a list of possible matches.h7jubeubhV)r}r(h6X2Now let's create a queue we can send messages to::rh7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]rhRX1Now let's create a queue we can send messages to:rr}r(h6X1Now let's create a queue we can send messages to:h7jubaubh)r}r(h6X1> exchange.declare testexchange direct ok. 2> queue.declare testqueue ok. queue:testqueue messages:0 consumers:0. 3> queue.bind testqueue testexchange testkey ok.h7jh8h;h=hh?}r(hhhD]hC]hA]hB]hF]uhHKhIhh1]rhRX1> exchange.declare testexchange direct ok. 2> queue.declare testqueue ok. queue:testqueue messages:0 consumers:0. 3> queue.bind testqueue testexchange testkey ok.rr}r(h6Uh7jubaubhV)r}r(h6XThis created the direct exchange ``testexchange``, and a queue named ``testqueue``. The queue is bound to the exchange using the routing key ``testkey``.h7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]r(hRX!This created the direct exchange rr}r (h6X!This created the direct exchange h7jubj)r }r (h6X``testexchange``h?}r (hA]hB]hC]hD]hF]uh7jh1]r hRX testexchangerr}r(h6Uh7j ubah=jubhRX, and a queue named rr}r(h6X, and a queue named h7jubj)r}r(h6X ``testqueue``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRX testqueuerr}r(h6Uh7jubah=jubhRX<. The queue is bound to the exchange using the routing key rr}r(h6X<. The queue is bound to the exchange using the routing key h7jubj)r}r(h6X ``testkey``h?}r (hA]hB]hC]hD]hF]uh7jh1]r!hRXtestkeyr"r#}r$(h6Uh7jubah=jubhRX.r%}r&(h6X.h7jubeubhV)r'}r((h6XFrom now on all messages sent to the exchange ``testexchange`` with routing key ``testkey`` will be moved to this queue. We can send a message by using the ``basic.publish`` command::h7jh8h;h=hYh?}r)(hA]hB]hC]hD]hF]uhHKhIhh1]r*(hRX.From now on all messages sent to the exchange r+r,}r-(h6X.From now on all messages sent to the exchange h7j'ubj)r.}r/(h6X``testexchange``h?}r0(hA]hB]hC]hD]hF]uh7j'h1]r1hRX testexchanger2r3}r4(h6Uh7j.ubah=jubhRX with routing key r5r6}r7(h6X with routing key h7j'ubj)r8}r9(h6X ``testkey``h?}r:(hA]hB]hC]hD]hF]uh7j'h1]r;hRXtestkeyr<r=}r>(h6Uh7j8ubah=jubhRXA will be moved to this queue. We can send a message by using the r?r@}rA(h6XA will be moved to this queue. We can send a message by using the h7j'ubj)rB}rC(h6X``basic.publish``h?}rD(hA]hB]hC]hD]hF]uh7j'h1]rEhRX basic.publishrFrG}rH(h6Uh7jBubah=jubhRX command:rIrJ}rK(h6X command:h7j'ubeubh)rL}rM(h6X>4> basic.publish "This is a message!" testexchange testkey ok.h7jh8h;h=hh?}rN(hhhD]hC]hA]hB]hF]uhHKhIhh1]rOhRX>4> basic.publish "This is a message!" testexchange testkey ok.rPrQ}rR(h6Uh7jLubaubhV)rS}rT(h6XNow that the message is sent we can retrieve it again. We use the ``basic.get`` command here, which pops a single message off the queue, this command is not recommended for production as it implies polling, any real application would declare consumers instead.h7jh8h;h=hYh?}rU(hA]hB]hC]hD]hF]uhHKhIhh1]rV(hRXBNow that the message is sent we can retrieve it again. We use the rWrX}rY(h6XBNow that the message is sent we can retrieve it again. We use the h7jSubj)rZ}r[(h6X ``basic.get``h?}r\(hA]hB]hC]hD]hF]uh7jSh1]r]hRX basic.getr^r_}r`(h6Uh7jZubah=jubhRX command here, which pops a single message off the queue, this command is not recommended for production as it implies polling, any real application would declare consumers instead.rarb}rc(h6X command here, which pops a single message off the queue, this command is not recommended for production as it implies polling, any real application would declare consumers instead.h7jSubeubhV)rd}re(h6XPop a message off the queue::rfh7jh8h;h=hYh?}rg(hA]hB]hC]hD]hF]uhHKhIhh1]rhhRXPop a message off the queue:rirj}rk(h6XPop a message off the queue:h7jdubaubh)rl}rm(h6X5> basic.get testqueue {'body': 'This is a message!', 'delivery_info': {'delivery_tag': 1, 'exchange': u'testexchange', 'message_count': 0, 'redelivered': False, 'routing_key': u'testkey'}, 'properties': {}}h7jh8h;h=hh?}rn(hhhD]hC]hA]hB]hF]uhHKhIhh1]rohRX5> basic.get testqueue {'body': 'This is a message!', 'delivery_info': {'delivery_tag': 1, 'exchange': u'testexchange', 'message_count': 0, 'redelivered': False, 'routing_key': u'testkey'}, 'properties': {}}rprq}rr(h6Uh7jlubaubhV)rs}rt(h6XAMQP uses acknowledgment to signify that a message has been received and processed successfully. The message is sent to the next receiver if it has not been acknowledged before the client connection is closed.ruh7jh8h;h=hYh?}rv(hA]hB]hC]hD]hF]uhHKhIhh1]rwhRXAMQP uses acknowledgment to signify that a message has been received and processed successfully. The message is sent to the next receiver if it has not been acknowledged before the client connection is closed.rxry}rz(h6juh7jsubaubhV)r{}r|(h6XPNote the delivery tag listed in the structure above; Within a connection channel, every received message has a unique delivery tag, This tag is used to acknowledge the message. Note that delivery tags are not unique across connections, so in another client the delivery tag ``1`` might point to a different message than in this channel.h7jh8h;h=hYh?}r}(hA]hB]hC]hD]hF]uhHKhIhh1]r~(hRXNote the delivery tag listed in the structure above; Within a connection channel, every received message has a unique delivery tag, This tag is used to acknowledge the message. Note that delivery tags are not unique across connections, so in another client the delivery tag rr}r(h6XNote the delivery tag listed in the structure above; Within a connection channel, every received message has a unique delivery tag, This tag is used to acknowledge the message. Note that delivery tags are not unique across connections, so in another client the delivery tag h7j{ubj)r}r(h6X``1``h?}r(hA]hB]hC]hD]hF]uh7j{h1]rhRX1r}r(h6Uh7jubah=jubhRX9 might point to a different message than in this channel.rr}r(h6X9 might point to a different message than in this channel.h7j{ubeubhV)r}r(h6XAYou can acknowledge the message we received using ``basic.ack``::rh7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]r(hRX2You can acknowledge the message we received using rr}r(h6X2You can acknowledge the message we received using h7jubj)r}r(h6X ``basic.ack``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRX basic.ackrr}r(h6Uh7jubah=jubhRX:r}r(h6X:h7jubeubh)r}r(h6X6> basic.ack 1 ok.h7jh8h;h=hh?}r(hhhD]hC]hA]hB]hF]uhHKhIhh1]rhRX6> basic.ack 1 ok.rr}r(h6Uh7jubaubhV)r}r(h6XMTo clean up after our test session we should delete the entities we created::rh7jh8h;h=hYh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]rhRXLTo clean up after our test session we should delete the entities we created:rr}r(h6XLTo clean up after our test session we should delete the entities we created:h7jubaubh)r}r(h6XU7> queue.delete testqueue ok. 0 messages deleted. 8> exchange.delete testexchange ok.h7jh8h;h=hh?}r(hhhD]hC]hA]hB]hF]uhHKhIhh1]rhRXU7> queue.delete testqueue ok. 0 messages deleted. 8> exchange.delete testexchange ok.rr}r(h6Uh7jubaubeubeubeubah6UU transformerrNU footnote_refsr}rUrefnamesr}r(Xlast-value-cache plug-in]rjahn]rhiauUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rhIhU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNhONUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUO/var/build/user_builds/celery/checkouts/1.0-archived/docs/userguide/routing.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightr Ulongr Uinput_encoding_error_handlerr jUauto_id_prefixr Uidr Udoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(h#j>h,j"h.hh"hxh)jTh/jh(jh-jAh'hh$jjh&jh jh!jh+hh%jh*h4h0juUsubstitution_namesr}rh=hIh?}r(hA]hD]hC]Usourceh;hB]hF]uU footnotesr]rUrefidsr}rub.PKXDDW9celery-1.0-archived/.doctrees/userguide/executing.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xexecuting tasksqNX serializersqNXeta and countdownqNX$connections and connection timeouts.q NX amqp optionsq NXrouting optionsq NuUsubstitution_defsq }q Uparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hUexecuting-tasksqhU serializersqhUeta-and-countdownqh U#connections-and-connection-timeoutsqh U amqp-optionsqh Urouting-optionsquUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceq UUparentq!hUsourceq"cdocutils.nodes reprunicode q#XQ/var/build/user_builds/celery/checkouts/1.0-archived/docs/userguide/executing.rstq$q%}q&bUtagnameq'Usectionq(U attributesq)}q*(Udupnamesq+]Uclassesq,]Ubackrefsq-]Uidsq.]q/haUnamesq0]q1hauUlineq2KUdocumentq3hh]q4(cdocutils.nodes title q5)q6}q7(h XExecuting Tasksq8h!hh"h%h'Utitleq9h)}q:(h+]h,]h-]h.]h0]uh2Kh3hh]q;cdocutils.nodes Text q}q?(h h8h!h6ubaubcdocutils.nodes paragraph q@)qA}qB(h XJExecuting tasks is done with ``apply_async``, and its shortcut: ``delay``.qCh!hh"h%h'U paragraphqDh)}qE(h+]h,]h-]h.]h0]uh2Kh3hh]qF(h>> result = add.apply_async(args=[10, 10], countdown=3) >>> result.get() # this takes at least 3 seconds to return 20h!j h"h%h'hph)}r.(hrhsXpythonhthuh.]h-]h+]h,]h0]uh2K+h3hh]r/h>> result = add.apply_async(args=[10, 10], countdown=3) >>> result.get() # this takes at least 3 seconds to return 20r0r1}r2(h Uh!j,ubaubh@)r3}r4(h XNote that your task is guaranteed to be executed at some time *after* the specified date and time has passed, but not necessarily at that exact time.h!j h"h%h'hDh)}r5(h+]h,]h-]h.]h0]uh2K1h3hh]r6(hNote that your task is guaranteed to be executed at some time r7r8}r9(h X>Note that your task is guaranteed to be executed at some time h!j3ubcdocutils.nodes emphasis r:)r;}r<(h X*after*h)}r=(h+]h,]h-]h.]h0]uh!j3h]r>hThe default serializer (pickle) supports Python objects, like rr}r(h X>The default serializer (pickle) supports Python objects, like h!jubhJ)r}r(h X ``datetime``h)}r(h+]h,]h-]h.]h0]uh!jh]rh>> add.apply_async(args=[10, 10], serializer="json")h!jh"h%h'hph)}r((hrhsXpythonhthuh.]h-]h+]h,]h0]uh2K]h3hh]r)h>> add.apply_async(args=[10, 10], serializer="json")r*r+}r,(h Uh!j&ubaubeubh)r-}r.(h Uh!hh"h%h'h(h)}r/(h+]h,]h-]h.]r0hah0]r1h auh2Kbh3hh]r2(h5)r3}r4(h X$Connections and connection timeouts.r5h!j-h"h%h'h9h)}r6(h+]h,]h-]h.]h0]uh2Kbh3hh]r7h(hr?}r@(h X, where h!jubhJ)rA}rB(h X``*``h)}rC(h+]h,]h-]h.]h0]uh!jh]rDh>> CompressVideoTask.apply_async(args=[filename], ... routing_key="video.compress") >>> ImageRotateTask.apply_async(args=[filename, 360], routing_key="image.rotate") >>> ImageCropTask.apply_async(args=[filename, selection], routing_key="image.crop") >>> UpdateReccomendationsTask.apply_async(routing_key="misc.recommend")h!jh"h%h'hph)}r(hrhsXpythonhthuh.]h-]h+]h,]h0]uh2Kh3hh]rh>> CompressVideoTask.apply_async(args=[filename], ... routing_key="video.compress") >>> ImageRotateTask.apply_async(args=[filename, 360], routing_key="image.rotate") >>> ImageCropTask.apply_async(args=[filename, selection], routing_key="image.crop") >>> UpdateReccomendationsTask.apply_async(routing_key="misc.recommend")rr}r(h Uh!jubaubh@)r}r(h XLater, if the crop task is consuming a lot of resources, we can bind some new workers to handle just the ``"image.crop"`` task, by creating a new queue that binds to ``"image.crop``".h!jh"h%h'hDh)}r(h+]h,]h-]h.]h0]uh2Kh3hh]r(h}r?(h X``0``h)}r@(h+]h,]h-]h.]h0]uh!j7h]rAhubah'hRubh(hUhh7hhhUfieldq?h}q@(h!]h"]h#]h$]h&]uh(Kh)hh]qA(cdocutils.nodes field_name qB)qC}qD(hXReleaseqEh}qF(h!]h"]h#]h$]h&]uhh=h]qGh2XReleaseqHqI}qJ(hhEhhCubahU field_nameqKubcdocutils.nodes field_body qL)qM}qN(hX |version|qOh}qP(h!]h"]h#]h$]h&]uhh=h]qQcdocutils.nodes paragraph qR)qS}qT(hhOhhMhhhU paragraphqUh}qV(h!]h"]h#]h$]h&]uh(Kh]qWh2X1.0qXqY}qZ(hU1.0q[hhSubaubahU field_bodyq\ubeubh<)q]}q^(hUhh7hhhh?h}q_(h!]h"]h#]h$]h&]uh(Kh)hh]q`(hB)qa}qb(hXDateqch}qd(h!]h"]h#]h$]h&]uhh]h]qeh2XDateqfqg}qh(hhchhaubahhKubhL)qi}qj(hX|today| h}qk(h!]h"]h#]h$]h&]uhh]h]qlhR)qm}qn(hX|today|qohhihhhhUh}qp(h!]h"]h#]h$]h&]uh(Kh]qqh2XFebruary 04, 2014qrqs}qt(hXFebruary 04, 2014hhmubaubahh\ubeubeubcdocutils.nodes compound qu)qv}qw(hUhhhhhUcompoundqxh}qy(h!]h"]qzUtoctree-wrapperq{ah#]h$]h&]uh(Nh)hh]q|csphinx.addnodes toctree q})q~}q(hUhhvhhhUtoctreeqh}q(UnumberedqKU includehiddenqhXuserguide/indexqU titlesonlyqUglobqh$]h#]h!]h"]h&]Uentriesq]q(NXuserguide/tasksqqNXuserguide/executingqqNXuserguide/remote-tasksqqNXuserguide/routingqqeUhiddenqU includefilesq]q(hhhheUmaxdepthqKuh(Kh]ubaubeubahUU transformerqNU footnote_refsq}qUrefnamesq}qUsymbol_footnotesq]qUautofootnote_refsq]qUsymbol_footnote_refsq]qU citationsq]qh)hU current_lineqNUtransform_messagesq]qUreporterqNUid_startqKU autofootnotesq]qU citation_refsq}qUindirect_targetsq]qUsettingsq(cdocutils.frontend Values qoq}q(Ufootnote_backlinksqKUrecord_dependenciesqNU rfc_base_urlqUhttp://tools.ietf.org/html/qU tracebackqUpep_referencesqNUstrip_commentsqNU toc_backlinksqUentryqU language_codeqUenqU datestampqNU report_levelqKU _destinationqNU halt_levelqKU strip_classesqNh/NUerror_encoding_error_handlerqUbackslashreplaceqUdebugqNUembed_stylesheetqĉUoutput_encoding_error_handlerqUstrictqU sectnum_xformqKUdump_transformsqNU docinfo_xformqKUwarning_streamqNUpep_file_url_templateqUpep-%04dqUexit_status_levelqKUconfigqNUstrict_visitorqNUcloak_email_addressesqЈUtrim_footnote_reference_spaceqщUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqՉU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUM/var/build/user_builds/celery/checkouts/1.0-archived/docs/userguide/index.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qhhsUsubstitution_namesq}qhh)h}q(h!]h$]h#]Usourcehh"]h&]uU footnotesq]qUrefidsq}qub.PKXDD}M[[5celery-1.0-archived/.doctrees/userguide/tasks.doctreecdocutils.nodes document q)q}q(U nametypesq}q(XtasksqNX task optionsqNXblog/models.pyqNX blog/views.pyq NXmessage and routing optionsq NXperformance and strategiesq NXdefault keyword argumentsq NXtips and best practicesq NXignore results you don't wantqNX'disable rate limits if they're not usedqNX blog/tasks.pyqNXstateqNXakismetqXusing a custom retry delayqNX memcachedqX how it worksqNX data localityqNX granularityqNXloggingqNX$avoid launching synchronous subtasksqNX"retrying a task if something failsqNX akismet.pyqXexampleqNuUsubstitution_defsq}qUparse_messagesq]q Ucurrent_sourceq!NU decorationq"NUautofootnote_startq#KUnameidsq$}q%(hUtasksq&hU task-optionsq'hUblog-models-pyq(h U blog-views-pyq)h Umessage-and-routing-optionsq*h Uperformance-and-strategiesq+h Udefault-keyword-argumentsq,h Utips-and-best-practicesq-hUignore-results-you-don-t-wantq.hU'disable-rate-limits-if-they-re-not-usedq/hU blog-tasks-pyq0hUstateq1hUakismetq2hUusing-a-custom-retry-delayq3hU memcachedq4hU how-it-worksq5hU data-localityq6hU granularityq7hUloggingq8hU$avoid-launching-synchronous-subtasksq9hU"retrying-a-task-if-something-failsq:hU akismet-pyq;hUexampleqcdocutils.nodes section q?)q@}qA(U rawsourceqBUUparentqChUsourceqDcdocutils.nodes reprunicode qEXM/var/build/user_builds/celery/checkouts/1.0-archived/docs/userguide/tasks.rstqFqG}qHbUtagnameqIUsectionqJU attributesqK}qL(UdupnamesqM]UclassesqN]UbackrefsqO]UidsqP]qQ(Xmodule-celery.task.baseqRh&eUnamesqS]qThauUlineqUKUdocumentqVhh=]qW(cdocutils.nodes title qX)qY}qZ(hBXTasksq[hCh@hDhGhIUtitleq\hK}q](hM]hN]hO]hP]hS]uhUKhVhh=]q^cdocutils.nodes Text q_XTasksq`qa}qb(hBh[hChYubaubcsphinx.addnodes index qc)qd}qe(hBUhCh@hDhGhIUindexqfhK}qg(hP]hO]hM]hN]hS]Uentries]qh(UsingleqiXcelery.task.base (module)Xmodule-celery.task.baseUtqjauhUKhVhh=]ubcdocutils.nodes paragraph qk)ql}qm(hBXA task is a class that encapsulates a function and its execution options. Given a function ``create_user``, that takes two arguments: ``username`` and ``password``, you can create a task like this:hCh@hDhGhIU paragraphqnhK}qo(hM]hN]hO]hP]hS]uhUKhVhh=]qp(h_X[A task is a class that encapsulates a function and its execution options. Given a function qqqr}qs(hBX[A task is a class that encapsulates a function and its execution options. Given a function hChlubcdocutils.nodes literal qt)qu}qv(hBX``create_user``hK}qw(hM]hN]hO]hP]hS]uhChlh=]qxh_X create_userqyqz}q{(hBUhChuubahIUliteralq|ubh_X, that takes two arguments: q}q~}q(hBX, that takes two arguments: hChlubht)q}q(hBX ``username``hK}q(hM]hN]hO]hP]hS]uhChlh=]qh_Xusernameqq}q(hBUhChubahIh|ubh_X and qq}q(hBX and hChlubht)q}q(hBX ``password``hK}q(hM]hN]hO]hP]hS]uhChlh=]qh_Xpasswordqq}q(hBUhChubahIh|ubh_X", you can create a task like this:qq}q(hBX", you can create a task like this:hChlubeubcdocutils.nodes literal_block q)q}q(hBXfrom celery.task import Task class CreateUserTask(Task): def run(self, username, password): create_user(username, password)hCh@hDhGhIU literal_blockqhK}q(UlinenosqUlanguageqXpythonU xml:spaceqUpreserveqhP]hO]hM]hN]hS]uhUK hVhh=]qh_Xfrom celery.task import Task class CreateUserTask(Task): def run(self, username, password): create_user(username, password)qq}q(hBUhChubaubhk)q}q(hBXnFor convenience there is a shortcut decorator that turns any function into a task, ``celery.decorators.task``:hCh@hDhGhIhnhK}q(hM]hN]hO]hP]hS]uhUKhVhh=]q(h_XSFor convenience there is a shortcut decorator that turns any function into a task, qq}q(hBXSFor convenience there is a shortcut decorator that turns any function into a task, hChubht)q}q(hBX``celery.decorators.task``hK}q(hM]hN]hO]hP]hS]uhChh=]qh_Xcelery.decorators.taskqq}q(hBUhChubahIh|ubh_X:q}q(hBX:hChubeubh)q}q(hBXfrom celery.decorators import task from django.contrib.auth import User @task def create_user(username, password): User.objects.create(username=username, password=password)hCh@hDhGhIhhK}q(hhXpythonhhhP]hO]hM]hN]hS]uhUKhVhh=]qh_Xfrom celery.decorators import task from django.contrib.auth import User @task def create_user(username, password): User.objects.create(username=username, password=password)qq}q(hBUhChubaubhk)q}q(hBXLThe task decorator takes the same execution options the ``Task`` class does:qhCh@hDhGhIhnhK}q(hM]hN]hO]hP]hS]uhUKhVhh=]q(h_X8The task decorator takes the same execution options the qq}q(hBX8The task decorator takes the same execution options the hChubht)q}q(hBX``Task``hK}q(hM]hN]hO]hP]hS]uhChh=]qh_XTaskqąq}q(hBUhChubahIh|ubh_X class does:qDžq}q(hBX class does:hChubeubh)q}q(hBX{@task(serializer="json") def create_user(username, password): User.objects.create(username=username, password=password)hCh@hDhGhIhhK}q(hhXpythonhhhP]hO]hM]hN]hS]uhUK!hVhh=]qh_X{@task(serializer="json") def create_user(username, password): User.objects.create(username=username, password=password)q΅q}q(hBUhChubaubhk)q}q(hBXAn alternative way to use the decorator is to give the function as an argument instead, but if you do this be sure to set the resulting tasks ``__name__`` attribute, so pickle is able to find it in reverse:hCh@hDhGhIhnhK}q(hM]hN]hO]hP]hS]uhUK(hVhh=]q(h_XAn alternative way to use the decorator is to give the function as an argument instead, but if you do this be sure to set the resulting tasks qՅq}q(hBXAn alternative way to use the decorator is to give the function as an argument instead, but if you do this be sure to set the resulting tasks hChubht)q}q(hBX ``__name__``hK}q(hM]hN]hO]hP]hS]uhChh=]qh_X__name__q܅q}q(hBUhChubahIh|ubh_X4 attribute, so pickle is able to find it in reverse:q߅q}q(hBX4 attribute, so pickle is able to find it in reverse:hChubeubh)q}q(hBXUcreate_user_task = task()(create_user) create_user_task.__name__ = "create_user_task"hCh@hDhGhIhhK}q(hhXpythonhhhP]hO]hM]hN]hS]uhUK,hVhh=]qh_XUcreate_user_task = task()(create_user) create_user_task.__name__ = "create_user_task"q慁q}q(hBUhChubaubh?)q}q(hBUhCh@hDhGhIhJhK}q(hM]hN]hO]hP]qh,ahS]qh auhUK3hVhh=]q(hX)q}q(hBXDefault keyword argumentsqhChhDhGhIh\hK}q(hM]hN]hO]hP]hS]uhUK3hVhh=]qh_XDefault keyword argumentsqq}q(hBhhChubaubhk)q}q(hBXCelery supports a set of default arguments that can be forwarded to any task. Tasks can choose not to take these, or list the ones they want. The worker will do the right thing.qhChhDhGhIhnhK}q(hM]hN]hO]hP]hS]uhUK5hVhh=]qh_XCelery supports a set of default arguments that can be forwarded to any task. Tasks can choose not to take these, or list the ones they want. The worker will do the right thing.qq}q(hBhhChubaubhk)q}r(hBX*The current default keyword arguments are:rhChhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUK9hVhh=]rh_X*The current default keyword arguments are:rr}r(hBjhChubaubcdocutils.nodes bullet_list r)r}r (hBUhChhDhGhIU bullet_listr hK}r (Ubulletr X*hP]hO]hM]hN]hS]uhUK;hVhh=]r (cdocutils.nodes list_item r)r}r(hBX{logfile The log file, can be passed on to ``self.get_logger`` to gain access to the workers log file. See `Logging`_. hCjhDhGhIU list_itemrhK}r(hM]hN]hO]hP]hS]uhUNhVhh=]r(hk)r}r(hBXlogfilerhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUK;h=]rh_Xlogfilerr}r(hBjhCjubaubcdocutils.nodes block_quote r)r}r(hBUhK}r(hM]hN]hO]hP]hS]uhCjh=]r hk)r!}r"(hBXmThe log file, can be passed on to ``self.get_logger`` to gain access to the workers log file. See `Logging`_.hCjhDhGhIhnhK}r#(hM]hN]hO]hP]hS]uhUK=h=]r$(h_X"The log file, can be passed on to r%r&}r'(hBX"The log file, can be passed on to hCj!ubht)r(}r)(hBX``self.get_logger``hK}r*(hM]hN]hO]hP]hS]uhCj!h=]r+h_Xself.get_loggerr,r-}r.(hBUhCj(ubahIh|ubh_X- to gain access to the workers log file. See r/r0}r1(hBX- to gain access to the workers log file. See hCj!ubcdocutils.nodes reference r2)r3}r4(hBX `Logging`_Uresolvedr5KhCj!hIU referencer6hK}r7(UnameXLogginghP]hO]hM]hN]hS]Urefidr8h8uh=]r9h_XLoggingr:r;}r<(hBUhCj3ubaubh_X.r=}r>(hBX.hCj!ubeubahIU block_quoter?ubeubj)r@}rA(hBXloglevel The loglevel used. hCjhDhGhIjhK}rB(hM]hN]hO]hP]hS]uhUNhVhh=]rC(hk)rD}rE(hBXloglevelrFhCj@hDhGhIhnhK}rG(hM]hN]hO]hP]hS]uhUK@h=]rHh_XloglevelrIrJ}rK(hBjFhCjDubaubj)rL}rM(hBUhK}rN(hM]hN]hO]hP]hS]uhCj@h=]rOhk)rP}rQ(hBXThe loglevel used.rRhCjLhDhGhIhnhK}rS(hM]hN]hO]hP]hS]uhUKBh=]rTh_XThe loglevel used.rUrV}rW(hBjRhCjPubaubahIj?ubeubj)rX}rY(hBX0task_id The unique id of the executing task. hCjhDhGhIjhK}rZ(hM]hN]hO]hP]hS]uhUNhVhh=]r[(hk)r\}r](hBXtask_idr^hCjXhDhGhIhnhK}r_(hM]hN]hO]hP]hS]uhUKDh=]r`h_Xtask_idrarb}rc(hBj^hCj\ubaubj)rd}re(hBUhK}rf(hM]hN]hO]hP]hS]uhCjXh=]rghk)rh}ri(hBX$The unique id of the executing task.rjhCjdhDhGhIhnhK}rk(hM]hN]hO]hP]hS]uhUKFh=]rlh_X$The unique id of the executing task.rmrn}ro(hBjjhCjhubaubahIj?ubeubj)rp}rq(hBX)task_name Name of the executing task. hCjhDhGhIjhK}rr(hM]hN]hO]hP]hS]uhUNhVhh=]rs(hk)rt}ru(hBX task_namervhCjphDhGhIhnhK}rw(hM]hN]hO]hP]hS]uhUKHh=]rxh_X task_nameryrz}r{(hBjvhCjtubaubj)r|}r}(hBUhK}r~(hM]hN]hO]hP]hS]uhCjph=]rhk)r}r(hBXName of the executing task.rhCj|hDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKJh=]rh_XName of the executing task.rr}r(hBjhCjubaubahIj?ubeubj)r}r(hBXbtask_retries How many times the current task has been retried. An integer starting at ``0``. hCjhDhGhIjhK}r(hM]hN]hO]hP]hS]uhUNhVhh=]r(hk)r}r(hBX task_retriesrhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKLh=]rh_X task_retriesrr}r(hBjhCjubaubj)r}r(hBUhK}r(hM]hN]hO]hP]hS]uhCjh=]rhk)r}r(hBXOHow many times the current task has been retried. An integer starting at ``0``.hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKNh=]r(h_XIHow many times the current task has been retried. An integer starting at rr}r(hBXIHow many times the current task has been retried. An integer starting at hCjubht)r}r(hBX``0``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_X0r}r(hBUhCjubahIh|ubh_X.r}r(hBX.hCjubeubahIj?ubeubj)r}r(hBXgtask_is_eager Set to ``True`` if the task is executed locally in the client, and not by a worker. hCjhDhGhIjhK}r(hM]hN]hO]hP]hS]uhUNhVhh=]r(hk)r}r(hBX task_is_eagerrhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKQh=]rh_X task_is_eagerrr}r(hBjhCjubaubj)r}r(hBUhK}r(hM]hN]hO]hP]hS]uhCjh=]rhk)r}r(hBXSSet to ``True`` if the task is executed locally in the client, and not by a worker.hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKSh=]r(h_XSet to rr}r(hBXSet to hCjubht)r}r(hBX``True``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_XTruerr}r(hBUhCjubahIh|ubh_XD if the task is executed locally in the client, and not by a worker.rr}r(hBXD if the task is executed locally in the client, and not by a worker.hCjubeubahIj?ubeubj)r}r(hBXkdelivery_info Additional message delivery information. This is a mapping containing the exchange and routing key used to deliver this task. It's used by e.g. :meth:`retry` to resend the task to the same destination queue. **NOTE** As some messaging backends doesn't have advanced routing capabilities, you can't trust the availability of keys in this mapping. hCjhDhGhIjhK}r(hM]hN]hO]hP]hS]uhUNhVhh=]r(hk)r}r(hBX delivery_inforhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKVh=]rh_X delivery_inforr}r(hBjhCjubaubhk)r}r(hBXAdditional message delivery information. This is a mapping containing the exchange and routing key used to deliver this task. It's used by e.g. :meth:`retry` to resend the task to the same destination queue.hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKXh=]r(h_XAdditional message delivery information. This is a mapping containing the exchange and routing key used to deliver this task. It's used by e.g. rr}r(hBXAdditional message delivery information. This is a mapping containing the exchange and routing key used to deliver this task. It's used by e.g. hCjubcsphinx.addnodes pending_xref r)r}r(hBX :meth:`retry`rhCjhDhGhIU pending_xrefrhK}r(UreftypeXmethUrefwarnrU reftargetrXretryU refdomainXpyrhP]hO]U refexplicithM]hN]hS]UrefdocrXuserguide/tasksrUpy:classrNU py:modulerXcelery.task.baseruhUKXh=]rht)r}r(hBjhK}r(hM]hN]r(UxrefrjXpy-methrehO]hP]hS]uhCjh=]rh_Xretry()rr}r(hBUhCjubahIh|ubaubh_X2 to resend the task to the same destination queue.rr}r(hBX2 to resend the task to the same destination queue.hCjubeubhk)r}r(hBX**NOTE** As some messaging backends doesn't have advanced routing capabilities, you can't trust the availability of keys in this mapping.hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUK\h=]r(cdocutils.nodes strong r)r}r(hBX**NOTE**hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_XNOTErr}r(hBUhCjubahIUstrongrubh_X As some messaging backends doesn't have advanced routing capabilities, you can't trust the availability of keys in this mapping.rr}r(hBX As some messaging backends doesn't have advanced routing capabilities, you can't trust the availability of keys in this mapping.hCjubeubeubeubeubh?)r}r(hBUU referencedr KhCh@hDhGhIhJhK}r (hM]hN]hO]hP]r h8ahS]r hauhUKahVhh=]r (hX)r}r(hBXLoggingrhCjhDhGhIh\hK}r(hM]hN]hO]hP]hS]uhUKahVhh=]rh_XLoggingrr}r(hBjhCjubaubhk)r}r(hBXJYou can use the workers logger to add diagnostic output to the worker log:rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKchVhh=]rh_XJYou can use the workers logger to add diagnostic output to the worker log:rr}r(hBjhCjubaubh)r}r(hBXclass AddTask(Task): def run(self, x, y, **kwargs): logger = self.get_logger(**kwargs) logger.info("Adding %s + %s" % (x, y)) return x + yhCjhDhGhIhhK}r (hhXpythonhhhP]hO]hM]hN]hS]uhUKfhVhh=]r!h_Xclass AddTask(Task): def run(self, x, y, **kwargs): logger = self.get_logger(**kwargs) logger.info("Adding %s + %s" % (x, y)) return x + yr"r#}r$(hBUhCjubaubhk)r%}r&(hBXor using the decorator syntax:r'hCjhDhGhIhnhK}r((hM]hN]hO]hP]hS]uhUKnhVhh=]r)h_Xor using the decorator syntax:r*r+}r,(hBj'hCj%ubaubh)r-}r.(hBX@task() def add(x, y, **kwargs): logger = add.get_logger(**kwargs) logger.info("Adding %s + %s" % (x, y)) return x + yhCjhDhGhIhhK}r/(hhXpythonhhhP]hO]hM]hN]hS]uhUKphVhh=]r0h_X@task() def add(x, y, **kwargs): logger = add.get_logger(**kwargs) logger.info("Adding %s + %s" % (x, y)) return x + yr1r2}r3(hBUhCj-ubaubhk)r4}r5(hBXThere are several logging levels available, and the workers ``loglevel`` setting decides whether or not they will be written to the log file.hCjhDhGhIhnhK}r6(hM]hN]hO]hP]hS]uhUKxhVhh=]r7(h_X<There are several logging levels available, and the workers r8r9}r:(hBX<There are several logging levels available, and the workers hCj4ubht)r;}r<(hBX ``loglevel``hK}r=(hM]hN]hO]hP]hS]uhCj4h=]r>h_Xloglevelr?r@}rA(hBUhCj;ubahIh|ubh_XE setting decides whether or not they will be written to the log file.rBrC}rD(hBXE setting decides whether or not they will be written to the log file.hCj4ubeubeubh?)rE}rF(hBUhCh@hDhGhIhJhK}rG(hM]hN]hO]hP]rHh:ahS]rIhauhUK}hVhh=]rJ(hX)rK}rL(hBX"Retrying a task if something failsrMhCjEhDhGhIh\hK}rN(hM]hN]hO]hP]hS]uhUK}hVhh=]rOh_X"Retrying a task if something failsrPrQ}rR(hBjMhCjKubaubhk)rS}rT(hBXSimply use :meth:`Task.retry` to re-send the task. It will do the right thing, and respect the :attr:`Task.max_retries` attribute:hCjEhDhGhIhnhK}rU(hM]hN]hO]hP]hS]uhUKhVhh=]rV(h_X Simply use rWrX}rY(hBX Simply use hCjSubj)rZ}r[(hBX:meth:`Task.retry`r\hCjShDhGhIjhK}r](UreftypeXmethjjX Task.retryU refdomainXpyr^hP]hO]U refexplicithM]hN]hS]jjjNjjuhUKh=]r_ht)r`}ra(hBj\hK}rb(hM]hN]rc(jj^Xpy-methrdehO]hP]hS]uhCjZh=]reh_X Task.retry()rfrg}rh(hBUhCj`ubahIh|ubaubh_XB to re-send the task. It will do the right thing, and respect the rirj}rk(hBXB to re-send the task. It will do the right thing, and respect the hCjSubj)rl}rm(hBX:attr:`Task.max_retries`rnhCjShDhGhIjhK}ro(UreftypeXattrjjXTask.max_retriesU refdomainXpyrphP]hO]U refexplicithM]hN]hS]jjjNjjuhUKh=]rqht)rr}rs(hBjnhK}rt(hM]hN]ru(jjpXpy-attrrvehO]hP]hS]uhCjlh=]rwh_XTask.max_retriesrxry}rz(hBUhCjrubahIh|ubaubh_X attribute:r{r|}r}(hBX attribute:hCjSubeubh)r~}r(hBX@task() def send_twitter_status(oauth, tweet, **kwargs): try: twitter = Twitter(oauth) twitter.update_status(tweet) except (Twitter.FailWhaleError, Twitter.LoginError), exc: send_twitter_status.retry(args=[oauth, tweet], kwargs=kwargs, exc=exc)hCjEhDhGhIhhK}r(hhXpythonhhhP]hO]hM]hN]hS]uhUKhVhh=]rh_X@task() def send_twitter_status(oauth, tweet, **kwargs): try: twitter = Twitter(oauth) twitter.update_status(tweet) except (Twitter.FailWhaleError, Twitter.LoginError), exc: send_twitter_status.retry(args=[oauth, tweet], kwargs=kwargs, exc=exc)rr}r(hBUhCj~ubaubhk)r}r(hBXhHere we used the ``exc`` argument to pass the current exception to :meth:`Task.retry`. At each step of the retry this exception is available as the tombstone (result) of the task. When :attr:`Task.max_retries` has been exceeded this is the exception raised. However, if an ``exc`` argument is not provided the :exc:`RetryTaskError` exception is raised instead.hCjEhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKhVhh=]r(h_XHere we used the rr}r(hBXHere we used the hCjubht)r}r(hBX``exc``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_Xexcrr}r(hBUhCjubahIh|ubh_X+ argument to pass the current exception to rr}r(hBX+ argument to pass the current exception to hCjubj)r}r(hBX:meth:`Task.retry`rhCjhDhGhIjhK}r(UreftypeXmethjjX Task.retryU refdomainXpyrhP]hO]U refexplicithM]hN]hS]jjjNjjuhUKh=]rht)r}r(hBjhK}r(hM]hN]r(jjXpy-methrehO]hP]hS]uhCjh=]rh_X Task.retry()rr}r(hBUhCjubahIh|ubaubh_Xd. At each step of the retry this exception is available as the tombstone (result) of the task. When rr}r(hBXd. At each step of the retry this exception is available as the tombstone (result) of the task. When hCjubj)r}r(hBX:attr:`Task.max_retries`rhCjhDhGhIjhK}r(UreftypeXattrjjXTask.max_retriesU refdomainXpyrhP]hO]U refexplicithM]hN]hS]jjjNjjuhUKh=]rht)r}r(hBjhK}r(hM]hN]r(jjXpy-attrrehO]hP]hS]uhCjh=]rh_XTask.max_retriesrr}r(hBUhCjubahIh|ubaubh_X@ has been exceeded this is the exception raised. However, if an rr}r(hBX@ has been exceeded this is the exception raised. However, if an hCjubht)r}r(hBX``exc``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_Xexcrr}r(hBUhCjubahIh|ubh_X argument is not provided the rr}r(hBX argument is not provided the hCjubj)r}r(hBX:exc:`RetryTaskError`rhCjhDhGhIjhK}r(UreftypeXexcjjXRetryTaskErrorU refdomainXpyrhP]hO]U refexplicithM]hN]hS]jjjNjjuhUKh=]rht)r}r(hBjhK}r(hM]hN]r(jjXpy-excrehO]hP]hS]uhCjh=]rh_XRetryTaskErrorrr}r(hBUhCjubahIh|ubaubh_X exception is raised instead.rr}r(hBX exception is raised instead.hCjubeubhk)r}r(hBX**Important note:** The task has to take the magic keyword arguments in order for max retries to work properly, this is because it keeps track of the current number of retries using the ``task_retries`` keyword argument passed on to the task. In addition, it also uses the ``task_id`` keyword argument to use the same task id, and ``delivery_info`` to route the retried task to the same destination.hCjEhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKhVhh=]r(j)r}r(hBX**Important note:**hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_XImportant note:rr}r(hBUhCjubahIjubh_X The task has to take the magic keyword arguments in order for max retries to work properly, this is because it keeps track of the current number of retries using the rr}r(hBX The task has to take the magic keyword arguments in order for max retries to work properly, this is because it keeps track of the current number of retries using the hCjubht)r}r(hBX``task_retries``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_X task_retriesrr}r(hBUhCjubahIh|ubh_XG keyword argument passed on to the task. In addition, it also uses the rr}r(hBXG keyword argument passed on to the task. In addition, it also uses the hCjubht)r}r(hBX ``task_id``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_Xtask_idrr}r(hBUhCjubahIh|ubh_X/ keyword argument to use the same task id, and rr}r(hBX/ keyword argument to use the same task id, and hCjubht)r}r(hBX``delivery_info``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_X delivery_inforr}r(hBUhCjubahIh|ubh_X3 to route the retried task to the same destination.rr}r(hBX3 to route the retried task to the same destination.hCjubeubh?)r}r(hBUhCjEhDhGhIhJhK}r(hM]hN]hO]hP]rh3ahS]rhauhUKhVhh=]r(hX)r}r (hBXUsing a custom retry delayr hCjhDhGhIh\hK}r (hM]hN]hO]hP]hS]uhUKhVhh=]r h_XUsing a custom retry delayr r}r(hBj hCjubaubhk)r}r(hBXWhen a task is to be retried, it will wait for a given amount of time before doing so. The default delay is in the :attr:`Task.default_retry_delay` attribute on the task. By default this is set to 3 minutes. Note that the unit for setting the delay is in seconds (int or float).hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKhVhh=]r(h_XsWhen a task is to be retried, it will wait for a given amount of time before doing so. The default delay is in the rr}r(hBXsWhen a task is to be retried, it will wait for a given amount of time before doing so. The default delay is in the hCjubj)r}r(hBX :attr:`Task.default_retry_delay`rhCjhDhGhIjhK}r(UreftypeXattrjjXTask.default_retry_delayU refdomainXpyrhP]hO]U refexplicithM]hN]hS]jjjNjjuhUKh=]rht)r}r(hBjhK}r(hM]hN]r (jjXpy-attrr!ehO]hP]hS]uhCjh=]r"h_XTask.default_retry_delayr#r$}r%(hBUhCjubahIh|ubaubh_X attribute on the task. By default this is set to 3 minutes. Note that the unit for setting the delay is in seconds (int or float).r&r'}r((hBX attribute on the task. By default this is set to 3 minutes. Note that the unit for setting the delay is in seconds (int or float).hCjubeubhk)r)}r*(hBX_You can also provide the ``countdown`` argument to :meth:`Task.retry` to override this default.hCjhDhGhIhnhK}r+(hM]hN]hO]hP]hS]uhUKhVhh=]r,(h_XYou can also provide the r-r.}r/(hBXYou can also provide the hCj)ubht)r0}r1(hBX ``countdown``hK}r2(hM]hN]hO]hP]hS]uhCj)h=]r3h_X countdownr4r5}r6(hBUhCj0ubahIh|ubh_X argument to r7r8}r9(hBX argument to hCj)ubj)r:}r;(hBX:meth:`Task.retry`r<hCj)hDhGhIjhK}r=(UreftypeXmethjjX Task.retryU refdomainXpyr>hP]hO]U refexplicithM]hN]hS]jjjNjjuhUKh=]r?ht)r@}rA(hBj<hK}rB(hM]hN]rC(jj>Xpy-methrDehO]hP]hS]uhCj:h=]rEh_X Task.retry()rFrG}rH(hBUhCj@ubahIh|ubaubh_X to override this default.rIrJ}rK(hBX to override this default.hCj)ubeubh)rL}rM(hBXVclass MyTask(Task): default_retry_delay = 30 * 60 # retry in 30 minutes def run(self, x, y, **kwargs): try: ... except Exception, exc: self.retry([x, y], kwargs, exc=exc, countdown=60) # override the default and # - retry in 1 minutehCjhDhGhIhhK}rN(hhXpythonhhhP]hO]hM]hN]hS]uhUKhVhh=]rOh_XVclass MyTask(Task): default_retry_delay = 30 * 60 # retry in 30 minutes def run(self, x, y, **kwargs): try: ... except Exception, exc: self.retry([x, y], kwargs, exc=exc, countdown=60) # override the default and # - retry in 1 minuterPrQ}rR(hBUhCjLubaubeubeubh?)rS}rT(hBUhCh@hDhGhIhJhK}rU(hM]hN]hO]hP]rVh'ahS]rWhauhUKhVhh=]rX(hX)rY}rZ(hBX Task optionsr[hCjShDhGhIh\hK}r\(hM]hN]hO]hP]hS]uhUKhVhh=]r]h_X Task optionsr^r_}r`(hBj[hCjYubaubj)ra}rb(hBUhCjShDhGhIj hK}rc(j X*hP]hO]hM]hN]hS]uhUKhVhh=]rd(j)re}rf(hBXname The name the task is registered as. You can set this name manually, or just use the default which is automatically generated using the module and class name. hCjahDhGhIjhK}rg(hM]hN]hO]hP]hS]uhUNhVhh=]rh(hk)ri}rj(hBXnamerkhCjehDhGhIhnhK}rl(hM]hN]hO]hP]hS]uhUKh=]rmh_Xnamernro}rp(hBjkhCjiubaubj)rq}rr(hBUhK}rs(hM]hN]hO]hP]hS]uhCjeh=]rthk)ru}rv(hBXThe name the task is registered as. You can set this name manually, or just use the default which is automatically generated using the module and class name.rwhCjqhDhGhIhnhK}rx(hM]hN]hO]hP]hS]uhUKh=]ryh_XThe name the task is registered as. You can set this name manually, or just use the default which is automatically generated using the module and class name.rzr{}r|(hBjwhCjuubaubahIj?ubeubj)r}}r~(hBX}abstract Abstract classes are not registered, but are used as the superclass when making new task types by subclassing. hCjahDhGhIjhK}r(hM]hN]hO]hP]hS]uhUNhVhh=]r(hk)r}r(hBXabstractrhCj}hDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKh=]rh_Xabstractrr}r(hBjhCjubaubj)r}r(hBUhK}r(hM]hN]hO]hP]hS]uhCj}h=]rhk)r}r(hBXnAbstract classes are not registered, but are used as the superclass when making new task types by subclassing.rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKh=]rh_XnAbstract classes are not registered, but are used as the superclass when making new task types by subclassing.rr}r(hBjhCjubaubahIj?ubeubj)r}r(hBXmax_retries The maximum number of attempted retries before giving up. If this is exceeded the :exc`celery.execptions.MaxRetriesExceeded` exception will be raised. Note that you have to retry manually, it's not something that happens automatically. hCjahDhGhIjhK}r(hM]hN]hO]hP]hS]uhUNhVhh=]r(hk)r}r(hBX max_retriesrhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKh=]rh_X max_retriesrr}r(hBjhCjubaubj)r}r(hBUhK}r(hM]hN]hO]hP]hS]uhCjh=]rhk)r}r(hBXThe maximum number of attempted retries before giving up. If this is exceeded the :exc`celery.execptions.MaxRetriesExceeded` exception will be raised. Note that you have to retry manually, it's not something that happens automatically.rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKh=]rh_XThe maximum number of attempted retries before giving up. If this is exceeded the :exc`celery.execptions.MaxRetriesExceeded` exception will be raised. Note that you have to retry manually, it's not something that happens automatically.rr}r(hBjhCjubaubahIj?ubeubj)r}r(hBXdefault_retry_delay Default time in seconds before a retry of the task should be executed. Can be either an ``int`` or a ``float``. Default is a 1 minute delay (``60 seconds``). hCjahDhGhIjhK}r(hM]hN]hO]hP]hS]uhUNhVhh=]r(hk)r}r(hBXdefault_retry_delayrhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKh=]rh_Xdefault_retry_delayrr}r(hBjhCjubaubj)r}r(hBUhK}r(hM]hN]hO]hP]hS]uhCjh=]rhk)r}r(hBXDefault time in seconds before a retry of the task should be executed. Can be either an ``int`` or a ``float``. Default is a 1 minute delay (``60 seconds``).hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKh=]r(h_XXDefault time in seconds before a retry of the task should be executed. Can be either an rr}r(hBXXDefault time in seconds before a retry of the task should be executed. Can be either an hCjubht)r}r(hBX``int``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_Xintrr}r(hBUhCjubahIh|ubh_X or a rr}r(hBX or a hCjubht)r}r(hBX ``float``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_Xfloatrr}r(hBUhCjubahIh|ubh_X. Default is a 1 minute delay (rr}r(hBX. Default is a 1 minute delay (hCjubht)r}r(hBX``60 seconds``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_X 60 secondsrr}r(hBUhCjubahIh|ubh_X).rr}r(hBX).hCjubeubahIj?ubeubj)r}r(hBXrate_limit Set the rate limit for this task type, that is, how many times in a given period of time is the task allowed to run. If this is ``None`` no rate limit is in effect. If it is an integer, it is interpreted as "tasks per second". The rate limits can be specified in seconds, minutes or hours by appending ``"/s"``, ``"/m"`` or "``/h"``" to the value. Example: ``"100/m" (hundred tasks a minute). Default is the ``CELERY_DEFAULT_RATE_LIMIT`` setting, which if not specified means rate limiting for tasks is turned off by default. hCjahDhGhIjhK}r(hM]hN]hO]hP]hS]uhUNhVhh=]r(hk)r}r(hBX rate_limitrhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKh=]rh_X rate_limitrr}r(hBjhCjubaubhk)r}r(hBXtSet the rate limit for this task type, that is, how many times in a given period of time is the task allowed to run.rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKh=]rh_XtSet the rate limit for this task type, that is, how many times in a given period of time is the task allowed to run.rr}r(hBjhCjubaubhk)r}r(hBXmIf this is ``None`` no rate limit is in effect. If it is an integer, it is interpreted as "tasks per second".hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKh=]r(h_X If this is rr}r(hBX If this is hCjubht)r}r(hBX``None``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_XNonerr}r(hBUhCjubahIh|ubh_XZ no rate limit is in effect. If it is an integer, it is interpreted as "tasks per second".rr}r(hBXZ no rate limit is in effect. If it is an integer, it is interpreted as "tasks per second".hCjubeubhk)r}r(hBX*The rate limits can be specified in seconds, minutes or hours by appending ``"/s"``, ``"/m"`` or "``/h"``" to the value. Example: ``"100/m" (hundred tasks a minute). Default is the ``CELERY_DEFAULT_RATE_LIMIT`` setting, which if not specified means rate limiting for tasks is turned off by default.hCjhDhGhIhnhK}r (hM]hN]hO]hP]hS]uhUKh=]r (h_XKThe rate limits can be specified in seconds, minutes or hours by appending r r }r (hBXKThe rate limits can be specified in seconds, minutes or hours by appending hCjubht)r}r(hBX``"/s"``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_X"/s"rr}r(hBUhCjubahIh|ubh_X, rr}r(hBX, hCjubht)r}r(hBX``"/m"``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_X"/m"rr}r(hBUhCjubahIh|ubh_X or "rr }r!(hBX or "hCjubht)r"}r#(hBX``/h"``hK}r$(hM]hN]hO]hP]hS]uhCjh=]r%h_X/h"r&r'}r((hBUhCj"ubahIh|ubh_X" to the value. Example: r)r*}r+(hBX" to the value. Example: hCjubht)r,}r-(hBXP``"100/m" (hundred tasks a minute). Default is the ``CELERY_DEFAULT_RATE_LIMIT``hK}r.(hM]hN]hO]hP]hS]uhCjh=]r/h_XL"100/m" (hundred tasks a minute). Default is the ``CELERY_DEFAULT_RATE_LIMITr0r1}r2(hBUhCj,ubahIh|ubh_XX setting, which if not specified means rate limiting for tasks is turned off by default.r3r4}r5(hBXX setting, which if not specified means rate limiting for tasks is turned off by default.hCjubeubeubj)r6}r7(hBXXignore_result Don't store the status and return value. This means you can't use the :class:`celery.result.AsyncResult` to check if the task is done, or get its return value. Only use if you need the performance and is able live without these features. Any exceptions raised will store the return value/status as usual. hCjahDNhIjhK}r8(hM]hN]hO]hP]hS]uhUNhVhh=]r9(hk)r:}r;(hBX ignore_resultr<hCj6hDhGhIhnhK}r=(hM]hN]hO]hP]hS]uhUKh=]r>h_X ignore_resultr?r@}rA(hBj<hCj:ubaubcdocutils.nodes definition_list rB)rC}rD(hBUhK}rE(hM]hN]hO]hP]hS]uhCj6h=]rFcdocutils.nodes definition_list_item rG)rH}rI(hBX1Don't store the status and return value. This means you can't use the :class:`celery.result.AsyncResult` to check if the task is done, or get its return value. Only use if you need the performance and is able live without these features. Any exceptions raised will store the return value/status as usual. hCjChDhGhIUdefinition_list_itemrJhK}rK(hM]hN]hO]hP]hS]uhUKh=]rL(cdocutils.nodes term rM)rN}rO(hBX=Don't store the status and return value. This means you can'trPhCjHhDhGhIUtermrQhK}rR(hM]hN]hO]hP]hS]uhUKh=]rSh_X=Don't store the status and return value. This means you can'trTrU}rV(hBjPhCjNubaubcdocutils.nodes definition rW)rX}rY(hBUhK}rZ(hM]hN]hO]hP]hS]uhCjHh=]r[hk)r\}r](hBXuse the :class:`celery.result.AsyncResult` to check if the task is done, or get its return value. Only use if you need the performance and is able live without these features. Any exceptions raised will store the return value/status as usual.hCjXhDhGhIhnhK}r^(hM]hN]hO]hP]hS]uhUKh=]r_(h_Xuse the r`ra}rb(hBXuse the hCj\ubj)rc}rd(hBX":class:`celery.result.AsyncResult`rehCj\hDhGhIjhK}rf(UreftypeXclassjjXcelery.result.AsyncResultU refdomainXpyrghP]hO]U refexplicithM]hN]hS]jjjNjjuhUKh=]rhht)ri}rj(hBjehK}rk(hM]hN]rl(jjgXpy-classrmehO]hP]hS]uhCjch=]rnh_Xcelery.result.AsyncResultrorp}rq(hBUhCjiubahIh|ubaubh_X to check if the task is done, or get its return value. Only use if you need the performance and is able live without these features. Any exceptions raised will store the return value/status as usual.rrrs}rt(hBX to check if the task is done, or get its return value. Only use if you need the performance and is able live without these features. Any exceptions raised will store the return value/status as usual.hCj\ubeubahIU definitionruubeubahIUdefinition_listrvubeubj)rw}rx(hBXdisable_error_emails Disable error e-mails for this task. Default is ``False``. *Note:* You can also turn off error e-mails globally using the ``CELERY_SEND_TASK_ERROR_EMAILS`` setting. hCjahDhGhIjhK}ry(hM]hN]hO]hP]hS]uhUNhVhh=]rz(hk)r{}r|(hBXdisable_error_emailsr}hCjwhDhGhIhnhK}r~(hM]hN]hO]hP]hS]uhUKh=]rh_Xdisable_error_emailsrr}r(hBj}hCj{ubaubj)r}r(hBUhK}r(hM]hN]hO]hP]hS]uhCjwh=]rhk)r}r(hBXDisable error e-mails for this task. Default is ``False``. *Note:* You can also turn off error e-mails globally using the ``CELERY_SEND_TASK_ERROR_EMAILS`` setting.hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKh=]r(h_X0Disable error e-mails for this task. Default is rr}r(hBX0Disable error e-mails for this task. Default is hCjubht)r}r(hBX ``False``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_XFalserr}r(hBUhCjubahIh|ubh_X. rr}r(hBX. hCjubcdocutils.nodes emphasis r)r}r(hBX*Note:*hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_XNote:rr}r(hBUhCjubahIUemphasisrubh_X8 You can also turn off error e-mails globally using the rr}r(hBX8 You can also turn off error e-mails globally using the hCjubht)r}r(hBX!``CELERY_SEND_TASK_ERROR_EMAILS``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_XCELERY_SEND_TASK_ERROR_EMAILSrr}r(hBUhCjubahIh|ubh_X setting.rr}r(hBX setting.hCjubeubahIj?ubeubj)r}r(hBXLserializer A string identifying the default serialization method to use. Defaults to the ``CELERY_TASK_SERIALIZER`` setting. Can be ``pickle`` ``json``, ``yaml``, or any custom serialization methods that have been registered with :mod:`carrot.serialization.registry`. Please see :doc:`executing` for more information. hCjahDhGhIjhK}r(hM]hN]hO]hP]hS]uhUNhVhh=]r(hk)r}r(hBX serializerrhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKh=]rh_X serializerrr}r(hBjhCjubaubj)r}r(hBUhK}r(hM]hN]hO]hP]hS]uhCjh=]r(hk)r}r(hBXA string identifying the default serialization method to use. Defaults to the ``CELERY_TASK_SERIALIZER`` setting. Can be ``pickle`` ``json``, ``yaml``, or any custom serialization methods that have been registered with :mod:`carrot.serialization.registry`.hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKh=]r(h_XNA string identifying the default serialization method to use. Defaults to the rr}r(hBXNA string identifying the default serialization method to use. Defaults to the hCjubht)r}r(hBX``CELERY_TASK_SERIALIZER``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_XCELERY_TASK_SERIALIZERrr}r(hBUhCjubahIh|ubh_X setting. Can be rr}r(hBX setting. Can be hCjubht)r}r(hBX ``pickle``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_Xpicklerr}r(hBUhCjubahIh|ubh_X r}r(hBX hCjubht)r}r(hBX``json``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_Xjsonrr}r(hBUhCjubahIh|ubh_X, rr}r(hBX, hCjubht)r}r(hBX``yaml``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_Xyamlrr}r(hBUhCjubahIh|ubh_XE, or any custom serialization methods that have been registered with rr}r(hBXE, or any custom serialization methods that have been registered with hCjubj)r}r(hBX$:mod:`carrot.serialization.registry`rhCjhDhGhIjhK}r(UreftypeXmodjjXcarrot.serialization.registryU refdomainXpyrhP]hO]U refexplicithM]hN]hS]jjjNjjuhUKh=]rht)r}r(hBjhK}r(hM]hN]r(jjXpy-modrehO]hP]hS]uhCjh=]rh_Xcarrot.serialization.registryrr}r(hBUhCjubahIh|ubaubh_X.r}r(hBX.hCjubeubhk)r}r(hBX1Please see :doc:`executing` for more information.hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUKh=]r(h_X Please see rr}r(hBX Please see hCjubj)r}r(hBX:doc:`executing`rhCjhDhGhIjhK}r(UreftypeXdocrjjX executingU refdomainUhP]hO]U refexplicithM]hN]hS]jjuhUKh=]r ht)r }r (hBjhK}r (hM]hN]r (jjehO]hP]hS]uhCjh=]rh_X executingrr}r(hBUhCj ubahIh|ubaubh_X for more information.rr}r(hBX for more information.hCjubeubehIj?ubeubeubh?)r}r(hBUhCjShDhGhIhJhK}r(hM]hN]hO]hP]rh*ahS]rh auhUKhVhh=]r(hX)r}r(hBXMessage and routing optionsrhCjhDhGhIh\hK}r(hM]hN]hO]hP]hS]uhUKhVhh=]rh_XMessage and routing optionsr r!}r"(hBjhCjubaubj)r#}r$(hBUhCjhDhGhIj hK}r%(j X*hP]hO]hM]hN]hS]uhUKhVhh=]r&(j)r'}r((hBXIrouting_key Override the global default ``routing_key`` for this task. hCj#hDNhIjhK}r)(hM]hN]hO]hP]hS]uhUNhVhh=]r*jB)r+}r,(hBUhK}r-(hM]hN]hO]hP]hS]uhCj'h=]r.jG)r/}r0(hBXGrouting_key Override the global default ``routing_key`` for this task. hCj+hDhGhIjJhK}r1(hM]hN]hO]hP]hS]uhUKh=]r2(jM)r3}r4(hBX routing_keyr5hCj/hDhGhIjQhK}r6(hM]hN]hO]hP]hS]uhUKh=]r7h_X routing_keyr8r9}r:(hBj5hCj3ubaubjW)r;}r<(hBUhK}r=(hM]hN]hO]hP]hS]uhCj/h=]r>hk)r?}r@(hBX:Override the global default ``routing_key`` for this task.hCj;hDhGhIhnhK}rA(hM]hN]hO]hP]hS]uhUKh=]rB(h_XOverride the global default rCrD}rE(hBXOverride the global default hCj?ubht)rF}rG(hBX``routing_key``hK}rH(hM]hN]hO]hP]hS]uhCj?h=]rIh_X routing_keyrJrK}rL(hBUhCjFubahIh|ubh_X for this task.rMrN}rO(hBX for this task.hCj?ubeubahIjuubeubahIjvubaubj)rP}rQ(hBXCexchange Override the global default ``exchange`` for this task. hCj#hDNhIjhK}rR(hM]hN]hO]hP]hS]uhUNhVhh=]rSjB)rT}rU(hBUhK}rV(hM]hN]hO]hP]hS]uhCjPh=]rWjG)rX}rY(hBXAexchange Override the global default ``exchange`` for this task. hCjThDhGhIjJhK}rZ(hM]hN]hO]hP]hS]uhUKh=]r[(jM)r\}r](hBXexchanger^hCjXhDhGhIjQhK}r_(hM]hN]hO]hP]hS]uhUKh=]r`h_Xexchangerarb}rc(hBj^hCj\ubaubjW)rd}re(hBUhK}rf(hM]hN]hO]hP]hS]uhCjXh=]rghk)rh}ri(hBX7Override the global default ``exchange`` for this task.hCjdhDhGhIhnhK}rj(hM]hN]hO]hP]hS]uhUKh=]rk(h_XOverride the global default rlrm}rn(hBXOverride the global default hCjhubht)ro}rp(hBX ``exchange``hK}rq(hM]hN]hO]hP]hS]uhCjhh=]rrh_Xexchangersrt}ru(hBUhCjoubahIh|ubh_X for this task.rvrw}rx(hBX for this task.hCjhubeubahIjuubeubahIjvubaubj)ry}rz(hBXmandatory If set, the task message has mandatory routing. By default the task is silently dropped by the broker if it can't be routed to a queue. However - If the task is mandatory, an exception will be raised instead. hCj#hDNhIjhK}r{(hM]hN]hO]hP]hS]uhUNhVhh=]r|jB)r}}r~(hBUhK}r(hM]hN]hO]hP]hS]uhCjyh=]rjG)r}r(hBXmandatory If set, the task message has mandatory routing. By default the task is silently dropped by the broker if it can't be routed to a queue. However - If the task is mandatory, an exception will be raised instead. hCj}hDhGhIjJhK}r(hM]hN]hO]hP]hS]uhUMh=]r(jM)r}r(hBX mandatoryrhCjhDhGhIjQhK}r(hM]hN]hO]hP]hS]uhUMh=]rh_X mandatoryrr}r(hBjhCjubaubjW)r}r(hBUhK}r(hM]hN]hO]hP]hS]uhCjh=]rhk)r}r(hBXIf set, the task message has mandatory routing. By default the task is silently dropped by the broker if it can't be routed to a queue. However - If the task is mandatory, an exception will be raised instead.rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMh=]rh_XIf set, the task message has mandatory routing. By default the task is silently dropped by the broker if it can't be routed to a queue. However - If the task is mandatory, an exception will be raised instead.rr}r(hBjhCjubaubahIjuubeubahIjvubaubj)r}r(hBXimmediate Request immediate delivery. If the task cannot be routed to a task worker immediately, an exception will be raised. This is instead of the default behavior, where the broker will accept and queue the task, but with no guarantee that the task will ever be executed. hCj#hDNhIjhK}r(hM]hN]hO]hP]hS]uhUNhVhh=]rjB)r}r(hBUhK}r(hM]hN]hO]hP]hS]uhCjh=]rjG)r}r(hBXimmediate Request immediate delivery. If the task cannot be routed to a task worker immediately, an exception will be raised. This is instead of the default behavior, where the broker will accept and queue the task, but with no guarantee that the task will ever be executed. hCjhDhGhIjJhK}r(hM]hN]hO]hP]hS]uhUM h=]r(jM)r}r(hBX immediaterhCjhDhGhIjQhK}r(hM]hN]hO]hP]hS]uhUM h=]rh_X immediaterr}r(hBjhCjubaubjW)r}r(hBUhK}r(hM]hN]hO]hP]hS]uhCjh=]rhk)r}r(hBXRequest immediate delivery. If the task cannot be routed to a task worker immediately, an exception will be raised. This is instead of the default behavior, where the broker will accept and queue the task, but with no guarantee that the task will ever be executed.rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMh=]rh_XRequest immediate delivery. If the task cannot be routed to a task worker immediately, an exception will be raised. This is instead of the default behavior, where the broker will accept and queue the task, but with no guarantee that the task will ever be executed.rr}r(hBjhCjubaubahIjuubeubahIjvubaubj)r}r(hBXpriority The message priority. A number from ``0`` to ``9``, where ``0`` is the highest. **Note:** RabbitMQ does not support priorities yet. hCj#hDNhIjhK}r(hM]hN]hO]hP]hS]uhUNhVhh=]rjB)r}r(hBUhK}r(hM]hN]hO]hP]hS]uhCjh=]rjG)r}r(hBXpriority The message priority. A number from ``0`` to ``9``, where ``0`` is the highest. **Note:** RabbitMQ does not support priorities yet. hCjhDhGhIjJhK}r(hM]hN]hO]hP]hS]uhUMh=]r(jM)r}r(hBXpriorityrhCjhDhGhIjQhK}r(hM]hN]hO]hP]hS]uhUMh=]rh_Xpriorityrr}r(hBjhCjubaubjW)r}r(hBUhK}r(hM]hN]hO]hP]hS]uhCjh=]rhk)r}r(hBXThe message priority. A number from ``0`` to ``9``, where ``0`` is the highest. **Note:** RabbitMQ does not support priorities yet.hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUM h=]r(h_X$The message priority. A number from rr}r(hBX$The message priority. A number from hCjubht)r}r(hBX``0``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_X0r}r(hBUhCjubahIh|ubh_X to rr}r(hBX to hCjubht)r}r(hBX``9``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_X9r}r(hBUhCjubahIh|ubh_X, where rr}r(hBX, where hCjubht)r}r(hBX``0``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_X0r}r(hBUhCjubahIh|ubh_X is the highest. rr}r(hBX is the highest. hCjubj)r}r(hBX **Note:**hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_XNote:rr}r(hBUhCjubahIjubh_X* RabbitMQ does not support priorities yet.rr}r(hBX* RabbitMQ does not support priorities yet.hCjubeubahIjuubeubahIjvubaubeubhk)r}r(hBXPSee :doc:`executing` for more information about the messaging options available.hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMhVhh=]r(h_XSee rr}r(hBXSee hCjubj)r}r(hBX:doc:`executing`rhCjhDhGhIjhK}r(UreftypeXdocrjjX executingU refdomainUhP]hO]U refexplicithM]hN]hS]jjuhUMh=]r ht)r }r (hBjhK}r (hM]hN]r (jjehO]hP]hS]uhCjh=]rh_X executingrr}r(hBUhCj ubahIh|ubaubh_X< for more information about the messaging options available.rr}r(hBX< for more information about the messaging options available.hCjubeubeubeubh?)r}r(hBUhCh@hDhGhIhJhK}r(hM]hN]hO]hP]rhr?}r@(hBj;hCj9ubaubhk)rA}rB(hBX"The comment model looks like this:rChCj3hDhGhIhnhK}rD(hM]hN]hO]hP]hS]uhUM!hVhh=]rEh_X"The comment model looks like this:rFrG}rH(hBjChCjAubaubh)rI}rJ(hBXfrom django.db import models from django.utils.translation import ugettext_lazy as _ class Comment(models.Model): name = models.CharField(_("name"), max_length=64) email_address = models.EmailField(_("e-mail address")) homepage = models.URLField(_("home page"), blank=True, verify_exists=False) comment = models.TextField(_("comment")) pub_date = models.DateTimeField(_("Published date"), editable=False, auto_add_now=True) is_spam = models.BooleanField(_("spam?"), default=False, editable=False) class Meta: verbose_name = _("comment") verbose_name_plural = _("comments")hCj3hDhGhIhhK}rK(hhXpythonhhhP]hO]hM]hN]hS]uhUM#hVhh=]rLh_Xfrom django.db import models from django.utils.translation import ugettext_lazy as _ class Comment(models.Model): name = models.CharField(_("name"), max_length=64) email_address = models.EmailField(_("e-mail address")) homepage = models.URLField(_("home page"), blank=True, verify_exists=False) comment = models.TextField(_("comment")) pub_date = models.DateTimeField(_("Published date"), editable=False, auto_add_now=True) is_spam = models.BooleanField(_("spam?"), default=False, editable=False) class Meta: verbose_name = _("comment") verbose_name_plural = _("comments")rMrN}rO(hBUhCjIubaubhk)rP}rQ(hBXIn the view where the comment is posted, we first write the comment to the database, then we launch the spam filter task in the background.rRhCj3hDhGhIhnhK}rS(hM]hN]hO]hP]hS]uhUM9hVhh=]rTh_XIn the view where the comment is posted, we first write the comment to the database, then we launch the spam filter task in the background.rUrV}rW(hBjRhCjPubaubeubh?)rX}rY(hBUhCjhDhGhIhJhK}rZ(hM]hN]hO]hP]r[h)ahS]r\h auhUM=hVhh=]r](hX)r^}r_(hBX blog/views.pyr`hCjXhDhGhIh\hK}ra(hM]hN]hO]hP]hS]uhUM=hVhh=]rbh_X blog/views.pyrcrd}re(hBj`hCj^ubaubh)rf}rg(hBX from django import forms frmo django.http import HttpResponseRedirect from django.template.context import RequestContext from django.shortcuts import get_object_or_404, render_to_response from blog import tasks from blog.models import Comment class CommentForm(forms.ModelForm): class Meta: model = Comment def add_comment(request, slug, template_name="comments/create.html"): post = get_object_or_404(Entry, slug=slug) remote_addr = request.META.get("REMOTE_ADDR") if request.method == "post": form = CommentForm(request.POST, request.FILES) if form.is_valid(): comment = form.save() # Check spam asynchronously. tasks.spam_filter.delay(comment_id=comment.id, remote_addr=remote_addr) return HttpResponseRedirect(post.get_absolute_url()) else: form = CommentForm() context = RequestContext(request, {"form": form}) return render_to_response(template_name, context_instance=context)hCjXhDhGhIhhK}rh(hhXpythonhhhP]hO]hM]hN]hS]uhUM?hVhh=]rih_X from django import forms frmo django.http import HttpResponseRedirect from django.template.context import RequestContext from django.shortcuts import get_object_or_404, render_to_response from blog import tasks from blog.models import Comment class CommentForm(forms.ModelForm): class Meta: model = Comment def add_comment(request, slug, template_name="comments/create.html"): post = get_object_or_404(Entry, slug=slug) remote_addr = request.META.get("REMOTE_ADDR") if request.method == "post": form = CommentForm(request.POST, request.FILES) if form.is_valid(): comment = form.save() # Check spam asynchronously. tasks.spam_filter.delay(comment_id=comment.id, remote_addr=remote_addr) return HttpResponseRedirect(post.get_absolute_url()) else: form = CommentForm() context = RequestContext(request, {"form": form}) return render_to_response(template_name, context_instance=context)rjrk}rl(hBUhCjfubaubhk)rm}rn(hBXTo filter spam in comments we use `Akismet`_, the service used to filter spam in comments posted to the free weblog platform `Wordpress`. `Akismet`_ is free for personal use, but for commercial use you need to pay. You have to sign up to their service to get an API key.hCjXhDhGhIhnhK}ro(hM]hN]hO]hP]hS]uhUMchVhh=]rp(h_X"To filter spam in comments we use rqrr}rs(hBX"To filter spam in comments we use hCjmubj2)rt}ru(hBX `Akismet`_j5KhCjmhIj6hK}rv(UnameXAkismetUrefurirwXhttp://akismet.com/faq/rxhP]hO]hM]hN]hS]uh=]ryh_XAkismetrzr{}r|(hBUhCjtubaubh_XQ, the service used to filter spam in comments posted to the free weblog platform r}r~}r(hBXQ, the service used to filter spam in comments posted to the free weblog platform hCjmubcdocutils.nodes title_reference r)r}r(hBX `Wordpress`hK}r(hM]hN]hO]hP]hS]uhCjmh=]rh_X Wordpressrr}r(hBUhCjubahIUtitle_referencerubh_X. rr}r(hBX. hCjmubj2)r}r(hBX `Akismet`_j5KhCjmhIj6hK}r(UnameXAkismetjwjxhP]hO]hM]hN]hS]uh=]rh_XAkismetrr}r(hBUhCjubaubh_Xz is free for personal use, but for commercial use you need to pay. You have to sign up to their service to get an API key.rr}r(hBXz is free for personal use, but for commercial use you need to pay. You have to sign up to their service to get an API key.hCjmubeubhk)r}r(hBXZTo make API calls to `Akismet`_ we use the `akismet.py`_ library written by Michael Foord.hCjXhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMhhVhh=]r(h_XTo make API calls to rr}r(hBXTo make API calls to hCjubj2)r}r(hBX `Akismet`_j5KhCjhIj6hK}r(UnameXAkismetjwjxhP]hO]hM]hN]hS]uh=]rh_XAkismetrr}r(hBUhCjubaubh_X we use the rr}r(hBX we use the hCjubj2)r}r(hBX `akismet.py`_j5KhCjhIj6hK}r(UnameX akismet.pyrjwX0http://www.voidspace.org.uk/downloads/akismet.pyrhP]hO]hM]hN]hS]uh=]rh_X akismet.pyrr}r(hBUhCjubaubh_X" library written by Michael Foord.rr}r(hBX" library written by Michael Foord.hCjubeubeubh?)r}r(hBUhCjhDhGhIhJhK}r(hM]hN]hO]hP]rh0ahS]rhauhUMlhVhh=]r(hX)r}r(hBX blog/tasks.pyrhCjhDhGhIh\hK}r(hM]hN]hO]hP]hS]uhUMlhVhh=]rh_X blog/tasks.pyrr}r(hBjhCjubaubh)r}r(hBXfrom akismet import Akismet from celery.decorators import task from django.core.exceptions import ImproperlyConfigured from django.contrib.sites.models import Site from blog.models import Comment @task def spam_filter(comment_id, remote_addr=None, **kwargs): logger = spam_filter.get_logger(**kwargs) logger.info("Running spam filter for comment %s" % comment_id) comment = Comment.objects.get(pk=comment_id) current_domain = Site.objects.get_current().domain akismet = Akismet(settings.AKISMET_KEY, "http://%s" % domain) if not akismet.verify_key(): raise ImproperlyConfigured("Invalid AKISMET_KEY") is_spam = akismet.comment_check(user_ip=remote_addr, comment_content=comment.comment, comment_author=comment.name, comment_author_email=comment.email_address) if is_spam: comment.is_spam = True comment.save() return is_spamhCjhDhGhIhhK}r(hhXpythonhhhP]hO]hM]hN]hS]uhUMnhVhh=]rh_Xfrom akismet import Akismet from celery.decorators import task from django.core.exceptions import ImproperlyConfigured from django.contrib.sites.models import Site from blog.models import Comment @task def spam_filter(comment_id, remote_addr=None, **kwargs): logger = spam_filter.get_logger(**kwargs) logger.info("Running spam filter for comment %s" % comment_id) comment = Comment.objects.get(pk=comment_id) current_domain = Site.objects.get_current().domain akismet = Akismet(settings.AKISMET_KEY, "http://%s" % domain) if not akismet.verify_key(): raise ImproperlyConfigured("Invalid AKISMET_KEY") is_spam = akismet.comment_check(user_ip=remote_addr, comment_content=comment.comment, comment_author=comment.name, comment_author_email=comment.email_address) if is_spam: comment.is_spam = True comment.save() return is_spamrr}r(hBUhCjubaubcdocutils.nodes target r)r}r(hBX&.. _`Akismet`: http://akismet.com/faq/j KhCjhDhGhIUtargetrhK}r(jwjxhP]rh2ahO]hM]hN]hS]rhauhUMhVhh=]ubj)r}r(hBXB.. _`akismet.py`: http://www.voidspace.org.uk/downloads/akismet.pyj KhCjhDhGhIjhK}r(jwjhP]rh;ahO]hM]hN]hS]rhauhUMhVhh=]ubeubeubh?)r}r(hBUhCh@hDhGhIhJhK}r(hM]hN]hO]hP]rh5ahS]rhauhUMhVhh=]r(hX)r}r(hBX How it worksrhCjhDhGhIh\hK}r(hM]hN]hO]hP]hS]uhUMhVhh=]rh_X How it worksrr}r(hBjhCjubaubhk)r}r(hBXhHere comes the technical details, this part isn't something you need to know, but you may be interested.rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMhVhh=]rh_XhHere comes the technical details, this part isn't something you need to know, but you may be interested.rr}r(hBjhCjubaubhk)r}r(hBXAll defined tasks are listed in a registry. The registry contains a list of task names and their task classes. You can investigate this registry yourself:rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMhVhh=]rh_XAll defined tasks are listed in a registry. The registry contains a list of task names and their task classes. You can investigate this registry yourself:rr}r(hBjhCjubaubh)r}r(hBXQ>>> from celery import registry >>> from celery import task >>> registry.tasks {'celery.delete_expired_task_meta': , 'celery.execute_remote': , 'celery.task.rest.RESTProxyTask': , 'celery.task.rest.Task': , 'celery.map_async': , 'celery.ping': }hCjhDhGhIhhK}r(hhXpythonhhhP]hO]hM]hN]hS]uhUMhVhh=]rh_XQ>>> from celery import registry >>> from celery import task >>> registry.tasks {'celery.delete_expired_task_meta': , 'celery.execute_remote': , 'celery.task.rest.RESTProxyTask': , 'celery.task.rest.Task': , 'celery.map_async': , 'celery.ping': }rr}r(hBUhCjubaubhk)r}r(hBXThis is the list of tasks built-in to celery. Note that we had to import ``celery.task`` first for these to show up. This is because the tasks will only be registered when the module they are defined in is imported.hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMhVhh=]r(h_XIThis is the list of tasks built-in to celery. Note that we had to import rr}r(hBXIThis is the list of tasks built-in to celery. Note that we had to import hCjubht)r}r(hBX``celery.task``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_X celery.taskrr}r(hBUhCjubahIh|ubh_X first for these to show up. This is because the tasks will only be registered when the module they are defined in is imported.rr}r (hBX first for these to show up. This is because the tasks will only be registered when the module they are defined in is imported.hCjubeubhk)r }r (hBX The default loader imports any modules listed in the ``CELERY_IMPORTS`` setting. If using Django it loads all ``tasks.py`` modules for the applications listed in ``INSTALLED_APPS``. If you want to do something special you can create your own loader to do what you want.hCjhDhGhIhnhK}r (hM]hN]hO]hP]hS]uhUMhVhh=]r (h_X5The default loader imports any modules listed in the rr}r(hBX5The default loader imports any modules listed in the hCj ubht)r}r(hBX``CELERY_IMPORTS``hK}r(hM]hN]hO]hP]hS]uhCj h=]rh_XCELERY_IMPORTSrr}r(hBUhCjubahIh|ubh_X' setting. If using Django it loads all rr}r(hBX' setting. If using Django it loads all hCj ubht)r}r(hBX ``tasks.py``hK}r(hM]hN]hO]hP]hS]uhCj h=]rh_Xtasks.pyrr }r!(hBUhCjubahIh|ubh_X( modules for the applications listed in r"r#}r$(hBX( modules for the applications listed in hCj ubht)r%}r&(hBX``INSTALLED_APPS``hK}r'(hM]hN]hO]hP]hS]uhCj h=]r(h_XINSTALLED_APPSr)r*}r+(hBUhCj%ubahIh|ubh_XY. If you want to do something special you can create your own loader to do what you want.r,r-}r.(hBXY. If you want to do something special you can create your own loader to do what you want.hCj ubeubhk)r/}r0(hBXThe entity responsible for registering your task in the registry is a meta class, :class:`TaskType`. This is the default meta class for ``Task``. If you want to register your task manually you can set the ``abstract`` attribute:hCjhDhGhIhnhK}r1(hM]hN]hO]hP]hS]uhUMhVhh=]r2(h_XRThe entity responsible for registering your task in the registry is a meta class, r3r4}r5(hBXRThe entity responsible for registering your task in the registry is a meta class, hCj/ubj)r6}r7(hBX:class:`TaskType`r8hCj/hDhGhIjhK}r9(UreftypeXclassjjXTaskTypeU refdomainXpyr:hP]hO]U refexplicithM]hN]hS]jjjNjjuhUMh=]r;ht)r<}r=(hBj8hK}r>(hM]hN]r?(jj:Xpy-classr@ehO]hP]hS]uhCj6h=]rAh_XTaskTyperBrC}rD(hBUhCj<ubahIh|ubaubh_X%. This is the default meta class for rErF}rG(hBX%. This is the default meta class for hCj/ubht)rH}rI(hBX``Task``hK}rJ(hM]hN]hO]hP]hS]uhCj/h=]rKh_XTaskrLrM}rN(hBUhCjHubahIh|ubh_X=. If you want to register your task manually you can set the rOrP}rQ(hBX=. If you want to register your task manually you can set the hCj/ubht)rR}rS(hBX ``abstract``hK}rT(hM]hN]hO]hP]hS]uhCj/h=]rUh_XabstractrVrW}rX(hBUhCjRubahIh|ubh_X attribute:rYrZ}r[(hBX attribute:hCj/ubeubh)r\}r](hBX'class MyTask(Task): abstract = TruehCjhDhGhIhhK}r^(hhXpythonhhhP]hO]hM]hN]hS]uhUMhVhh=]r_h_X'class MyTask(Task): abstract = Truer`ra}rb(hBUhCj\ubaubhk)rc}rd(hBXHThis way the task won't be registered, but any task subclassing it will.rehCjhDhGhIhnhK}rf(hM]hN]hO]hP]hS]uhUMhVhh=]rgh_XHThis way the task won't be registered, but any task subclassing it will.rhri}rj(hBjehCjcubaubhk)rk}rl(hBXWhen tasks are sent, we don't send the function code, just the name of the task. When the worker receives the message it can just look it up in the task registry to find the execution code.rmhCjhDhGhIhnhK}rn(hM]hN]hO]hP]hS]uhUMhVhh=]roh_XWhen tasks are sent, we don't send the function code, just the name of the task. When the worker receives the message it can just look it up in the task registry to find the execution code.rprq}rr(hBjmhCjkubaubhk)rs}rt(hBXThis means that your workers should always be updated with the same software as the client. This is a drawback, but the alternative is a technical challenge that has yet to be solved.ruhCjhDhGhIhnhK}rv(hM]hN]hO]hP]hS]uhUMhVhh=]rwh_XThis means that your workers should always be updated with the same software as the client. This is a drawback, but the alternative is a technical challenge that has yet to be solved.rxry}rz(hBjuhCjsubaubeubh?)r{}r|(hBUhCh@hDhGhIhJhK}r}(hM]hN]hO]hP]r~h-ahS]rh auhUMhVhh=]r(hX)r}r(hBXTips and Best PracticesrhCj{hDhGhIh\hK}r(hM]hN]hO]hP]hS]uhUMhVhh=]rh_XTips and Best Practicesrr}r(hBjhCjubaubh?)r}r(hBUhCj{hDhGhIhJhK}r(hM]hN]hO]hP]rh.ahS]rhauhUMhVhh=]r(hX)r}r(hBXIgnore results you don't wantrhCjhDhGhIh\hK}r(hM]hN]hO]hP]hS]uhUMhVhh=]rh_XIgnore results you don't wantrr}r(hBjhCjubaubhk)r}r(hBXIf you don't care about the results of a task, be sure to set the ``ignore_result`` option, as storing results wastes time and resources.hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMhVhh=]r(h_XBIf you don't care about the results of a task, be sure to set the rr}r(hBXBIf you don't care about the results of a task, be sure to set the hCjubht)r}r(hBX``ignore_result``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_X ignore_resultrr}r(hBUhCjubahIh|ubh_X6 option, as storing results wastes time and resources.rr}r(hBX6 option, as storing results wastes time and resources.hCjubeubh)r}r(hBX9@task(ignore_result=True) def mytask(...) something()hCjhDhGhIhhK}r(hhXpythonhhhP]hO]hM]hN]hS]uhUMhVhh=]rh_X9@task(ignore_result=True) def mytask(...) something()rr}r(hBUhCjubaubhk)r}r(hBXQResults can even be disabled globally using the ``CELERY_IGNORE_RESULT`` setting.hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMhVhh=]r(h_X0Results can even be disabled globally using the rr}r(hBX0Results can even be disabled globally using the hCjubht)r}r(hBX``CELERY_IGNORE_RESULT``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_XCELERY_IGNORE_RESULTrr}r(hBUhCjubahIh|ubh_X setting.rr}r(hBX setting.hCjubeubeubh?)r}r(hBUhCj{hDhGhIhJhK}r(hM]hN]hO]hP]rh/ahS]rhauhUMhVhh=]r(hX)r}r(hBX'Disable rate limits if they're not usedrhCjhDhGhIh\hK}r(hM]hN]hO]hP]hS]uhUMhVhh=]rh_X'Disable rate limits if they're not usedrr}r(hBjhCjubaubhk)r}r(hBXDisabling rate limits altogether is recommended if you don't have any tasks using them. This is because the rate limit subsystem introduces quite a lot of complexity.rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMhVhh=]rh_XDisabling rate limits altogether is recommended if you don't have any tasks using them. This is because the rate limit subsystem introduces quite a lot of complexity.rr}r(hBjhCjubaubhk)r}r(hBXOSet the ``CELERY_DISABLE_RATE_LIMITS`` setting to globally disable rate limits:hCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMhVhh=]r(h_XSet the rr}r(hBXSet the hCjubht)r}r(hBX``CELERY_DISABLE_RATE_LIMITS``hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_XCELERY_DISABLE_RATE_LIMITSrr}r(hBUhCjubahIh|ubh_X) setting to globally disable rate limits:rr}r(hBX) setting to globally disable rate limits:hCjubeubh)r}r(hBX!CELERY_DISABLE_RATE_LIMITS = TruehCjhDhGhIhhK}r(hhXpythonhhhP]hO]hM]hN]hS]uhUMhVhh=]rh_X!CELERY_DISABLE_RATE_LIMITS = Truerr}r(hBUhCjubaubeubh?)r}r(hBUhCj{hDhGhIhJhK}r(hM]hN]hO]hP]rh9ahS]rhauhUMhVhh=]r(hX)r}r(hBX$Avoid launching synchronous subtasksrhCjhDhGhIh\hK}r(hM]hN]hO]hP]hS]uhUMhVhh=]rh_X$Avoid launching synchronous subtasksrr}r(hBjhCjubaubhk)r}r(hBXHaving a task wait for the result of another task is really inefficient, and may even cause a deadlock if the worker pool is exhausted.rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMhVhh=]rh_XHaving a task wait for the result of another task is really inefficient, and may even cause a deadlock if the worker pool is exhausted.rr}r(hBjhCjubaubhk)r}r(hBXHMake your design asynchronous instead, for example by using *callbacks*.rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMhVhh=]r(h_X<Make your design asynchronous instead, for example by using r r }r (hBX<Make your design asynchronous instead, for example by using hCjubj)r }r (hBX *callbacks*hK}r(hM]hN]hO]hP]hS]uhCjh=]rh_X callbacksrr}r(hBUhCj ubahIjubh_X.r}r(hBX.hCjubeubhk)r}r(hBXBad:rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMhVhh=]rh_XBad:rr}r(hBjhCjubaubh)r}r(hBX{@task() def update_page_info(url): page = fetch_page.delay(url).get() info = parse_page.delay(url, page).get() store_page_info.delay(url, info) @task() def fetch_page(url): return myhttplib.get(url) @task() def parse_page(url, page): return myparser.parse_document(page) @task() def store_page_info(url, info): return PageInfo.objects.create(url, info)hCjhDhGhIhhK}r(hhXpythonhhhP]hO]hM]hN]hS]uhUMhVhh=]r h_X{@task() def update_page_info(url): page = fetch_page.delay(url).get() info = parse_page.delay(url, page).get() store_page_info.delay(url, info) @task() def fetch_page(url): return myhttplib.get(url) @task() def parse_page(url, page): return myparser.parse_document(page) @task() def store_page_info(url, info): return PageInfo.objects.create(url, info)r!r"}r#(hBUhCjubaubhk)r$}r%(hBXGood:r&hCjhDhGhIhnhK}r'(hM]hN]hO]hP]hS]uhUM hVhh=]r(h_XGood:r)r*}r+(hBj&hCj$ubaubh)r,}r-(hBXyfrom functools import curry @task(ignore_result=True) def update_page_info(url): # fetch_page -> parse_page -> store_page callback = curry(parse_page.delay, callback=store_page_info) fetch_page.delay(url, callback=callback) @task(ignore_result=True) def fetch_page(url, callback=None): page = myparser.parse_document(page) if callback: callback(page) @task(ignore_result=True) def parse_page(url, page, callback=None): info = myparser.parse_document(page) if callback: callback(url, info) @task(ignore_result=True) def store_page_info(url, info): PageInfo.objects.create(url, info)hCjhDhGhIhhK}r.(hhXpythonhhhP]hO]hM]hN]hS]uhUM hVhh=]r/h_Xyfrom functools import curry @task(ignore_result=True) def update_page_info(url): # fetch_page -> parse_page -> store_page callback = curry(parse_page.delay, callback=store_page_info) fetch_page.delay(url, callback=callback) @task(ignore_result=True) def fetch_page(url, callback=None): page = myparser.parse_document(page) if callback: callback(page) @task(ignore_result=True) def parse_page(url, page, callback=None): info = myparser.parse_document(page) if callback: callback(url, info) @task(ignore_result=True) def store_page_info(url, info): PageInfo.objects.create(url, info)r0r1}r2(hBUhCj,ubaubeubeubh?)r3}r4(hBUhCh@hDhGhIhJhK}r5(hM]hN]hO]hP]r6h+ahS]r7h auhUM*hVhh=]r8(hX)r9}r:(hBXPerformance and Strategiesr;hCj3hDhGhIh\hK}r<(hM]hN]hO]hP]hS]uhUM*hVhh=]r=h_XPerformance and Strategiesr>r?}r@(hBj;hCj9ubaubh?)rA}rB(hBUhCj3hDhGhIhJhK}rC(hM]hN]hO]hP]rDh7ahS]rEhauhUM-hVhh=]rF(hX)rG}rH(hBX GranularityrIhCjAhDhGhIh\hK}rJ(hM]hN]hO]hP]hS]uhUM-hVhh=]rKh_X GranularityrLrM}rN(hBjIhCjGubaubhk)rO}rP(hBXThe task's granularity is the degree of parallelization your task have. It's better to have many small tasks, than a few long running ones.rQhCjAhDhGhIhnhK}rR(hM]hN]hO]hP]hS]uhUM/hVhh=]rSh_XThe task's granularity is the degree of parallelization your task have. It's better to have many small tasks, than a few long running ones.rTrU}rV(hBjQhCjOubaubhk)rW}rX(hBXWith smaller tasks, you can process more tasks in parallel and the tasks won't run long enough to block the worker from processing other waiting tasks.rYhCjAhDhGhIhnhK}rZ(hM]hN]hO]hP]hS]uhUM2hVhh=]r[h_XWith smaller tasks, you can process more tasks in parallel and the tasks won't run long enough to block the worker from processing other waiting tasks.r\r]}r^(hBjYhCjWubaubhk)r_}r`(hBXHowever, there's a limit. Sending messages takes processing power and bandwidth. If your tasks are so short the overhead of passing them around is worse than just executing them in-line, you should reconsider your strategy. There is no universal answer here.rahCjAhDhGhIhnhK}rb(hM]hN]hO]hP]hS]uhUM5hVhh=]rch_XHowever, there's a limit. Sending messages takes processing power and bandwidth. If your tasks are so short the overhead of passing them around is worse than just executing them in-line, you should reconsider your strategy. There is no universal answer here.rdre}rf(hBjahCj_ubaubeubh?)rg}rh(hBUhCj3hDhGhIhJhK}ri(hM]hN]hO]hP]rjh6ahS]rkhauhUM;hVhh=]rl(hX)rm}rn(hBX Data localityrohCjghDhGhIh\hK}rp(hM]hN]hO]hP]hS]uhUM;hVhh=]rqh_X Data localityrrrs}rt(hBjohCjmubaubhk)ru}rv(hBXThe worker processing the task should be as close to the data as possible. The best would be to have a copy in memory, the worst being a full transfer from another continent.rwhCjghDhGhIhnhK}rx(hM]hN]hO]hP]hS]uhUM=hVhh=]ryh_XThe worker processing the task should be as close to the data as possible. The best would be to have a copy in memory, the worst being a full transfer from another continent.rzr{}r|(hBjwhCjuubaubhk)r}}r~(hBXIf the data is far away, you could try to run another worker at location, or if that's not possible, cache often used data, or preload data you know is going to be used.rhCjghDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMAhVhh=]rh_XIf the data is far away, you could try to run another worker at location, or if that's not possible, cache often used data, or preload data you know is going to be used.rr}r(hBjhCj}ubaubhk)r}r(hBXhThe easiest way to share data between workers is to use a distributed caching system, like `memcached`_.hCjghDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMEhVhh=]r(h_X[The easiest way to share data between workers is to use a distributed caching system, like rr}r(hBX[The easiest way to share data between workers is to use a distributed caching system, like hCjubj2)r}r(hBX `memcached`_j5KhCjhIj6hK}r(UnameX memcachedrjwXhttp://memcached.org/rhP]hO]hM]hN]hS]uh=]rh_X memcachedrr}r(hBUhCjubaubh_X.r}r(hBX.hCjubeubhk)r}r(hBXmFor more information about data-locality, please read http://research.microsoft.com/pubs/70001/tr-2003-24.pdfhCjghDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMHhVhh=]r(h_X6For more information about data-locality, please read rr}r(hBX6For more information about data-locality, please read hCjubj2)r}r(hBX7http://research.microsoft.com/pubs/70001/tr-2003-24.pdfrhK}r(UrefurijhP]hO]hM]hN]hS]uhCjh=]rh_X7http://research.microsoft.com/pubs/70001/tr-2003-24.pdfrr}r(hBUhCjubahIj6ubeubj)r}r(hBX&.. _`memcached`: http://memcached.org/j KhCjghDhGhIjhK}r(jwjhP]rh4ahO]hM]hN]hS]rhauhUMKhVhh=]ubeubh?)r}r(hBUhCj3hDhGhIhJhK}r(hM]hN]hO]hP]rh1ahS]rhauhUMOhVhh=]r(hX)r}r(hBXStaterhCjhDhGhIh\hK}r(hM]hN]hO]hP]hS]uhUMOhVhh=]rh_XStaterr}r(hBjhCjubaubhk)r}r(hBXSince celery is a distributed system, you can't know in which process, or even on what machine the task will run. Indeed you can't even know if the task will run in a timely manner, so please be wary of the state you pass on to tasks.rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMQhVhh=]rh_XSince celery is a distributed system, you can't know in which process, or even on what machine the task will run. Indeed you can't even know if the task will run in a timely manner, so please be wary of the state you pass on to tasks.rr}r(hBjhCjubaubhk)r}r(hBXOne gotcha is Django model objects. They shouldn't be passed on as arguments to task classes, it's almost always better to re-fetch the object from the database instead, as there are possible race conditions involved.rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMUhVhh=]rh_XOne gotcha is Django model objects. They shouldn't be passed on as arguments to task classes, it's almost always better to re-fetch the object from the database instead, as there are possible race conditions involved.rr}r(hBjhCjubaubhk)r}r(hBXxImagine the following scenario where you have an article and a task that automatically expands some abbreviations in it.rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMYhVhh=]rh_XxImagine the following scenario where you have an article and a task that automatically expands some abbreviations in it.rr}r(hBjhCjubaubh)r}r(hBXclass Article(models.Model): title = models.CharField() body = models.TextField() @task def expand_abbreviations(article): article.body.replace("MyCorp", "My Corporation") article.save()hCjhDhGhIhhK}r(hhXpythonhhhP]hO]hM]hN]hS]uhUM\hVhh=]rh_Xclass Article(models.Model): title = models.CharField() body = models.TextField() @task def expand_abbreviations(article): article.body.replace("MyCorp", "My Corporation") article.save()rr}r(hBUhCjubaubhk)r}r(hBXzFirst, an author creates an article and saves it, then the author clicks on a button that initiates the abbreviation task.rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMghVhh=]rh_XzFirst, an author creates an article and saves it, then the author clicks on a button that initiates the abbreviation task.rr}r(hBjhCjubaubcdocutils.nodes doctest_block r)r}r(hBXV>>> article = Article.objects.get(id=102) >>> expand_abbreviations.delay(model_object)hCjhDNhIU doctest_blockrhK}r(hhhP]hO]hM]hN]hS]uhUNhVhh=]rh_XV>>> article = Article.objects.get(id=102) >>> expand_abbreviations.delay(model_object)rr}r(hBUhCjubaubhk)r}r(hBXNow, the queue is very busy, so the task won't be run for another 2 minutes, in the meantime another author makes some changes to the article, when the task is finally run, the body of the article is reverted to the old version, because the task had the old body in its argument.rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMmhVhh=]rh_XNow, the queue is very busy, so the task won't be run for another 2 minutes, in the meantime another author makes some changes to the article, when the task is finally run, the body of the article is reverted to the old version, because the task had the old body in its argument.rr}r(hBjhCjubaubhk)r}r(hBXnFixing the race condition is easy, just use the article id instead, and re-fetch the article in the task body:rhCjhDhGhIhnhK}r(hM]hN]hO]hP]hS]uhUMrhVhh=]rh_XnFixing the race condition is easy, just use the article id instead, and re-fetch the article in the task body:rr}r(hBjhCjubaubh)r}r(hBX@task def expand_abbreviations(article_id) article = Article.objects.get(id=article_id) article.body.replace("MyCorp", "My Corporation") article.save() >>> expand_abbreviations(article_id)hCjhDhGhIhhK}r(hhXpythonhhhP]hO]hM]hN]hS]uhUMuhVhh=]rh_X@task def expand_abbreviations(article_id) article = Article.objects.get(id=article_id) article.body.replace("MyCorp", "My Corporation") article.save() >>> expand_abbreviations(article_id)rr}r(hBUhCjubaubhk)r }r (hBXfThere might even be performance benefits to this approach, as sending large messages may be expensive.r hCjhDhGhIhnhK}r (hM]hN]hO]hP]hS]uhUMhVhh=]r h_XfThere might even be performance benefits to this approach, as sending large messages may be expensive.r r }r (hBj hCj ubaubeubeubeubahBUU transformerr NU footnote_refsr }r Urefnamesr }r (j]r jaj]r jaXlogging]r j3aXakismet]r (jtjjeuUsymbol_footnotesr ]r Uautofootnote_refsr ]r Usymbol_footnote_refsr ]r U citationsr ]r hVhU current_liner NUtransform_messagesr ]r Ureporterr NUid_startr KU autofootnotesr ]r U citation_refsr }r! Uindirect_targetsr" ]r# Usettingsr$ (cdocutils.frontend Values r% or& }r' (Ufootnote_backlinksr( KUrecord_dependenciesr) NU rfc_base_urlr* Uhttp://tools.ietf.org/html/r+ U tracebackr, Upep_referencesr- NUstrip_commentsr. NU toc_backlinksr/ Uentryr0 U language_coder1 Uenr2 U datestampr3 NU report_levelr4 KU _destinationr5 NU halt_levelr6 KU strip_classesr7 Nh\NUerror_encoding_error_handlerr8 Ubackslashreplacer9 Udebugr: NUembed_stylesheetr; Uoutput_encoding_error_handlerr< Ustrictr= U sectnum_xformr> KUdump_transformsr? NU docinfo_xformr@ KUwarning_streamrA NUpep_file_url_templaterB Upep-%04drC Uexit_status_levelrD KUconfigrE NUstrict_visitorrF NUcloak_email_addressesrG Utrim_footnote_reference_spacerH UenvrI NUdump_pseudo_xmlrJ NUexpose_internalsrK NUsectsubtitle_xformrL U source_linkrM NUrfc_referencesrN NUoutput_encodingrO Uutf-8rP U source_urlrQ NUinput_encodingrR U utf-8-sigrS U_disable_configrT NU id_prefixrU UU tab_widthrV KUerror_encodingrW UUTF-8rX U_sourcerY UM/var/build/user_builds/celery/checkouts/1.0-archived/docs/userguide/tasks.rstrZ Ugettext_compactr[ U generatorr\ NUdump_internalsr] NU smart_quotesr^ U pep_base_urlr_ Uhttp://www.python.org/dev/peps/r` Usyntax_highlightra Ulongrb Uinput_encoding_error_handlerrc j= Uauto_id_prefixrd Uidre Udoctitle_xformrf Ustrip_elements_with_classesrg NU _config_filesrh ]Ufile_insertion_enabledri U raw_enabledrj KU dump_settingsrk NubUsymbol_footnote_startrl KUidsrm }rn (h(j3hRj)ro }rp (hBUhCh@hDhGhIjhK}rq (hM]hP]rr hRahO]UismodhN]hS]uhUKhVhh=]ubh3jh&h@h'jSh;jh1jh/jh2jh)jXh9jh0jh4jh.jh+j3h,hh-j{h7jAh8jh:jEh6jgh5jh*jhXHow To Installq?q@}qA(h"h:h#h8ubaubh)qB}qC(h"Uh#h h$h'h)h*h+}qD(h-]h.]h/]h0]qEhah2]qFh auh4Kh5hh]qG(h7)qH}qI(h"XInstall in SphinxqJh#hBh$h'h)h;h+}qK(h-]h.]h/]h0]h2]uh4Kh5hh]qLh>XInstall in SphinxqMqN}qO(h"hJh#hHubaubcdocutils.nodes paragraph qP)qQ}qR(h"XCopy this directory into the ``sphinx/templates`` directory where Shpinx is installed. For example, a standard install of sphinx on Mac OS X is at ``/Library/Python/2.6/site-packages/Sphinx-0.6.3-py2.6.egg/``qSh#hBh$h'h)U paragraphqTh+}qU(h-]h.]h/]h0]h2]uh4Kh5hh]qV(h>XCopy this directory into the qWqX}qY(h"XCopy this directory into the h#hQubcdocutils.nodes literal qZ)q[}q\(h"X``sphinx/templates``h+}q](h-]h.]h/]h0]h2]uh#hQh]q^h>Xsphinx/templatesq_q`}qa(h"Uh#h[ubah)Uliteralqbubh>Xb directory where Shpinx is installed. For example, a standard install of sphinx on Mac OS X is at qcqd}qe(h"Xb directory where Shpinx is installed. For example, a standard install of sphinx on Mac OS X is at h#hQubhZ)qf}qg(h"X=``/Library/Python/2.6/site-packages/Sphinx-0.6.3-py2.6.egg/``h+}qh(h-]h.]h/]h0]h2]uh#hQh]qih>X9/Library/Python/2.6/site-packages/Sphinx-0.6.3-py2.6.egg/qjqk}ql(h"Uh#hfubah)hbubeubeubh)qm}qn(h"Uh#h h$h'h)h*h+}qo(h-]h.]h/]h0]qphah2]qqh auh4K h5hh]qr(h7)qs}qt(h"XInstall Somewhere Elsequh#hmh$h'h)h;h+}qv(h-]h.]h/]h0]h2]uh4K h5hh]qwh>XInstall Somewhere Elseqxqy}qz(h"huh#hsubaubhP)q{}q|(h"XbIf you want to install this theme somewhere else, you will have to modify the ``conf.py`` file. ::q}h#hmh$h'h)hTh+}q~(h-]h.]h/]h0]h2]uh4K h5hh]q(h>XNIf you want to install this theme somewhere else, you will have to modify the qq}q(h"XNIf you want to install this theme somewhere else, you will have to modify the h#h{ubhZ)q}q(h"X ``conf.py``h+}q(h-]h.]h/]h0]h2]uh#h{h]qh>Xconf.pyqq}q(h"Uh#hubah)hbubh>X file.qq}q(h"X file.h#h{ubeubcdocutils.nodes literal_block q)q}q(h"X<templates_path = ['/absolute/path/to/dir/','relative/path/']h#hmh$h'h)U literal_blockqh+}q(U xml:spaceqUpreserveqh0]h/]h-]h.]h2]uh4Kh5hh]qh>X<templates_path = ['/absolute/path/to/dir/','relative/path/']qq}q(h"Uh#hubaubeubh)q}q(h"Uh#h h$h'h)h*h+}q(h-]h.]h/]h0]qhah2]qhauh4Kh5hh]q(h7)q}q(h"X&Install Directly in Your Documentationqh#hh$h'h)h;h+}q(h-]h.]h/]h0]h2]uh4Kh5hh]qh>X&Install Directly in Your Documentationqq}q(h"hh#hubaubhP)q}q(h"X{If you want to include the files directly in the documentation, so another person can build your documentation, it is easy.qh#hh$h'h)hTh+}q(h-]h.]h/]h0]h2]uh4Kh5hh]qh>X{If you want to include the files directly in the documentation, so another person can build your documentation, it is easy.qq}q(h"hh#hubaubcdocutils.nodes enumerated_list q)q}q(h"Uh#hh$Nh)Uenumerated_listqh+}q(UsuffixqU.h0]h/]h-]UprefixqUh.]h2]UenumtypeqUarabicquh4Nh5hh]q(cdocutils.nodes list_item q)q}q(h"XwCopy over everything in the ``static`` directory into the ``_static`` directory of your documentation's source folder. h+}q(h-]h.]h/]h0]h2]uh#hh]qhP)q}q(h"XvCopy over everything in the ``static`` directory into the ``_static`` directory of your documentation's source folder.h#hh$h'h)hTh+}q(h-]h.]h/]h0]h2]uh4Kh]q(h>XCopy over everything in the qq}q(h"XCopy over everything in the h#hubhZ)q}q(h"X ``static``h+}q(h-]h.]h/]h0]h2]uh#hh]qh>Xstaticqȅq}q(h"Uh#hubah)hbubh>X directory into the q˅q}q(h"X directory into the h#hubhZ)q}q(h"X ``_static``h+}q(h-]h.]h/]h0]h2]uh#hh]qh>X_staticq҅q}q(h"Uh#hubah)hbubh>X1 directory of your documentation's source folder.qՅq}q(h"X1 directory of your documentation's source folder.h#hubeubah)U list_itemqubh)q}q(h"XgCopy the ``layout.html`` file into the ``_templates`` directory of your documentation's source folder. h+}q(h-]h.]h/]h0]h2]uh#hh]qhP)q}q(h"XfCopy the ``layout.html`` file into the ``_templates`` directory of your documentation's source folder.h#hh$h'h)hTh+}q(h-]h.]h/]h0]h2]uh4Kh]q(h>X Copy the qᅁq}q(h"X Copy the h#hubhZ)q}q(h"X``layout.html``h+}q(h-]h.]h/]h0]h2]uh#hh]qh>X layout.htmlq腁q}q(h"Uh#hubah)hbubh>X file into the q녁q}q(h"X file into the h#hubhZ)q}q(h"X``_templates``h+}q(h-]h.]h/]h0]h2]uh#hh]qh>X _templatesqq}q(h"Uh#hubah)hbubh>X1 directory of your documentation's source folder.qq}q(h"X1 directory of your documentation's source folder.h#hubeubah)hubh)q}q(h"XQAlter your ``conf.py`` :: html_theme = 'basic' instead of ``'ADCtheme'``. h+}q(h-]h.]h/]h0]h2]uh#hh]q(hP)q}q(h"XAlter your ``conf.py`` ::h#hh$h'h)hTh+}q(h-]h.]h/]h0]h2]uh4Kh]q(h>X Alter your rr}r(h"X Alter your h#hubhZ)r}r(h"X ``conf.py``h+}r(h-]h.]h/]h0]h2]uh#hh]rh>Xconf.pyrr}r (h"Uh#jubah)hbubeubh)r }r (h"Xhtml_theme = 'basic'h#hh)hh+}r (hhh0]h/]h-]h.]h2]uh4Kh]r h>Xhtml_theme = 'basic'rr}r(h"Uh#j ubaubhP)r}r(h"Xinstead of ``'ADCtheme'``.h#hh$h'h)hTh+}r(h-]h.]h/]h0]h2]uh4Kh]r(h>X instead of rr}r(h"X instead of h#jubhZ)r}r(h"X``'ADCtheme'``h+}r(h-]h.]h/]h0]h2]uh#jh]rh>X 'ADCtheme'rr}r(h"Uh#jubah)hbubh>X.r}r (h"X.h#jubeubeh)hubeubeubh)r!}r"(h"Uh#h h$h'h)h*h+}r#(h-]h.]h/]h0]r$hah2]r%hauh4K"h5hh]r&(h7)r'}r((h"XMaking Sphinx Use the Themer)h#j!h$h'h)h;h+}r*(h-]h.]h/]h0]h2]uh4K"h5hh]r+h>XMaking Sphinx Use the Themer,r-}r.(h"j)h#j'ubaubhP)r/}r0(h"XIf you aren't installing the files directly into your documentation, edit the ``conf.py`` file and make the following setting: ::r1h#j!h$h'h)hTh+}r2(h-]h.]h/]h0]h2]uh4K$h5hh]r3(h>XNIf you aren't installing the files directly into your documentation, edit the r4r5}r6(h"XNIf you aren't installing the files directly into your documentation, edit the h#j/ubhZ)r7}r8(h"X ``conf.py``h+}r9(h-]h.]h/]h0]h2]uh#j/h]r:h>Xconf.pyr;r<}r=(h"Uh#j7ubah)hbubh>X% file and make the following setting:r>r?}r@(h"X% file and make the following setting:h#j/ubeubh)rA}rB(h"Xhtml_theme = 'ADCtheme'h#j!h$h'h)hh+}rC(hhh0]h/]h-]h.]h2]uh4K&h5hh]rDh>Xhtml_theme = 'ADCtheme'rErF}rG(h"Uh#jAubaubeubh)rH}rI(h"Uh#h h$h'h)h*h+}rJ(h-]h.]h/]h0]rKhah2]rLh auh4K)h5hh]rM(h7)rN}rO(h"X Screen ShotsrPh#jHh$h'h)h;h+}rQ(h-]h.]h/]h0]h2]uh4K)h5hh]rRh>X Screen ShotsrSrT}rU(h"jPh#jNubaubcdocutils.nodes image rV)rW}rX(h"XI.. image:: http://github.com/coordt/ADCtheme/raw/master/static/scrn1.png h#jHh$h'h)UimagerYh+}rZ(UuriX=http://github.com/coordt/ADCtheme/raw/master/static/scrn1.pngr[h0]h/]h-]h.]U candidatesr\}r]U?j[sh2]uh4K,h5hh]ubjV)r^}r_(h"XI.. image:: http://github.com/coordt/ADCtheme/raw/master/static/scrn2.png h#jHh$h'h)jYh+}r`(UuriX=http://github.com/coordt/ADCtheme/raw/master/static/scrn2.pngrah0]h/]h-]h.]j\}rbU?jash2]uh4K.h5hh]ubeubh)rc}rd(h"Uh#h h$h'h)h*h+}re(h-]h.]h/]h0]rfhah2]rghauh4K0h5hh]rh(h7)ri}rj(h"XTo Dorkh#jch$h'h)h;h+}rl(h-]h.]h/]h0]h2]uh4K0h5hh]rmh>XTo Dornro}rp(h"jkh#jiubaubcdocutils.nodes bullet_list rq)rr}rs(h"Uh#jch$Nh)U bullet_listrth+}ru(UbulletrvX*h0]h/]h-]h.]h2]uh4Nh5hh]rw(h)rx}ry(h"XGGotta get the javascript working so the Table of Contents is hide-able.rzh+}r{(h-]h.]h/]h0]h2]uh#jrh]r|hP)r}}r~(h"jzh#jxh$h'h)hTh+}r(h-]h.]h/]h0]h2]uh4K2h]rh>XGGotta get the javascript working so the Table of Contents is hide-able.rr}r(h"jzh#j}ubaubah)hubh)r}r(h"XProbably lots of css cleanup.rh+}r(h-]h.]h/]h0]h2]uh#jrh]rhP)r}r(h"jh#jh$h'h)hTh+}r(h-]h.]h/]h0]h2]uh4K3h]rh>XProbably lots of css cleanup.rr}r(h"jh#jubaubah)hubeubeubeubah"UU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh5hU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh;NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUT/var/build/user_builds/celery/checkouts/1.0-archived/docs/_theme/ADCTheme/README.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hhmhjchhhjHhh hhBhj!uUsubstitution_namesr}rh)h5h+}r(h-]h0]h/]Usourceh'h.]h2]uU footnotesr]rUrefidsr}rub.PKXDDAcelery-1.0-archived/.doctrees/_theme/ADCThemePrint/README.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xto doqNXmaking sphinx use the themeqNXinstall somewhere elseqNX screen shotsq NXinstall in sphinxq NXhow to installq NuUsubstitution_defsq }q Uparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hUto-doqhUmaking-sphinx-use-the-themeqhUinstall-somewhere-elseqh U screen-shotsqh Uinstall-in-sphinxqh Uhow-to-installquUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceq UUparentq!hUsourceq"cdocutils.nodes reprunicode q#XY/var/build/user_builds/celery/checkouts/1.0-archived/docs/_theme/ADCThemePrint/README.rstq$q%}q&bUtagnameq'Usectionq(U attributesq)}q*(Udupnamesq+]Uclassesq,]Ubackrefsq-]Uidsq.]q/haUnamesq0]q1h auUlineq2KUdocumentq3hh]q4(cdocutils.nodes title q5)q6}q7(h XHow To Installq8h!hh"h%h'Utitleq9h)}q:(h+]h,]h-]h.]h0]uh2Kh3hh]q;cdocutils.nodes Text q}q?(h h8h!h6ubaubh)q@}qA(h Uh!hh"h%h'h(h)}qB(h+]h,]h-]h.]qChah0]qDh auh2Kh3hh]qE(h5)qF}qG(h XInstall in SphinxqHh!h@h"h%h'h9h)}qI(h+]h,]h-]h.]h0]uh2Kh3hh]qJhUexit_status_levelr?KUconfigr@NUstrict_visitorrANUcloak_email_addressesrBUtrim_footnote_reference_spacerCUenvrDNUdump_pseudo_xmlrENUexpose_internalsrFNUsectsubtitle_xformrGU source_linkrHNUrfc_referencesrINUoutput_encodingrJUutf-8rKU source_urlrLNUinput_encodingrMU utf-8-sigrNU_disable_configrONU id_prefixrPUU tab_widthrQKUerror_encodingrRUUTF-8rSU_sourcerTUY/var/build/user_builds/celery/checkouts/1.0-archived/docs/_theme/ADCThemePrint/README.rstrUUgettext_compactrVU generatorrWNUdump_internalsrXNU smart_quotesrYU pep_base_urlrZUhttp://www.python.org/dev/peps/r[Usyntax_highlightr\Ulongr]Uinput_encoding_error_handlerr^j8Uauto_id_prefixr_Uidr`Udoctitle_xformraUstrip_elements_with_classesrbNU _config_filesrc]Ufile_insertion_enabledrdU raw_enabledreKU dump_settingsrfNubUsymbol_footnote_startrgKUidsrh}ri(hhkhhhhhhhh@hhuUsubstitution_namesrj}rkh'h3h)}rl(h+]h.]h-]Usourceh%h,]h0]uU footnotesrm]rnUrefidsro}rpub.PKXDDB>j?celery-1.0-archived/.doctrees/releases/1.0/announcement.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X changelogqX celerymonqX resourcesqNXfeaturesq NX what is it?q NXtoken bucket algorithmq X stable apiq NXrabbitmqq X what's new?qNXcelery deprecation timelineqXcelery 1.0 has been released!qNuUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hU changelogqhU celerymonqhU resourcesqh Ufeaturesqh U what-is-itqh Utoken-bucket-algorithmqh U stable-apiq h Urabbitmqq!hU what-s-newq"hUcelery-deprecation-timelineq#hUcelery-1-0-has-been-releasedq$uUchildrenq%]q&cdocutils.nodes section q')q(}q)(U rawsourceq*UUparentq+hUsourceq,cdocutils.nodes reprunicode q-XW/var/build/user_builds/celery/checkouts/1.0-archived/docs/releases/1.0/announcement.rstq.q/}q0bUtagnameq1Usectionq2U attributesq3}q4(Udupnamesq5]Uclassesq6]Ubackrefsq7]Uidsq8]q9h$aUnamesq:]q;hauUlineq(cdocutils.nodes title q?)q@}qA(h*XCelery 1.0 has been released!qBh+h(h,h/h1UtitleqCh3}qD(h5]h6]h7]h8]h:]uh(h)r?}r@(h*XTask decorators Write tasks as regular functions and decorate them. There are both :func:`task`, and :func:`periodic_task` decorators. h+j;h,h/h1hh3}rA(h5]h6]h7]h8]h:]uhEvents If enabled, the worker will send events, telling you what tasks it executes, their results, and how long it took to execute them. It also sends out heartbeats, so listeners are able to detect nonfunctional workers. This is the basis for the new real-time web monitor we're working on (`celerymon`_). h+j;h,h/h1hh3}r(h5]h6]h7]h8]h:]uh}r?(h*X! If you're only running a single h+j0ubh)r@}rA(h*X ``celeryd``h3}rB(h5]h6]h7]h8]h:]uh+j0h%]rChFXcelerydrDrE}rF(h*Uh+j@ubah1hubhFX server, you can embed rGrH}rI(h*X server, you can embed h+j0ubh)rJ}rK(h*X``celerybeat``h3}rL(h5]h6]h7]h8]h:]uh+j0h%]rMhFX celerybeatrNrO}rP(h*Uh+jJubah1hubhFX inside it. Just add the rQrR}rS(h*X inside it. Just add the h+j0ubh)rT}rU(h*X ``--beat``h3}rV(h5]h6]h7]h8]h:]uh+j0h%]rWhFX--beatrXrY}rZ(h*Uh+jTubah1hubhFX argument.r[r\}r](h*X argument.h+j0ubeubeubh)r^}r_(h*XcBroadcast commands If you change your mind and don't want to run a task after all, you now have the option to revoke it. Also, you can rate limit tasks or even shut down the worker remotely. It doesn't have many commands yet, but we're waiting for broadcast commands to reach its full potential, so please share your ideas if you have any. h+jh,h/h1hh3}r`(h5]h6]h7]h8]h:]uhr?}r@(h*X& listings. Just install it using pip: h+jubh)rA}rB(h*X``pip install setproctitle``h3}rC(h5]h6]h7]h8]h:]uh+jh%]rDhFXpip install setproctitlerErF}rG(h*Uh+jAubah1hubhFX.rH}rI(h*X.h+jubeubeubh')rJ}rK(h*Uh+h(h,h/h1h2h3}rL(h5]h6]h7]h8]rMhah:]rNhauhU_sourcer?UW/var/build/user_builds/celery/checkouts/1.0-archived/docs/releases/1.0/announcement.rstr@Ugettext_compactrAU generatorrBNUdump_internalsrCNU smart_quotesrDU pep_base_urlrEUhttp://www.python.org/dev/peps/rFUsyntax_highlightrGUlongrHUinput_encoding_error_handlerrIj#Uauto_id_prefixrJUidrKUdoctitle_xformrLUstrip_elements_with_classesrMNU _config_filesrN]Ufile_insertion_enabledrOU raw_enabledrPKU dump_settingsrQNubUsymbol_footnote_startrRKUidsrS}rT(h hh"j-hhThjhjh!hhjh$h(h#j(hjJhhuUsubstitution_namesrU}rVh1h=h3}rW(h5]h8]h7]Usourceh/h6]h:]uU footnotesrX]rYUrefidsrZ}r[ub.PKXDDׄ??8celery-1.0-archived/.doctrees/tutorials/external.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X external tutorials and resourcesqNXKbuild a processing queue [...] in less than a day using rabbitmq and celeryqNX-message queues, django and celery quick startqNXrabbitmq, celery and djangoq NX%how to get celeryd to work on freebsdq NXintroduction to celeryq NX rich lelandq X idan gazitq X alon swartzqXpyweb-ilqXthinkingcactusqXweb-based 3d animation softwareqNXrobert pogorzelskiqX;background task processing and deferred execution in djangoqNXrabbitmq with python and rubyqNXtim bullqXviktor peterssonquUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hU external-tutorials-and-resourcesq hUEbuild-a-processing-queue-in-less-than-a-day-using-rabbitmq-and-celeryq!hU,message-queues-django-and-celery-quick-startq"h Urabbitmq-celery-and-djangoq#h U%how-to-get-celeryd-to-work-on-freebsdq$h Uintroduction-to-celeryq%h U rich-lelandq&h U idan-gazitq'hU alon-swartzq(hUpyweb-ilq)hUthinkingcactusq*hUweb-based-3d-animation-softwareq+hUrobert-pogorzelskiq,hU;background-task-processing-and-deferred-execution-in-djangoq-hUrabbitmq-with-python-and-rubyq.hUtim-bullq/hUviktor-peterssonq0uUchildrenq1]q2cdocutils.nodes section q3)q4}q5(U rawsourceq6UUparentq7hUsourceq8cdocutils.nodes reprunicode q9XP/var/build/user_builds/celery/checkouts/1.0-archived/docs/tutorials/external.rstq:q;}qU attributesq?}q@(UdupnamesqA]UclassesqB]UbackrefsqC]UidsqD]qEh aUnamesqF]qGhauUlineqHKUdocumentqIhh1]qJ(cdocutils.nodes title qK)qL}qM(h6X External tutorials and resourcesqNh7h4h8h;h=UtitleqOh?}qP(hA]hB]hC]hD]hF]uhHKhIhh1]qQcdocutils.nodes Text qRX External tutorials and resourcesqSqT}qU(h6hNh7hLubaubh3)qV}qW(h6Uh7h4h8h;h=h>h?}qX(hA]hB]hC]hD]qYh%ahF]qZh auhHKhIhh1]q[(hK)q\}q](h6XIntroduction to Celeryq^h7hVh8h;h=hOh?}q_(hA]hB]hC]hD]hF]uhHKhIhh1]q`hRXIntroduction to Celeryqaqb}qc(h6h^h7h\ubaubcdocutils.nodes paragraph qd)qe}qf(h6XAwesome slides from when `Idan Gazit`_ had a talk about Celery at `PyWeb-IL`_: http://www.slideshare.net/idangazit/an-introduction-to-celeryh7hVh8h;h=U paragraphqgh?}qh(hA]hB]hC]hD]hF]uhHKhIhh1]qi(hRXAwesome slides from when qjqk}ql(h6XAwesome slides from when h7heubcdocutils.nodes reference qm)qn}qo(h6X `Idan Gazit`_UresolvedqpKh7heh=U referenceqqh?}qr(UnameX Idan GazitUrefuriqsXhttp://twitter.com/IdanGazitqthD]hC]hA]hB]hF]uh1]quhRX Idan Gazitqvqw}qx(h6Uh7hnubaubhRX had a talk about Celery at qyqz}q{(h6X had a talk about Celery at h7heubhm)q|}q}(h6X `PyWeb-IL`_hpKh7heh=hqh?}q~(UnameXPyWeb-ILhsX'http://groups.google.com/group/pyweb-ilqhD]hC]hA]hB]hF]uh1]qhRXPyWeb-ILqq}q(h6Uh7h|ubaubhRX: qq}q(h6X: h7heubhm)q}q(h6X=http://www.slideshare.net/idangazit/an-introduction-to-celeryqh?}q(UrefurihhD]hC]hA]hB]hF]uh7heh1]qhRX=http://www.slideshare.net/idangazit/an-introduction-to-celeryqq}q(h6Uh7hubah=hqubeubcdocutils.nodes target q)q}q(h6X... _`Idan Gazit`: http://twitter.com/IdanGazitU referencedqKh7hVh8h;h=Utargetqh?}q(hshthD]qh'ahC]hA]hB]hF]qh auhHK hIhh1]ubh)q}q(h6X7.. _`PyWeb-IL`: http://groups.google.com/group/pyweb-ilhKh7hVh8h;h=hh?}q(hshhD]qh)ahC]hA]hB]hF]qhauhHK hIhh1]ubcdocutils.nodes raw q)q}q(h6Uh7hVh8h;h=Urawqh?}q(UformatXhtmlU xml:spaceqUpreserveqhD]hC]hA]hB]hF]uhHKhIhh1]qhRXqq}q(h6Uh7hubaubh3)q}q(h6Uh7hVh8h;h=h>h?}q(hA]hB]hC]hD]qh#ahF]qh auhHK!hIhh1]q(hK)q}q(h6XRabbitMQ, Celery and Djangoqh7hh8h;h=hOh?}q(hA]hB]hC]hD]hF]uhHK!hIhh1]qhRXRabbitMQ, Celery and Djangoqq}q(h6hh7hubaubhd)q}q(h6XGreat Celery tutorial by `Robert Pogorzelski`_ at his blog "Happy Stream of Thoughts": http://robertpogorzelski.com/blog/2009/09/10/rabbitmq-celery-and-django/h7hh8h;h=hgh?}q(hA]hB]hC]hD]hF]uhHK#hIhh1]q(hRXGreat Celery tutorial by qq}q(h6XGreat Celery tutorial by h7hubhm)q}q(h6X`Robert Pogorzelski`_hpKh7hh=hqh?}q(UnameXRobert PogorzelskihsXhttp://robertpogorzelski.com/qhD]hC]hA]hB]hF]uh1]qhRXRobert Pogorzelskiqq}q(h6Uh7hubaubhRX) at his blog "Happy Stream of Thoughts": qąq}q(h6X) at his blog "Happy Stream of Thoughts": h7hubhm)q}q(h6XHhttp://robertpogorzelski.com/blog/2009/09/10/rabbitmq-celery-and-django/qh?}q(UrefurihhD]hC]hA]hB]hF]uh7hh1]qhRXHhttp://robertpogorzelski.com/blog/2009/09/10/rabbitmq-celery-and-django/q̅q}q(h6Uh7hubah=hqubeubh)q}q(h6X7.. _`Robert Pogorzelski`: http://robertpogorzelski.com/hKh7hh8h;h=hh?}q(hshhD]qh,ahC]hA]hB]hF]qhauhHK'hIhh1]ubeubh3)q}q(h6Uh7hVh8h;h=h>h?}q(hA]hB]hC]hD]qh"ahF]qhauhHK*hIhh1]q(hK)q}q(h6X-Message Queues, Django and Celery Quick Startqh7hh8h;h=hOh?}q(hA]hB]hC]hD]hF]uhHK*hIhh1]qhRX-Message Queues, Django and Celery Quick Startq߅q}q(h6hh7hubaubhd)q}q(h6XCelery tutorial by `Rich Leland`_, the installation section is Mac OS X specific: http://mathematism.com/2010/feb/16/message-queues-django-and-celery-quick-start/h7hh8h;h=hgh?}q(hA]hB]hC]hD]hF]uhHK,hIhh1]q(hRXCelery tutorial by q慁q}q(h6XCelery tutorial by h7hubhm)q}q(h6X`Rich Leland`_hpKh7hh=hqh?}q(UnameX Rich LelandhsXhttp://twitter.com/richlelandqhD]hC]hA]hB]hF]uh1]qhRX Rich Lelandqq}q(h6Uh7hubaubhRX1, the installation section is Mac OS X specific: qq}q(h6X1, the installation section is Mac OS X specific: h7hubhm)q}q(h6XPhttp://mathematism.com/2010/feb/16/message-queues-django-and-celery-quick-start/qh?}q(UrefurihhD]hC]hA]hB]hF]uh7hh1]qhRXPhttp://mathematism.com/2010/feb/16/message-queues-django-and-celery-quick-start/qq}q(h6Uh7hubah=hqubeubh)q}q(h6X0.. _`Rich Leland`: http://twitter.com/richlelandhKh7hh8h;h=hh?}q(hshhD]qh&ahC]hA]hB]hF]rh auhHK0hIhh1]ubeubh3)r}r(h6Uh7hVh8h;h=h>h?}r(hA]hB]hC]hD]rh-ahF]rhauhHK4hIhh1]r(hK)r}r(h6X;Background task processing and deferred execution in Djangor h7jh8h;h=hOh?}r (hA]hB]hC]hD]hF]uhHK4hIhh1]r hRX;Background task processing and deferred execution in Djangor r }r(h6j h7jubaubcdocutils.nodes definition_list r)r}r(h6Uh7jh8h;h=Udefinition_listrh?}r(hA]hB]hC]hD]hF]uhHNhIhh1]rcdocutils.nodes definition_list_item r)r}r(h6Xu`Alon Swartz`_ writes about celery and RabbitMQ on his blog: http://www.turnkeylinux.org/blog/django-celery-rabbitmq h7jh8h;h=Udefinition_list_itemrh?}r(hA]hB]hC]hD]hF]uhHK7h1]r(cdocutils.nodes term r)r}r(h6X<`Alon Swartz`_ writes about celery and RabbitMQ on his blog:rh7jh8h;h=Utermrh?}r (hA]hB]hC]hD]hF]uhHK7h1]r!(hm)r"}r#(h6X`Alon Swartz`_hpKh7jh=hqh?}r$(UnameX Alon SwartzhsXhttp://twitter.com/alonswartzr%hD]hC]hA]hB]hF]uh1]r&hRX Alon Swartzr'r(}r)(h6Uh7j"ubaubhRX. writes about celery and RabbitMQ on his blog:r*r+}r,(h6X. writes about celery and RabbitMQ on his blog:h7jubeubcdocutils.nodes definition r-)r.}r/(h6Uh?}r0(hA]hB]hC]hD]hF]uh7jh1]r1hd)r2}r3(h6X7http://www.turnkeylinux.org/blog/django-celery-rabbitmqr4h7j.h8h;h=hgh?}r5(hA]hB]hC]hD]hF]uhHK7h1]r6hm)r7}r8(h6j4h?}r9(Urefurij4hD]hC]hA]hB]hF]uh7j2h1]r:hRX7http://www.turnkeylinux.org/blog/django-celery-rabbitmqr;r<}r=(h6Uh7j7ubah=hqubaubah=U definitionr>ubeubaubh)r?}r@(h6X0.. _`Alon Swartz`: http://twitter.com/alonswartzhKh7jh8h;h=hh?}rA(hsj%hD]rBh(ahC]hA]hB]hF]rChauhHK9hIhh1]ubeubh3)rD}rE(h6Uh7hVh8h;h=h>h?}rF(hA]hB]hC]hD]rGh!ahF]rHhauhHKhIhh1]rU(hRXTutorial in 2 parts written by rVrW}rX(h6XTutorial in 2 parts written by h7jRubhm)rY}rZ(h6X `Tim Bull`_hpKh7jRh=hqh?}r[(UnameXTim BullhsXhttp://twitter.com/timbullr\hD]hC]hA]hB]hF]uh1]r]hRXTim Bullr^r_}r`(h6Uh7jYubaubhRX: rarb}rc(h6X: h7jRubhm)rd}re(h6X@http://timbull.com/build-a-processing-queue-with-multi-threadingrfh?}rg(UrefurijfhD]hC]hA]hB]hF]uh7jRh1]rhhRX@http://timbull.com/build-a-processing-queue-with-multi-threadingrirj}rk(h6Uh7jdubah=hqubeubh)rl}rm(h6X*.. _`Tim Bull`: http://twitter.com/timbullhKh7jDh8h;h=hh?}rn(hsj\hD]roh/ahC]hA]hB]hF]rphauhHKAhIhh1]ubeubh3)rq}rr(h6Uh7hVh8h;h=h>h?}rs(hA]hB]hC]hD]rth$ahF]ruh auhHKDhIhh1]rv(hK)rw}rx(h6X%How to get celeryd to work on FreeBSDryh7jqh8h;h=hOh?}rz(hA]hB]hC]hD]hF]uhHKDhIhh1]r{hRX%How to get celeryd to work on FreeBSDr|r}}r~(h6jyh7jwubaubhd)r}r(h6XInstalling multiprocessing on FreeBSD isn't that easy, but thanks to `Viktor Petersson`_ we now have a step-to-step guide: http://www.playingwithwire.com/2009/10/how-to-get-celeryd-to-work-on-freebsd/h7jqh8h;h=hgh?}r(hA]hB]hC]hD]hF]uhHKFhIhh1]r(hRXEInstalling multiprocessing on FreeBSD isn't that easy, but thanks to rr}r(h6XEInstalling multiprocessing on FreeBSD isn't that easy, but thanks to h7jubhm)r}r(h6X`Viktor Petersson`_hpKh7jh=hqh?}r(UnameXViktor PeterssonhsXhttp://twitter.com/vpeterssonrhD]hC]hA]hB]hF]uh1]rhRXViktor Peterssonrr}r(h6Uh7jubaubhRX# we now have a step-to-step guide: rr}r(h6X# we now have a step-to-step guide: h7jubhm)r}r(h6XMhttp://www.playingwithwire.com/2009/10/how-to-get-celeryd-to-work-on-freebsd/rh?}r(UrefurijhD]hC]hA]hB]hF]uh7jh1]rhRXMhttp://www.playingwithwire.com/2009/10/how-to-get-celeryd-to-work-on-freebsd/rr}r(h6Uh7jubah=hqubeubh)r}r(h6X5.. _`Viktor Petersson`: http://twitter.com/vpeterssonhKh7jqh8h;h=hh?}r(hsjhD]rh0ahC]hA]hB]hF]rhauhHKJhIhh1]ubeubh3)r}r(h6Uh7hVh8h;h=h>h?}r(hA]hB]hC]hD]rh+ahF]rhauhHKMhIhh1]r(hK)r}r(h6XWeb-based 3D animation softwarerh7jh8h;h=hOh?}r(hA]hB]hC]hD]hF]uhHKMhIhh1]rhRXWeb-based 3D animation softwarerr}r(h6jh7jubaubhd)r}r(h6XIndy Chang Liu at `ThinkingCactus`_ uses Celery to render animations asynchronously (PDF): http://ojs.pythonpapers.org/index.php/tppm/article/viewFile/105/122h7jh8h;h=hgh?}r(hA]hB]hC]hD]hF]uhHKOhIhh1]r(hRXIndy Chang Liu at rr}r(h6XIndy Chang Liu at h7jubhm)r}r(h6X`ThinkingCactus`_hpKh7jh=hqh?}r(UnameXThinkingCactushsXhttp://thinkingcactus.com/rhD]hC]hA]hB]hF]uh1]rhRXThinkingCactusrr}r(h6Uh7jubaubhRX8 uses Celery to render animations asynchronously (PDF): rr}r(h6X8 uses Celery to render animations asynchronously (PDF): h7jubhm)r}r(h6XChttp://ojs.pythonpapers.org/index.php/tppm/article/viewFile/105/122rh?}r(UrefurijhD]hC]hA]hB]hF]uh7jh1]rhRXChttp://ojs.pythonpapers.org/index.php/tppm/article/viewFile/105/122rr}r(h6Uh7jubah=hqubeubh)r}r(h6X0.. _`ThinkingCactus`: http://thinkingcactus.com/hKh7jh8h;h=hh?}r(hsjhD]rh*ahC]hA]hB]hF]rhauhHKShIhh1]ubeubh3)r}r(h6Uh7hVh8h;h=h>h?}r(hA]hB]hC]hD]rh.ahF]rhauhHKWhIhh1]r(hK)r}r(h6XRabbitMQ with Python and Rubyrh7jh8h;h=hOh?}r(hA]hB]hC]hD]hF]uhHKWhIhh1]rhRXRabbitMQ with Python and Rubyrr}r(h6jh7jubaubhd)r}r(h6XMhttp://www.slideshare.net/hungryblank/rabbitmq-with-python-and-ruby-rupy-2009rh7jh8h;h=hgh?}r(hA]hB]hC]hD]hF]uhHKYhIhh1]rhm)r}r(h6jh?}r(UrefurijhD]hC]hA]hB]hF]uh7jh1]rhRXMhttp://www.slideshare.net/hungryblank/rabbitmq-with-python-and-ruby-rupy-2009rr}r(h6Uh7jubah=hqubaubeubeubeubah6UU transformerrNU footnote_refsr}rUrefnamesr}r(Xviktor petersson]rjaXrobert pogorzelski]rhaX idan gazit]rhnaX alon swartz]rj"aXpyweb-il]rh|aXthinkingcactus]rjaX rich leland]rhaXtim bull]rjYauUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rhIhU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksr KUrecord_dependenciesr NU rfc_base_urlr Uhttp://tools.ietf.org/html/r U tracebackr Upep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNhONUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsr NU docinfo_xformr!KUwarning_streamr"NUpep_file_url_templater#Upep-%04dr$Uexit_status_levelr%KUconfigr&NUstrict_visitorr'NUcloak_email_addressesr(Utrim_footnote_reference_spacer)Uenvr*NUdump_pseudo_xmlr+NUexpose_internalsr,NUsectsubtitle_xformr-U source_linkr.NUrfc_referencesr/NUoutput_encodingr0Uutf-8r1U source_urlr2NUinput_encodingr3U utf-8-sigr4U_disable_configr5NU id_prefixr6UU tab_widthr7KUerror_encodingr8UUTF-8r9U_sourcer:UP/var/build/user_builds/celery/checkouts/1.0-archived/docs/tutorials/external.rstr;Ugettext_compactr<U generatorr=NUdump_internalsr>NU smart_quotesr?U pep_base_urlr@Uhttp://www.python.org/dev/peps/rAUsyntax_highlightrBUlongrCUinput_encoding_error_handlerrDjUauto_id_prefixrEUidrFUdoctitle_xformrGUstrip_elements_with_classesrHNU _config_filesrI]rJUfile_insertion_enabledrKU raw_enabledrLKU dump_settingsrMNubUsymbol_footnote_startrNKUidsrO}rP(h,hh#hh&hh$jqh0jh.jh"hh)hh-jh*jh+jh%hVh'hh!jDh(j?h/jlh h4uUsubstitution_namesrQ}rRh=hIh?}rS(hA]hD]hC]Usourceh;hB]hF]uU footnotesrT]rUUrefidsrV}rWub.PKXDDU*xx<celery-1.0-archived/.doctrees/tutorials/clickcounter.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X'using carrot to send clicks as messagesqNX introductionqNX:tutorial: creating a click counter using carrot and celeryqNX view and urlsq NXcreating the periodic taskq NX finishingq NX the modelq NuUsubstitution_defsq }qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hU'using-carrot-to-send-clicks-as-messagesqhU introductionqhU9tutorial-creating-a-click-counter-using-carrot-and-celeryqh U view-and-urlsqh Ucreating-the-periodic-taskqh U finishingqh U the-modelquUchildrenq]qcdocutils.nodes section q)q }q!(U rawsourceq"UUparentq#hUsourceq$cdocutils.nodes reprunicode q%XT/var/build/user_builds/celery/checkouts/1.0-archived/docs/tutorials/clickcounter.rstq&q'}q(bUtagnameq)Usectionq*U attributesq+}q,(Udupnamesq-]Uclassesq.]Ubackrefsq/]Uidsq0]q1haUnamesq2]q3hauUlineq4KUdocumentq5hh]q6(cdocutils.nodes title q7)q8}q9(h"X:Tutorial: Creating a click counter using carrot and celeryq:h#h h$h'h)Utitleq;h+}q<(h-]h.]h/]h0]h2]uh4Kh5hh]q=cdocutils.nodes Text q>X:Tutorial: Creating a click counter using carrot and celeryq?q@}qA(h"h:h#h8ubaubh)qB}qC(h"Uh#h h$h'h)h*h+}qD(h-]h.]h/]h0]qEhah2]qFhauh4Kh5hh]qG(h7)qH}qI(h"X IntroductionqJh#hBh$h'h)h;h+}qK(h-]h.]h/]h0]h2]uh4Kh5hh]qLh>X IntroductionqMqN}qO(h"hJh#hHubaubcdocutils.nodes paragraph qP)qQ}qR(h"XA click counter should be easy, right? Just a simple view that increments a click in the DB and forwards you to the real destination.qSh#hBh$h'h)U paragraphqTh+}qU(h-]h.]h/]h0]h2]uh4Kh5hh]qVh>XA click counter should be easy, right? Just a simple view that increments a click in the DB and forwards you to the real destination.qWqX}qY(h"hSh#hQubaubhP)qZ}q[(h"XThis would work well for most sites, but when traffic starts to increase, you are likely to bump into problems. One database write for every click is not good if you have millions of clicks a day.q\h#hBh$h'h)hTh+}q](h-]h.]h/]h0]h2]uh4K h5hh]q^h>XThis would work well for most sites, but when traffic starts to increase, you are likely to bump into problems. One database write for every click is not good if you have millions of clicks a day.q_q`}qa(h"h\h#hZubaubhP)qb}qc(h"XSo what can you do? In this tutorial we will send the individual clicks as messages using ``carrot``, and then process them later with a ``celery`` periodic task.h#hBh$h'h)hTh+}qd(h-]h.]h/]h0]h2]uh4Kh5hh]qe(h>XZSo what can you do? In this tutorial we will send the individual clicks as messages using qfqg}qh(h"XZSo what can you do? In this tutorial we will send the individual clicks as messages using h#hbubcdocutils.nodes literal qi)qj}qk(h"X ``carrot``h+}ql(h-]h.]h/]h0]h2]uh#hbh]qmh>Xcarrotqnqo}qp(h"Uh#hjubah)Uliteralqqubh>X%, and then process them later with a qrqs}qt(h"X%, and then process them later with a h#hbubhi)qu}qv(h"X ``celery``h+}qw(h-]h.]h/]h0]h2]uh#hbh]qxh>Xceleryqyqz}q{(h"Uh#huubah)hqubh>X periodic task.q|q}}q~(h"X periodic task.h#hbubeubhP)q}q(h"XCelery and carrot is excellent in tandem, and while this might not be the perfect example, you'll at least see one example how of they can be used to solve a task.qh#hBh$h'h)hTh+}q(h-]h.]h/]h0]h2]uh4Kh5hh]qh>XCelery and carrot is excellent in tandem, and while this might not be the perfect example, you'll at least see one example how of they can be used to solve a task.qq}q(h"hh#hubaubeubh)q}q(h"Uh#h h$h'h)h*h+}q(h-]h.]h/]h0]qhah2]qh auh4Kh5hh]q(h7)q}q(h"X The modelqh#hh$h'h)h;h+}q(h-]h.]h/]h0]h2]uh4Kh5hh]qh>X The modelqq}q(h"hh#hubaubhP)q}q(h"XThe model is simple, ``Click`` has the URL as primary key and a number of clicks for that URL. Its manager, ``ClickManager`` implements the ``increment_clicks`` method, which takes a URL and by how much to increment its count by.h#hh$h'h)hTh+}q(h-]h.]h/]h0]h2]uh4Kh5hh]q(h>XThe model is simple, qq}q(h"XThe model is simple, h#hubhi)q}q(h"X ``Click``h+}q(h-]h.]h/]h0]h2]uh#hh]qh>XClickqq}q(h"Uh#hubah)hqubh>XN has the URL as primary key and a number of clicks for that URL. Its manager, qq}q(h"XN has the URL as primary key and a number of clicks for that URL. Its manager, h#hubhi)q}q(h"X``ClickManager``h+}q(h-]h.]h/]h0]h2]uh#hh]qh>X ClickManagerqq}q(h"Uh#hubah)hqubh>X implements the qq}q(h"X implements the h#hubhi)q}q(h"X``increment_clicks``h+}q(h-]h.]h/]h0]h2]uh#hh]qh>Xincrement_clicksqq}q(h"Uh#hubah)hqubh>XE method, which takes a URL and by how much to increment its count by.qq}q(h"XE method, which takes a URL and by how much to increment its count by.h#hubeubhP)q}q(h"X*clickmuncher/models.py*:qh#hh$h'h)hTh+}q(h-]h.]h/]h0]h2]uh4K h5hh]q(cdocutils.nodes emphasis q)q}q(h"X*clickmuncher/models.py*h+}q(h-]h.]h/]h0]h2]uh#hh]qh>Xclickmuncher/models.pyqąq}q(h"Uh#hubah)Uemphasisqubh>X:q}q(h"X:h#hubeubcdocutils.nodes literal_block q)q}q(h"Xfrom django.db import models from django.utils.translation import ugettext_lazy as _ class ClickManager(models.Manager): def increment_clicks(self, for_url, increment_by=1): """Increment the click count for an URL. >>> Click.objects.increment_clicks("http://google.com", 10) """ click, created = self.get_or_create(url=for_url, defaults={"click_count": increment_by}) if not created: click.click_count += increment_by click.save() return click.click_count class Click(models.Model): url = models.URLField(_(u"URL"), verify_exists=False, unique=True) click_count = models.PositiveIntegerField(_(u"click_count"), default=0) objects = ClickManager() class Meta: verbose_name = _(u"URL clicks") verbose_name_plural = _(u"URL clicks")h#hh$h'h)U literal_blockqh+}q(UlinenosqωUlanguageqXpythonU xml:spaceqUpreserveqh0]h/]h-]h.]h2]uh4K"h5hh]qh>Xfrom django.db import models from django.utils.translation import ugettext_lazy as _ class ClickManager(models.Manager): def increment_clicks(self, for_url, increment_by=1): """Increment the click count for an URL. >>> Click.objects.increment_clicks("http://google.com", 10) """ click, created = self.get_or_create(url=for_url, defaults={"click_count": increment_by}) if not created: click.click_count += increment_by click.save() return click.click_count class Click(models.Model): url = models.URLField(_(u"URL"), verify_exists=False, unique=True) click_count = models.PositiveIntegerField(_(u"click_count"), default=0) objects = ClickManager() class Meta: verbose_name = _(u"URL clicks") verbose_name_plural = _(u"URL clicks")qԅq}q(h"Uh#hubaubeubh)q}q(h"Uh#h h$h'h)h*h+}q(h-]h.]h/]h0]qhah2]qhauh4KEh5hh]q(h7)q}q(h"X'Using carrot to send clicks as messagesqh#hh$h'h)h;h+}q(h-]h.]h/]h0]h2]uh4KEh5hh]qh>X'Using carrot to send clicks as messagesq⅁q}q(h"hh#hubaubhP)q}q(h"X4The model is normal django stuff, nothing new there. But now we get on to the messaging. It has been a tradition for me to put the projects messaging related code in its own ``messaging.py`` module, and I will continue to do so here so maybe you can adopt this practice. In this module we have two functions:h#hh$h'h)hTh+}q(h-]h.]h/]h0]h2]uh4KGh5hh]q(h>XThe model is normal django stuff, nothing new there. But now we get on to the messaging. It has been a tradition for me to put the projects messaging related code in its own q酁q}q(h"XThe model is normal django stuff, nothing new there. But now we get on to the messaging. It has been a tradition for me to put the projects messaging related code in its own h#hubhi)q}q(h"X``messaging.py``h+}q(h-]h.]h/]h0]h2]uh#hh]qh>X messaging.pyqq}q(h"Uh#hubah)hqubh>Xv module, and I will continue to do so here so maybe you can adopt this practice. In this module we have two functions:qq}q(h"Xv module, and I will continue to do so here so maybe you can adopt this practice. In this module we have two functions:h#hubeubcdocutils.nodes bullet_list q)q}q(h"Uh#hh$h'h)U bullet_listqh+}q(UbulletqX*h0]h/]h-]h.]h2]uh4KMh5hh]q(cdocutils.nodes list_item q)q}q(h"X``send_increment_clicks`` This function sends a simple message to the broker. The message body only contains the URL we want to increment as plain-text, so the exchange and routing key play a role here. We use an exchange called ``clicks``, with a routing key of ``increment_click``, so any consumer binding a queue to this exchange using this routing key will receive these messages. h#hh$h'h)U list_itemrh+}r(h-]h.]h/]h0]h2]uh4Nh5hh]r(hP)r}r(h"X``send_increment_clicks``rh#hh$h'h)hTh+}r(h-]h.]h/]h0]h2]uh4KMh]rhi)r}r (h"jh+}r (h-]h.]h/]h0]h2]uh#jh]r h>Xsend_increment_clicksr r }r(h"Uh#jubah)hqubaubhP)r}r(h"XfThis function sends a simple message to the broker. The message body only contains the URL we want to increment as plain-text, so the exchange and routing key play a role here. We use an exchange called ``clicks``, with a routing key of ``increment_click``, so any consumer binding a queue to this exchange using this routing key will receive these messages.h#hh$h'h)hTh+}r(h-]h.]h/]h0]h2]uh4KOh]r(h>XThis function sends a simple message to the broker. The message body only contains the URL we want to increment as plain-text, so the exchange and routing key play a role here. We use an exchange called rr}r(h"XThis function sends a simple message to the broker. The message body only contains the URL we want to increment as plain-text, so the exchange and routing key play a role here. We use an exchange called h#jubhi)r}r(h"X ``clicks``h+}r(h-]h.]h/]h0]h2]uh#jh]rh>Xclicksrr}r(h"Uh#jubah)hqubh>X, with a routing key of rr}r(h"X, with a routing key of h#jubhi)r }r!(h"X``increment_click``h+}r"(h-]h.]h/]h0]h2]uh#jh]r#h>Xincrement_clickr$r%}r&(h"Uh#j ubah)hqubh>Xf, so any consumer binding a queue to this exchange using this routing key will receive these messages.r'r(}r)(h"Xf, so any consumer binding a queue to this exchange using this routing key will receive these messages.h#jubeubeubh)r*}r+(h"XZ``process_clicks`` This function processes all currently gathered clicks sent using ``send_increment_clicks``. Instead of issuing one database query for every click it processes all of the messages first, calculates the new click count and issues one update per URL. A message that has been received will not be deleted from the broker until it has been acknowledged by the receiver, so if the receiver dies in the middle of processing the message, it will be re-sent at a later point in time. This guarantees delivery and we respect this feature here by not acknowledging the message until the clicks has actually been written to disk. **Note**: This could probably be optimized further with some hand-written SQL, but it will do for now. Let's say it's an exercise left for the picky reader, albeit a discouraged one if you can survive without doing it. h#hh$h'h)jh+}r,(h-]h.]h/]h0]h2]uh4Nh5hh]r-(hP)r.}r/(h"X``process_clicks``r0h#j*h$h'h)hTh+}r1(h-]h.]h/]h0]h2]uh4KUh]r2hi)r3}r4(h"j0h+}r5(h-]h.]h/]h0]h2]uh#j.h]r6h>Xprocess_clicksr7r8}r9(h"Uh#j3ubah)hqubaubhP)r:}r;(h"XiThis function processes all currently gathered clicks sent using ``send_increment_clicks``. Instead of issuing one database query for every click it processes all of the messages first, calculates the new click count and issues one update per URL. A message that has been received will not be deleted from the broker until it has been acknowledged by the receiver, so if the receiver dies in the middle of processing the message, it will be re-sent at a later point in time. This guarantees delivery and we respect this feature here by not acknowledging the message until the clicks has actually been written to disk.h#j*h$h'h)hTh+}r<(h-]h.]h/]h0]h2]uh4KWh]r=(h>XAThis function processes all currently gathered clicks sent using r>r?}r@(h"XAThis function processes all currently gathered clicks sent using h#j:ubhi)rA}rB(h"X``send_increment_clicks``h+}rC(h-]h.]h/]h0]h2]uh#j:h]rDh>Xsend_increment_clicksrErF}rG(h"Uh#jAubah)hqubh>X. Instead of issuing one database query for every click it processes all of the messages first, calculates the new click count and issues one update per URL. A message that has been received will not be deleted from the broker until it has been acknowledged by the receiver, so if the receiver dies in the middle of processing the message, it will be re-sent at a later point in time. This guarantees delivery and we respect this feature here by not acknowledging the message until the clicks has actually been written to disk.rHrI}rJ(h"X. Instead of issuing one database query for every click it processes all of the messages first, calculates the new click count and issues one update per URL. A message that has been received will not be deleted from the broker until it has been acknowledged by the receiver, so if the receiver dies in the middle of processing the message, it will be re-sent at a later point in time. This guarantees delivery and we respect this feature here by not acknowledging the message until the clicks has actually been written to disk.h#j:ubeubhP)rK}rL(h"X**Note**: This could probably be optimized further with some hand-written SQL, but it will do for now. Let's say it's an exercise left for the picky reader, albeit a discouraged one if you can survive without doing it.h#j*h$h'h)hTh+}rM(h-]h.]h/]h0]h2]uh4Kah]rN(cdocutils.nodes strong rO)rP}rQ(h"X**Note**h+}rR(h-]h.]h/]h0]h2]uh#jKh]rSh>XNoterTrU}rV(h"Uh#jPubah)UstrongrWubh>X: This could probably be optimized further with some hand-written SQL, but it will do for now. Let's say it's an exercise left for the picky reader, albeit a discouraged one if you can survive without doing it.rXrY}rZ(h"X: This could probably be optimized further with some hand-written SQL, but it will do for now. Let's say it's an exercise left for the picky reader, albeit a discouraged one if you can survive without doing it.h#jKubeubeubeubhP)r[}r\(h"XOn to the code...r]h#hh$h'h)hTh+}r^(h-]h.]h/]h0]h2]uh4Kfh5hh]r_h>XOn to the code...r`ra}rb(h"j]h#j[ubaubhP)rc}rd(h"X*clickmuncher/messaging.py*:reh#hh$h'h)hTh+}rf(h-]h.]h/]h0]h2]uh4Khh5hh]rg(h)rh}ri(h"X*clickmuncher/messaging.py*h+}rj(h-]h.]h/]h0]h2]uh#jch]rkh>Xclickmuncher/messaging.pyrlrm}rn(h"Uh#jhubah)hubh>X:ro}rp(h"X:h#jcubeubh)rq}rr(h"Xxfrom carrot.connection import DjangoBrokerConnection from carrot.messaging import Publisher, Consumer from clickmuncher.models import Click def send_increment_clicks(for_url): """Send a message for incrementing the click count for an URL.""" connection = DjangoBrokerConnection() publisher = Publisher(connection=connection, exchange="clicks", routing_key="increment_click", exchange_type="direct") publisher.send(for_url) publisher.close() connection.close() def process_clicks(): """Process all currently gathered clicks by saving them to the database.""" connection = DjangoBrokerConnection() consumer = Consumer(connection=connection, queue="clicks", exchange="clicks", routing_key="increment_click", exchange_type="direct") # First process the messages: save the number of clicks # for every URL. clicks_for_url = {} messages_for_url = {} for message in consumer.iterqueue(): url = message.body clicks_for_url[url] = clicks_for_url.get(url, 0) + 1 # We also need to keep the message objects so we can ack the # messages as processed when we are finished with them. if url in messages_for_url: messages_for_url[url].append(message) else: messages_for_url[url] = [message] # Then increment the clicks in the database so we only need # one UPDATE/INSERT for each URL. for url, click_count in clicks_for_urls.items(): Click.objects.increment_clicks(url, click_count) # Now that the clicks has been registered for this URL we can # acknowledge the messages [message.ack() for message in messages_for_url[url]] consumer.close() connection.close()h#hh$h'h)hh+}rs(hωhXpythonhhh0]h/]h-]h.]h2]uh4Kjh5hh]rth>Xxfrom carrot.connection import DjangoBrokerConnection from carrot.messaging import Publisher, Consumer from clickmuncher.models import Click def send_increment_clicks(for_url): """Send a message for incrementing the click count for an URL.""" connection = DjangoBrokerConnection() publisher = Publisher(connection=connection, exchange="clicks", routing_key="increment_click", exchange_type="direct") publisher.send(for_url) publisher.close() connection.close() def process_clicks(): """Process all currently gathered clicks by saving them to the database.""" connection = DjangoBrokerConnection() consumer = Consumer(connection=connection, queue="clicks", exchange="clicks", routing_key="increment_click", exchange_type="direct") # First process the messages: save the number of clicks # for every URL. clicks_for_url = {} messages_for_url = {} for message in consumer.iterqueue(): url = message.body clicks_for_url[url] = clicks_for_url.get(url, 0) + 1 # We also need to keep the message objects so we can ack the # messages as processed when we are finished with them. if url in messages_for_url: messages_for_url[url].append(message) else: messages_for_url[url] = [message] # Then increment the clicks in the database so we only need # one UPDATE/INSERT for each URL. for url, click_count in clicks_for_urls.items(): Click.objects.increment_clicks(url, click_count) # Now that the clicks has been registered for this URL we can # acknowledge the messages [message.ack() for message in messages_for_url[url]] consumer.close() connection.close()rurv}rw(h"Uh#jqubaubeubh)rx}ry(h"Uh#h h$h'h)h*h+}rz(h-]h.]h/]h0]r{hah2]r|h auh4Kh5hh]r}(h7)r~}r(h"X View and URLsrh#jxh$h'h)h;h+}r(h-]h.]h/]h0]h2]uh4Kh5hh]rh>X View and URLsrr}r(h"jh#j~ubaubhP)r}r(h"XThis is also simple stuff, don't think I have to explain this code to you. The interface is as follows, if you have a link to http://google.com you would want to count the clicks for, you replace the URL with:h#jxh$h'h)hTh+}r(h-]h.]h/]h0]h2]uh4Kh5hh]r(h>X~This is also simple stuff, don't think I have to explain this code to you. The interface is as follows, if you have a link to rr}r(h"X~This is also simple stuff, don't think I have to explain this code to you. The interface is as follows, if you have a link to h#jubcdocutils.nodes reference r)r}r(h"Xhttp://google.comrh+}r(Urefurijh0]h/]h-]h.]h2]uh#jh]rh>Xhttp://google.comrr}r(h"Uh#jubah)U referencerubh>XB you would want to count the clicks for, you replace the URL with:rr}r(h"XB you would want to count the clicks for, you replace the URL with:h#jubeubcdocutils.nodes block_quote r)r}r(h"Uh#jxh$h'h)U block_quoterh+}r(h-]h.]h/]h0]h2]uh4Nh5hh]rhP)r}r(h"X5http://mysite/clickmuncher/count/?u=http://google.comrh#jh$h'h)hTh+}r(h-]h.]h/]h0]h2]uh4Kh]rj)r}r(h"jh+}r(Urefurijh0]h/]h-]h.]h2]uh#jh]rh>X5http://mysite/clickmuncher/count/?u=http://google.comrr}r(h"Uh#jubah)jubaubaubhP)r}r(h"XWand the ``count`` view will send off an increment message and forward you to that site.h#jxh$h'h)hTh+}r(h-]h.]h/]h0]h2]uh4Kh5hh]r(h>Xand the rr}r(h"Xand the h#jubhi)r}r(h"X ``count``h+}r(h-]h.]h/]h0]h2]uh#jh]rh>Xcountrr}r(h"Uh#jubah)hqubh>XF view will send off an increment message and forward you to that site.rr}r(h"XF view will send off an increment message and forward you to that site.h#jubeubhP)r}r(h"X*clickmuncher/views.py*:rh#jxh$h'h)hTh+}r(h-]h.]h/]h0]h2]uh4Kh5hh]r(h)r}r(h"X*clickmuncher/views.py*h+}r(h-]h.]h/]h0]h2]uh#jh]rh>Xclickmuncher/views.pyrr}r(h"Uh#jubah)hubh>X:r}r(h"X:h#jubeubh)r}r(h"Xfrom django.http import HttpResponseRedirect from clickmuncher.messaging import send_increment_clicks def count(request): url = request.GET["u"] send_increment_clicks(url) return HttpResponseRedirect(url)h#jxh$h'h)hh+}r(hωhXpythonhhh0]h/]h-]h.]h2]uh4Kh5hh]rh>Xfrom django.http import HttpResponseRedirect from clickmuncher.messaging import send_increment_clicks def count(request): url = request.GET["u"] send_increment_clicks(url) return HttpResponseRedirect(url)rr}r(h"Uh#jubaubhP)r}r(h"X*clickmuncher/urls.py*:rh#jxh$h'h)hTh+}r(h-]h.]h/]h0]h2]uh4Kh5hh]r(h)r}r(h"X*clickmuncher/urls.py*h+}r(h-]h.]h/]h0]h2]uh#jh]rh>Xclickmuncher/urls.pyrr}r(h"Uh#jubah)hubh>X:r}r(h"X:h#jubeubh)r}r(h"Xfrom django.conf.urls.defaults import patterns, url from clickmuncher import views urlpatterns = patterns("", url(r'^$', views.count, name="clickmuncher-count"), )h#jxh$h'h)hh+}r(hωhXpythonhhh0]h/]h-]h.]h2]uh4Kh5hh]rh>Xfrom django.conf.urls.defaults import patterns, url from clickmuncher import views urlpatterns = patterns("", url(r'^$', views.count, name="clickmuncher-count"), )rr}r(h"Uh#jubaubeubh)r}r(h"Uh#h h$h'h)h*h+}r(h-]h.]h/]h0]rhah2]rh auh4Kh5hh]r(h7)r}r(h"XCreating the periodic taskrh#jh$h'h)h;h+}r(h-]h.]h/]h0]h2]uh4Kh5hh]rh>XCreating the periodic taskrr}r(h"jh#jubaubhP)r}r(h"XKProcessing the clicks every 30 minutes is easy using celery periodic tasks.rh#jh$h'h)hTh+}r(h-]h.]h/]h0]h2]uh4Kh5hh]rh>XKProcessing the clicks every 30 minutes is easy using celery periodic tasks.rr}r(h"jh#jubaubhP)r}r(h"X*clickmuncher/tasks.py*:rh#jh$h'h)hTh+}r(h-]h.]h/]h0]h2]uh4Kh5hh]r(h)r}r(h"X*clickmuncher/tasks.py*h+}r(h-]h.]h/]h0]h2]uh#jh]rh>Xclickmuncher/tasks.pyrr}r(h"Uh#jubah)hubh>X:r }r (h"X:h#jubeubh)r }r (h"Xfrom celery.task import PeriodicTask from clickmuncher.messaging import process_clicks from datetime import timedelta class ProcessClicksTask(PeriodicTask): run_every = timedelta(minutes=30) def run(self, \*\*kwargs): process_clicks()h#jh$h'h)hh+}r (hωhXpythonhhh0]h/]h-]h.]h2]uh4Kh5hh]rh>Xfrom celery.task import PeriodicTask from clickmuncher.messaging import process_clicks from datetime import timedelta class ProcessClicksTask(PeriodicTask): run_every = timedelta(minutes=30) def run(self, \*\*kwargs): process_clicks()rr}r(h"Uh#j ubaubhP)r}r(h"XWe subclass from :class:`celery.task.base.PeriodicTask`, set the ``run_every`` attribute and in the body of the task just call the ``process_clicks`` function we wrote earlier.h#jh$h'h)hTh+}r(h-]h.]h/]h0]h2]uh4Kh5hh]r(h>XWe subclass from rr}r(h"XWe subclass from h#jubcsphinx.addnodes pending_xref r)r}r(h"X&:class:`celery.task.base.PeriodicTask`rh#jh$h'h)U pending_xrefrh+}r(UreftypeXclassUrefwarnrU reftargetr Xcelery.task.base.PeriodicTaskU refdomainXpyr!h0]h/]U refexplicith-]h.]h2]Urefdocr"Xtutorials/clickcounterr#Upy:classr$NU py:moduler%Nuh4Kh]r&hi)r'}r((h"jh+}r)(h-]h.]r*(Uxrefr+j!Xpy-classr,eh/]h0]h2]uh#jh]r-h>Xcelery.task.base.PeriodicTaskr.r/}r0(h"Uh#j'ubah)hqubaubh>X , set the r1r2}r3(h"X , set the h#jubhi)r4}r5(h"X ``run_every``h+}r6(h-]h.]h/]h0]h2]uh#jh]r7h>X run_everyr8r9}r:(h"Uh#j4ubah)hqubh>X5 attribute and in the body of the task just call the r;r<}r=(h"X5 attribute and in the body of the task just call the h#jubhi)r>}r?(h"X``process_clicks``h+}r@(h-]h.]h/]h0]h2]uh#jh]rAh>Xprocess_clicksrBrC}rD(h"Uh#j>ubah)hqubh>X function we wrote earlier.rErF}rG(h"X function we wrote earlier.h#jubeubeubh)rH}rI(h"Uh#h h$h'h)h*h+}rJ(h-]h.]h/]h0]rKhah2]rLh auh4Kh5hh]rM(h7)rN}rO(h"X FinishingrPh#jHh$h'h)h;h+}rQ(h-]h.]h/]h0]h2]uh4Kh5hh]rRh>X FinishingrSrT}rU(h"jPh#jNubaubhP)rV}rW(h"XThere are still ways to improve this application. The URLs could be cleaned so the URL http://google.com and http://google.com/ is the same. Maybe it's even possible to update the click count using a single UPDATE query?h#jHh$h'h)hTh+}rX(h-]h.]h/]h0]h2]uh4Kh5hh]rY(h>XWThere are still ways to improve this application. The URLs could be cleaned so the URL rZr[}r\(h"XWThere are still ways to improve this application. The URLs could be cleaned so the URL h#jVubj)r]}r^(h"Xhttp://google.comr_h+}r`(Urefurij_h0]h/]h-]h.]h2]uh#jVh]rah>Xhttp://google.comrbrc}rd(h"Uh#j]ubah)jubh>X and rerf}rg(h"X and h#jVubj)rh}ri(h"Xhttp://google.com/rjh+}rk(Urefurijjh0]h/]h-]h.]h2]uh#jVh]rlh>Xhttp://google.com/rmrn}ro(h"Uh#jhubah)jubh>X] is the same. Maybe it's even possible to update the click count using a single UPDATE query?rprq}rr(h"X] is the same. Maybe it's even possible to update the click count using a single UPDATE query?h#jVubeubhP)rs}rt(h"XIf you have any questions regarding this tutorial, please send a mail to the mailing-list or come join us in the #celery IRC channel at Freenode: http://celeryq.org/introduction.html#getting-helph#jHh$h'h)hTh+}ru(h-]h.]h/]h0]h2]uh4Kh5hh]rv(h>XIf you have any questions regarding this tutorial, please send a mail to the mailing-list or come join us in the #celery IRC channel at Freenode: rwrx}ry(h"XIf you have any questions regarding this tutorial, please send a mail to the mailing-list or come join us in the #celery IRC channel at Freenode: h#jsubj)rz}r{(h"X1http://celeryq.org/introduction.html#getting-helpr|h+}r}(Urefurij|h0]h/]h-]h.]h2]uh#jsh]r~h>X1http://celeryq.org/introduction.html#getting-helprr}r(h"Uh#jzubah)jubeubeubeubah"UU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh5hU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh;NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUT/var/build/user_builds/celery/checkouts/1.0-archived/docs/tutorials/clickcounter.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hjxhhBhjhh hhhjHhhuUsubstitution_namesr}rh)h5h+}r(h-]h0]h/]Usourceh'h.]h2]uU footnotesr]rUrefidsr}rub.PKXDDM//5celery-1.0-archived/.doctrees/tutorials/index.doctreecdocutils.nodes document q)q}q(U nametypesq}qX tutorialsqNsUsubstitution_defsq}qUparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startq KUnameidsq}qhU tutorialsqsUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXM/var/build/user_builds/celery/checkouts/1.0-archived/docs/tutorials/index.rstqq}qbUtagnameqUsectionqU attributesq}q (Udupnamesq!]Uclassesq"]Ubackrefsq#]Uidsq$]q%haUnamesq&]q'hauUlineq(KUdocumentq)hh]q*(cdocutils.nodes title q+)q,}q-(hX Tutorialsq.hhhhhUtitleq/h}q0(h!]h"]h#]h$]h&]uh(Kh)hh]q1cdocutils.nodes Text q2X Tutorialsq3q4}q5(hh.hh,ubaubcdocutils.nodes field_list q6)q7}q8(hUhhhhhU field_listq9h}q:(h!]h"]h#]h$]h&]uh(Kh)hh]q;(cdocutils.nodes field q<)q=}q>(hUhh7hhhUfieldq?h}q@(h!]h"]h#]h$]h&]uh(Kh)hh]qA(cdocutils.nodes field_name qB)qC}qD(hXReleaseqEh}qF(h!]h"]h#]h$]h&]uhh=h]qGh2XReleaseqHqI}qJ(hhEhhCubahU field_nameqKubcdocutils.nodes field_body qL)qM}qN(hX |version|qOh}qP(h!]h"]h#]h$]h&]uhh=h]qQcdocutils.nodes paragraph qR)qS}qT(hhOhhMhhhU paragraphqUh}qV(h!]h"]h#]h$]h&]uh(Kh]qWh2X1.0qXqY}qZ(hU1.0q[hhSubaubahU field_bodyq\ubeubh<)q]}q^(hUhh7hhhh?h}q_(h!]h"]h#]h$]h&]uh(Kh)hh]q`(hB)qa}qb(hXDateqch}qd(h!]h"]h#]h$]h&]uhh]h]qeh2XDateqfqg}qh(hhchhaubahhKubhL)qi}qj(hX|today| h}qk(h!]h"]h#]h$]h&]uhh]h]qlhR)qm}qn(hX|today|qohhihhhhUh}qp(h!]h"]h#]h$]h&]uh(Kh]qqh2XFebruary 04, 2014qrqs}qt(hXFebruary 04, 2014hhmubaubahh\ubeubeubcdocutils.nodes compound qu)qv}qw(hUhhhhhUcompoundqxh}qy(h!]h"]qzUtoctree-wrapperq{ah#]h$]h&]uh(Nh)hh]q|csphinx.addnodes toctree q})q~}q(hUhhvhhhUtoctreeqh}q(UnumberedqKU includehiddenqhXtutorials/indexqU titlesonlyqUglobqh$]h#]h!]h"]h&]Uentriesq]q(NXtutorials/externalqqNXtutorials/otherqueuesqqNXtutorials/clickcounterqqeUhiddenqU includefilesq]q(hhheUmaxdepthqKuh(Kh]ubaubeubahUU transformerqNU footnote_refsq}qUrefnamesq}qUsymbol_footnotesq]qUautofootnote_refsq]qUsymbol_footnote_refsq]qU citationsq]qh)hU current_lineqNUtransform_messagesq]qUreporterqNUid_startqKU autofootnotesq]qU citation_refsq}qUindirect_targetsq]qUsettingsq(cdocutils.frontend Values qoq}q(Ufootnote_backlinksqKUrecord_dependenciesqNU rfc_base_urlqUhttp://tools.ietf.org/html/qU tracebackqUpep_referencesqNUstrip_commentsqNU toc_backlinksqUentryqU language_codeqUenqU datestampqNU report_levelqKU _destinationqNU halt_levelqKU strip_classesqNh/NUerror_encoding_error_handlerqUbackslashreplaceqUdebugqNUembed_stylesheetq‰Uoutput_encoding_error_handlerqUstrictqU sectnum_xformqKUdump_transformsqNU docinfo_xformqKUwarning_streamqNUpep_file_url_templateqUpep-%04dqUexit_status_levelqKUconfigqNUstrict_visitorqNUcloak_email_addressesqΈUtrim_footnote_reference_spaceqωUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqӉU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUM/var/build/user_builds/celery/checkouts/1.0-archived/docs/tutorials/index.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qhhsUsubstitution_namesq}qhh)h}q(h!]h$]h#]Usourcehh"]h&]uU footnotesq]qUrefidsq}qub.PKXDDgjٖ;;;celery-1.0-archived/.doctrees/tutorials/otherqueues.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X configurationqNX installationqNXdatabaseqNXimportant notesq NXredisq NX8using celery with redis/database as the messaging queue.q NXcarrotq Xghettoqq uUsubstitution_defsq}qUparse_messagesq]qcdocutils.nodes system_message q)q}q(U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUU referencedqKhh)q}q(hUhh)q}q(hUhhUsourceqcdocutils.nodes reprunicode q XS/var/build/user_builds/celery/checkouts/1.0-archived/docs/tutorials/otherqueues.rstq!q"}q#bUtagnameq$Usectionq%U attributesq&}q'(Udupnamesq(]Uclassesq)]Ubackrefsq*]Uidsq+]q,U7using-celery-with-redis-database-as-the-messaging-queueq-aUnamesq.]q/h auUlineq0KUdocumentq1hUchildrenq2]q3(cdocutils.nodes title q4)q5}q6(hX8Using Celery with Redis/Database as the messaging queue.q7hhhh"h$Utitleq8h&}q9(h(]h)]h*]h+]h.]uh0Kh1hh2]q:cdocutils.nodes Text q;X8Using Celery with Redis/Database as the messaging queue.q(hh7hh5ubaubcdocutils.nodes paragraph q?)q@}qA(hXThere's a plug-in for celery that enables the use of Redis or an SQL database as the messaging queue. This is not part of celery itself, but exists as an extension to `carrot`_.hhhh"h$U paragraphqBh&}qC(h(]h)]h*]h+]h.]uh0Kh1hh2]qD(h;XThere's a plug-in for celery that enables the use of Redis or an SQL database as the messaging queue. This is not part of celery itself, but exists as an extension to qEqF}qG(hXThere's a plug-in for celery that enables the use of Redis or an SQL database as the messaging queue. This is not part of celery itself, but exists as an extension to hh@ubcdocutils.nodes reference qH)qI}qJ(hX `carrot`_UresolvedqKKhh@h$U referenceqLh&}qM(UnameXcarrotqNUrefuriqOXhttp://ask.github.com/carrotqPh+]h*]h(]h)]h.]uh2]qQh;XcarrotqRqS}qT(hUhhIubaubh;X.qU}qV(hX.hh@ubeubcdocutils.nodes target qW)qX}qY(hX*.. _`carrot`: http://ask.github.com/carrothKhhhh"h$UtargetqZh&}q[(hOhPh+]q\Ucarrotq]ah*]h(]h)]h.]q^h auh0K h1hh2]ubhW)q_}q`(hX,.. _`ghettoq`: http://ask.github.com/ghettoqhKhhhh"h$hZh&}qa(hOXhttp://ask.github.com/ghettoqqbh+]qcUghettoqqdah*]h(]h)]h.]qeh auh0K h1hh2]ubh)qf}qg(hUhhhh"h$h%h&}qh(h(]h)]h*]h+]qiU installationqjah.]qkhauh0K h1hh2]ql(h4)qm}qn(hX Installationqohhfhh"h$h8h&}qp(h(]h)]h*]h+]h.]uh0K h1hh2]qqh;X Installationqrqs}qt(hhohhmubaubh?)qu}qv(hX,You need to install the `ghettoq`_ library::qwhhfhh"h$hBh&}qx(h(]h)]h*]h+]h.]uh0Kh1hh2]qy(h;XYou need to install the qzq{}q|(hXYou need to install the hhuubhH)q}}q~(hX `ghettoq`_hKKhhuh$hLh&}q(UnameXghettoqqhOhbh+]h*]h(]h)]h.]uh2]qh;Xghettoqqq}q(hUhh}ubaubh;X library:qq}q(hX library:hhuubeubcdocutils.nodes literal_block q)q}q(hX$ pip install -U ghettoqhhfhh"h$U literal_blockqh&}q(U xml:spaceqUpreserveqh+]h*]h(]h)]h.]uh0Kh1hh2]qh;X$ pip install -U ghettoqqq}q(hUhhubaubeubh)q}q(hUhhhh"h$h%h&}q(h(]h)]h*]h+]qUredisqah.]qh auh0Kh1hh2]q(h4)q}q(hXRedisqhhhh"h$h8h&}q(h(]h)]h*]h+]h.]uh0Kh1hh2]qh;XRedisqq}q(hhhhubaubh?)q}q(hXCFor the Redis support you have to install the Python redis client::qhhhh"h$hBh&}q(h(]h)]h*]h+]h.]uh0Kh1hh2]qh;XBFor the Redis support you have to install the Python redis client:qq}q(hXBFor the Redis support you have to install the Python redis client:hhubaubh)q}q(hX$ pip install -U redishhhh"h$hh&}q(hhh+]h*]h(]h)]h.]uh0Kh1hh2]qh;X$ pip install -U redisqq}q(hUhhubaubh)q}q(hUhKhhhh"h$h%h&}q(h(]qX configurationqah)]h*]h+]qU configurationqah.]uh0Kh1hh2]q(h4)q}q(hX Configurationqhhhh"h$h8h&}q(h(]h)]h*]h+]h.]uh0Kh1hh2]qh;X Configurationqq}q(hhhhubaubh?)q}q(hXbConfiguration is easy, set the carrot backend, and configure the location of your Redis database::hhhh"h$hBh&}q(h(]h)]h*]h+]h.]uh0Kh1hh2]qh;XaConfiguration is easy, set the carrot backend, and configure the location of your Redis database:qŅq}q(hXaConfiguration is easy, set the carrot backend, and configure the location of your Redis database:hhubaubh)q}q(hXCARROT_BACKEND = "ghettoq.taproot.Redis" BROKER_HOST = "localhost" # Maps to redis host. BROKER_PORT = 6379 # Maps to redis port. BROKER_VHOST = "celery" # Maps to database name.hhhh"h$hh&}q(hhh+]h*]h(]h)]h.]uh0K h1hh2]qh;XCARROT_BACKEND = "ghettoq.taproot.Redis" BROKER_HOST = "localhost" # Maps to redis host. BROKER_PORT = 6379 # Maps to redis port. BROKER_VHOST = "celery" # Maps to database name.q̅q}q(hUhhubaubeubeubheubhh"h$h%h&}q(h(]h)]h*]h+]qUdatabaseqah.]qhauh0K'h1hh2]q(h4)q}q(hXDatabaseqhhhh"h$h8h&}q(h(]h)]h*]h+]h.]uh0K'h1hh2]qh;XDatabaseqمq}q(hhhhubaubhh)q}q(hUhhhh"h$h%h&}q(h(]h)]h*]h+]qUimportant-notesqah.]qh auh0KQh1hh2]q(h4)q}q(hXImportant notesqhhhh"h$h8h&}q(h(]h)]h*]h+]h.]uh0KQh1hh2]qh;XImportant notesq腁q}q(hhhhubaubh?)q}q(hXThese message queues does not have the concept of exchanges and routing keys, there's only the queue entity. As a result of this you need to set the name of the exchange to be the same as the queue::hhhh"h$hBh&}q(h(]h)]h*]h+]h.]uh0KSh1hh2]qh;XThese message queues does not have the concept of exchanges and routing keys, there's only the queue entity. As a result of this you need to set the name of the exchange to be the same as the queue:qq}q(hXThese message queues does not have the concept of exchanges and routing keys, there's only the queue entity. As a result of this you need to set the name of the exchange to be the same as the queue:hhubaubh)q}q(hX!CELERY_DEFAULT_EXCHANGE = "tasks"hhhh"h$hh&}q(hhh+]h*]h(]h)]h.]uh0KWh1hh2]qh;X!CELERY_DEFAULT_EXCHANGE = "tasks"qq}q(hUhhubaubh?)q}q(hXor in a custom queue-mapping:qhhhh"h$hBh&}q(h(]h)]h*]h+]h.]uh0KYh1hh2]qh;Xor in a custom queue-mapping:qq}r(hhhhubaubh)r}r(hX[CELERY_QUEUES = { "tasks": {"exchange": "tasks"}, "feeds": {"exchange": "feeds"}, }hhhh"h$hh&}r(UlinenosrUlanguagerXpythonhhh+]h*]h(]h)]h.]uh0K[h1hh2]rh;X[CELERY_QUEUES = { "tasks": {"exchange": "tasks"}, "feeds": {"exchange": "feeds"}, }rr}r (hUhjubaubh?)r }r (hX|This isn't a problem if you use the default queue setting, as the default is already using the same name for queue/exchange.r hhhh"h$hBh&}r (h(]h)]h*]h+]h.]uh0Kbh1hh2]rh;X|This isn't a problem if you use the default queue setting, as the default is already using the same name for queue/exchange.rr}r(hj hj ubaubeubeubhh"h$h%h&}r(h(]rhah)]h*]h+]rUid1rah.]uh0K*h1hh2]r(h4)r}r(hX Configurationrhhhh"h$h8h&}r(h(]h)]h*]h+]h.]uh0K*h1hh2]rh;X Configurationrr}r(hjhjubaubh?)r}r (hX_The database backend uses the Django ``DATABASE_*`` settings for database configuration values.hhhh"h$hBh&}r!(h(]h)]h*]h+]h.]uh0K,h1hh2]r"(h;X%The database backend uses the Django r#r$}r%(hX%The database backend uses the Django hjubcdocutils.nodes literal r&)r'}r((hX``DATABASE_*``h&}r)(h(]h)]h*]h+]h.]uhjh2]r*h;X DATABASE_*r+r,}r-(hUhj'ubah$Uliteralr.ubh;X, settings for database configuration values.r/r0}r1(hX, settings for database configuration values.hjubeubcdocutils.nodes enumerated_list r2)r3}r4(hUhhhh"h$Uenumerated_listr5h&}r6(Usuffixr7U.h+]h*]h(]Uprefixr8Uh)]h.]Uenumtyper9Uarabicr:uh0K/h1hh2]r;(cdocutils.nodes list_item r<)r=}r>(hXISet your carrot backend:: CARROT_BACKEND = "ghettoq.taproot.Database" hj3hh"h$U list_itemr?h&}r@(h(]h)]h*]h+]h.]uh0Nh1hh2]rA(h?)rB}rC(hXSet your carrot backend::hj=hh"h$hBh&}rD(h(]h)]h*]h+]h.]uh0K/h2]rEh;XSet your carrot backend:rFrG}rH(hXSet your carrot backend:hjBubaubh)rI}rJ(hX+CARROT_BACKEND = "ghettoq.taproot.Database"hj=h$hh&}rK(hhh+]h*]h(]h)]h.]uh0K1h2]rLh;X+CARROT_BACKEND = "ghettoq.taproot.Database"rMrN}rO(hUhjIubaubeubj<)rP}rQ(hXJAdd ``ghettoq`` to ``INSTALLED_APPS``:: INSTALLED_APPS = ("ghettoq", ) hj3hh"h$j?h&}rR(h(]h)]h*]h+]h.]uh0Nh1hh2]rS(h?)rT}rU(hX'Add ``ghettoq`` to ``INSTALLED_APPS``::hjPhh"h$hBh&}rV(h(]h)]h*]h+]h.]uh0K4h2]rW(h;XAdd rXrY}rZ(hXAdd hjTubj&)r[}r\(hX ``ghettoq``h&}r](h(]h)]h*]h+]h.]uhjTh2]r^h;Xghettoqr_r`}ra(hUhj[ubah$j.ubh;X to rbrc}rd(hX to hjTubj&)re}rf(hX``INSTALLED_APPS``h&}rg(h(]h)]h*]h+]h.]uhjTh2]rhh;XINSTALLED_APPSrirj}rk(hUhjeubah$j.ubh;X:rl}rm(hX:hjTubeubh)rn}ro(hXINSTALLED_APPS = ("ghettoq", )hjPh$hh&}rp(hhh+]h*]h(]h)]h.]uh0K6h2]rqh;XINSTALLED_APPS = ("ghettoq", )rrrs}rt(hUhjnubaubeubj<)ru}rv(hXVerify you database settings:: DATABASE_ENGINE = "mysql" DATABASE_NAME = "mydb" DATABASE_USER = "myuser" DATABASE_PASSWORD = "secret" hj3hh"h$j?h&}rw(h(]h)]h*]h+]h.]uh0Nh1hh2]rx(h?)ry}rz(hXVerify you database settings::hjuhh"h$hBh&}r{(h(]h)]h*]h+]h.]uh0K9h2]r|h;XVerify you database settings:r}r~}r(hXVerify you database settings:hjyubaubh)r}r(hXfDATABASE_ENGINE = "mysql" DATABASE_NAME = "mydb" DATABASE_USER = "myuser" DATABASE_PASSWORD = "secret"hjuh$hh&}r(hhh+]h*]h(]h)]h.]uh0K;h2]rh;XfDATABASE_ENGINE = "mysql" DATABASE_NAME = "mydb" DATABASE_USER = "myuser" DATABASE_PASSWORD = "secret"rr}r(hUhjubaubeubeubcdocutils.nodes block_quote r)r}r(hUhhhh"h$U block_quoterh&}r(h(]h)]h*]h+]h.]uh0Nh1hh2]rh?)r}r(hXThe above is just an example, if you haven't configured your database before you should read the Django database settings reference: http://docs.djangoproject.com/en/1.1/ref/settings/#database-enginehjhh"h$hBh&}r(h(]h)]h*]h+]h.]uh0K@h2]r(h;XThe above is just an example, if you haven't configured your database before you should read the Django database settings reference: rr}r(hXThe above is just an example, if you haven't configured your database before you should read the Django database settings reference: hjubhH)r}r(hXBhttp://docs.djangoproject.com/en/1.1/ref/settings/#database-enginerh&}r(Urefurijh+]h*]h(]h)]h.]uhjh2]rh;XBhttp://docs.djangoproject.com/en/1.1/ref/settings/#database-enginerr}r(hUhjubah$hLubeubaubj2)r}r(hUhhhh"h$j5h&}r(j7U.h+]h*]h(]j8Uh)]h.]j9j:uh0KEh1hh2]rj<)r}r(hXQSync your database schema. When using Django:: $ python manage.py syncdb hjhh"h$j?h&}r(h(]h)]h*]h+]h.]uh0Nh1hh2]r(h?)r}r(hXSync your database schema.rhjhh"h$hBh&}r(h(]h)]h*]h+]h.]uh0KEh2]rh;XSync your database schema.rr}r(hjhjubaubj)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh2]r(h?)r}r(hXWhen using Django::rhjhh"h$hBh&}r(h(]h)]h*]h+]h.]uh0KGh2]rh;XWhen using Django:rr}r(hXWhen using Django:hjubaubh)r}r(hX$ python manage.py syncdbhjh$hh&}r(hhh+]h*]h(]h)]h.]uh0KIh2]rh;X$ python manage.py syncdbrr}r(hUhjubaubeh$jubeubaubj)r}r(hUhhhh"h$jh&}r(h(]h)]h*]h+]h.]uh0Nh1hh2]r(h?)r}r(hXROr if you're not using django, but the default loader instead run ``celeryinit``::hjhh"h$hBh&}r(h(]h)]h*]h+]h.]uh0KKh2]r(h;XBOr if you're not using django, but the default loader instead run rr}r(hXBOr if you're not using django, but the default loader instead run hjubj&)r}r(hX``celeryinit``h&}r(h(]h)]h*]h+]h.]uhjh2]rh;X celeryinitrr}r(hUhjubah$j.ubh;X:r}r(hX:hjubeubh)r}r(hX $ celeryinithjh$hh&}r(hhh+]h*]h(]h)]h.]uh0KNh2]rh;X $ celeryinitrr}r(hUhjubaubeubeubhh"h$Usystem_messagerh&}r(h(]UlevelKh+]h*]rjaUsourceh"h)]h.]UlineK*UtypeUINFOruh0K*h1hh2]rh?)r}r(hUh&}r(h(]h)]h*]h+]h.]uhhh2]rh;X0Duplicate implicit target name: "configuration".rr}r(hUhjubah$hBubaubaUcurrent_sourcerNU decorationrNUautofootnote_startrKUnameidsr}r(hNhhjhhh hh hh h-h h]h hduh2]rhahUU transformerrNU footnote_refsr}rUrefnamesr}r(hN]rhIah]rh}auUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh1hU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r (Ufootnote_backlinksr KUrecord_dependenciesr NU rfc_base_urlr Uhttp://tools.ietf.org/html/r U tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh8NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformr KUdump_transformsr!NU docinfo_xformr"KUwarning_streamr#NUpep_file_url_templater$Upep-%04dr%Uexit_status_levelr&KUconfigr'NUstrict_visitorr(NUcloak_email_addressesr)Utrim_footnote_reference_spacer*Uenvr+NUdump_pseudo_xmlr,NUexpose_internalsr-NUsectsubtitle_xformr.U source_linkr/NUrfc_referencesr0NUoutput_encodingr1Uutf-8r2U source_urlr3NUinput_encodingr4U utf-8-sigr5U_disable_configr6NU id_prefixr7UU tab_widthr8KUerror_encodingr9UUTF-8r:U_sourcer;US/var/build/user_builds/celery/checkouts/1.0-archived/docs/tutorials/otherqueues.rstr<Ugettext_compactr=U generatorr>NUdump_internalsr?NU smart_quotesr@U pep_base_urlrAUhttp://www.python.org/dev/peps/rBUsyntax_highlightrCUlongrDUinput_encoding_error_handlerrEjUauto_id_prefixrFUidrGUdoctitle_xformrHUstrip_elements_with_classesrINU _config_filesrJ]Ufile_insertion_enabledrKU raw_enabledrLKU dump_settingsrMNubUsymbol_footnote_startrNKUidsrO}rP(hhhjhfh-hhhhhjhh]hXhhhdh_uUsubstitution_namesrQ}rRh$h1h&}rS(h(]h+]h*]Usourceh"h)]h.]uU footnotesrT]rUUrefidsrV}rWub.PKXDDּ)<celery-1.0-archived/.doctrees/reference/celery.views.doctreecdocutils.nodes document q)q}q(U nametypesq}qXdjango views - celery.viewsqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXT/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.views.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q Udjango-views-celery-viewsq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hXDjango Views - celery.viewsq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/XDjango Views - celery.viewsq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/Xiautodoc: failed to import module u'celery.views'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/views.py", line 7, in from celery.result import AsyncResult File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/result.py", line 13, in from celery.backends import default_backend File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/backends/__init__.py", line 3, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUT/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.views.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDDN: : Fcelery-1.0-archived/.doctrees/reference/celery.loaders.default.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xcelery.loaders.default.LoaderqX,celery.loaders.default.Loader.on_worker_initqX'default loader - celery.loaders.defaultqNX0celery.loaders.default.Loader.read_configurationq uUsubstitution_defsq }q Uparse_messagesq ]q Ucurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hhhhhU%default-loader-celery-loaders-defaultqh h uUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qX^/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.loaders.default.rstqq}qbUtagnameq Usectionq!U attributesq"}q#(Udupnamesq$]Uclassesq%]Ubackrefsq&]Uidsq']q((Xmodule-celery.loaders.defaultq)heUnamesq*]q+hauUlineq,KUdocumentq-hh]q.(cdocutils.nodes title q/)q0}q1(hX'Default Loader - celery.loaders.defaultq2hhhhh Utitleq3h"}q4(h$]h%]h&]h']h*]uh,Kh-hh]q5cdocutils.nodes Text q6X'Default Loader - celery.loaders.defaultq7q8}q9(hh2hh0ubaubcsphinx.addnodes index q:)q;}q<(hUhhhU q=h Uindexq>h"}q?(h']h&]h$]h%]h*]Uentries]q@(UsingleqAXcelery.loaders.default (module)Xmodule-celery.loaders.defaultUtqBauh,Kh-hh]ubh:)qC}qD(hUhhhNh h>h"}qE(h']h&]h$]h%]h*]Uentries]qF(hAX(Loader (class in celery.loaders.default)hUtqGauh,Nh-hh]ubcsphinx.addnodes desc qH)qI}qJ(hUhhhNh UdescqKh"}qL(UnoindexqMUdomainqNXpyh']h&]h$]h%]h*]UobjtypeqOXclassqPUdesctypeqQhPuh,Nh-hh]qR(csphinx.addnodes desc_signature qS)qT}qU(hXLoaderqVhhIhU qWh Udesc_signatureqXh"}qY(h']qZhaUmoduleq[hXcelery.loaders.defaultq\q]}q^bh&]h$]h%]h*]q_haUfullnameq`hVUclassqaUUfirstqbuh,Nh-hh]qc(csphinx.addnodes desc_annotation qd)qe}qf(hXclass hhThhWh Udesc_annotationqgh"}qh(h$]h%]h&]h']h*]uh,Nh-hh]qih6Xclass qjqk}ql(hUhheubaubcsphinx.addnodes desc_addname qm)qn}qo(hXcelery.loaders.default.hhThhWh U desc_addnameqph"}qq(h$]h%]h&]h']h*]uh,Nh-hh]qrh6Xcelery.loaders.default.qsqt}qu(hUhhnubaubcsphinx.addnodes desc_name qv)qw}qx(hhVhhThhWh U desc_nameqyh"}qz(h$]h%]h&]h']h*]uh,Nh-hh]q{h6XLoaderq|q}}q~(hUhhwubaubeubcsphinx.addnodes desc_content q)q}q(hUhhIhhWh U desc_contentqh"}q(h$]h%]h&]h']h*]uh,Nh-hh]q(cdocutils.nodes paragraph q)q}q(hXThe default loader.qhhhXy/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/default.py:docstring of celery.loaders.default.Loaderqh U paragraphqh"}q(h$]h%]h&]h']h*]uh,Kh-hh]qh6XThe default loader.qq}q(hhhhubaubh)q}q(hXSee the FAQ for example usage.qhhhhh hh"}q(h$]h%]h&]h']h*]uh,Kh-hh]qh6XSee the FAQ for example usage.qq}q(hhhhubaubh:)q}q(hUhhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/default.py:docstring of celery.loaders.default.Loader.on_worker_initqh h>h"}q(h']h&]h$]h%]h*]Uentries]q(hAX7on_worker_init() (celery.loaders.default.Loader method)hUtqauh,Nh-hh]ubhH)q}q(hUhhhhh hKh"}q(hMhNXpyh']h&]h$]h%]h*]hOXmethodqhQhuh,Nh-hh]q(hS)q}q(hXLoader.on_worker_init()hhhhWh hXh"}q(h']qhah[hXcelery.loaders.defaultqq}qbh&]h$]h%]h*]qhah`XLoader.on_worker_inithahVhbuh,Nh-hh]q(hv)q}q(hXon_worker_inithhhhWh hyh"}q(h$]h%]h&]h']h*]uh,Nh-hh]qh6Xon_worker_initqq}q(hUhhubaubcsphinx.addnodes desc_parameterlist q)q}q(hUhhhhWh Udesc_parameterlistqh"}q(h$]h%]h&]h']h*]uh,Nh-hh]ubeubh)q}q(hUhhhhWh hh"}q(h$]h%]h&]h']h*]uh,Nh-hh]q(h)q}q(hXQImports modules at worker init so tasks can be registered and used by the worked.qhhhhh hh"}q(h$]h%]h&]h']h*]uh,Kh-hh]qh6XQImports modules at worker init so tasks can be registered and used by the worked.qq}q(hhhhubaubh)q}q(hX`The list of modules to import is taken from the ``CELERY_IMPORTS`` setting in ``celeryconf.py``.hhhhh hh"}q(h$]h%]h&]h']h*]uh,Kh-hh]q(h6X0The list of modules to import is taken from the qȅq}q(hX0The list of modules to import is taken from the hhubcdocutils.nodes literal q)q}q(hX``CELERY_IMPORTS``h"}q(h$]h%]h&]h']h*]uhhh]qh6XCELERY_IMPORTSqЅq}q(hUhhubah Uliteralqubh6X setting in qԅq}q(hX setting in hhubh)q}q(hX``celeryconf.py``h"}q(h$]h%]h&]h']h*]uhhh]qh6X celeryconf.pyqۅq}q(hUhhubah hubh6X.q}q(hX.hhubeubeubeubh:)q}q(hUhhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/default.py:docstring of celery.loaders.default.Loader.read_configurationqh h>h"}q(h']h&]h$]h%]h*]Uentries]q(hAX;read_configuration() (celery.loaders.default.Loader method)h Utqauh,Nh-hh]ubhH)q}q(hUhhhhh hKh"}q(hMhNXpyh']h&]h$]h%]h*]hOXmethodqhQhuh,Nh-hh]q(hS)q}q(hXLoader.read_configuration()qhhhhWh hXh"}q(h']qh ah[hXcelery.loaders.defaultqq}qbh&]h$]h%]h*]qh ah`XLoader.read_configurationhahVhbuh,Nh-hh]q(hv)q}q(hXread_configurationhhhhWh hyh"}q(h$]h%]h&]h']h*]uh,Nh-hh]qh6Xread_configurationqq}q(hUhhubaubh)q}q(hUhhhhWh hh"}q(h$]h%]h&]h']h*]uh,Nh-hh]ubeubh)q}r(hUhhhhWh hh"}r(h$]h%]h&]h']h*]uh,Nh-hh]rh)r}r(hXpRead configuration from ``celeryconfig.py`` and configure celery and Django so it can be used by regular Python.hhhhh hh"}r(h$]h%]h&]h']h*]uh,Kh-hh]r(h6XRead configuration from rr}r (hXRead configuration from hjubh)r }r (hX``celeryconfig.py``h"}r (h$]h%]h&]h']h*]uhjh]r h6Xceleryconfig.pyrr}r(hUhj ubah hubh6XE and configure celery and Django so it can be used by regular Python.rr}r(hXE and configure celery and Django so it can be used by regular Python.hjubeubaubeubeubeubeubahUU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]r h-hU current_liner!NUtransform_messagesr"]r#Ureporterr$NUid_startr%KU autofootnotesr&]r'U citation_refsr(}r)Uindirect_targetsr*]r+Usettingsr,(cdocutils.frontend Values r-or.}r/(Ufootnote_backlinksr0KUrecord_dependenciesr1NU rfc_base_urlr2Uhttp://tools.ietf.org/html/r3U tracebackr4Upep_referencesr5NUstrip_commentsr6NU toc_backlinksr7Uentryr8U language_coder9Uenr:U datestampr;NU report_levelr<KU _destinationr=NU halt_levelr>KU strip_classesr?Nh3NUerror_encoding_error_handlerr@UbackslashreplacerAUdebugrBNUembed_stylesheetrCUoutput_encoding_error_handlerrDUstrictrEU sectnum_xformrFKUdump_transformsrGNU docinfo_xformrHKUwarning_streamrINUpep_file_url_templaterJUpep-%04drKUexit_status_levelrLKUconfigrMNUstrict_visitorrNNUcloak_email_addressesrOUtrim_footnote_reference_spacerPUenvrQNUdump_pseudo_xmlrRNUexpose_internalsrSNUsectsubtitle_xformrTU source_linkrUNUrfc_referencesrVNUoutput_encodingrWUutf-8rXU source_urlrYNUinput_encodingrZU utf-8-sigr[U_disable_configr\NU id_prefixr]UU tab_widthr^KUerror_encodingr_UUTF-8r`U_sourceraU^/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.loaders.default.rstrbUgettext_compactrcU generatorrdNUdump_internalsreNU smart_quotesrfU pep_base_urlrgUhttp://www.python.org/dev/peps/rhUsyntax_highlightriUlongrjUinput_encoding_error_handlerrkjEUauto_id_prefixrlUidrmUdoctitle_xformrnUstrip_elements_with_classesroNU _config_filesrp]rqUfile_insertion_enabledrrU raw_enabledrsKU dump_settingsrtNubUsymbol_footnote_startruKUidsrv}rw(h hh)cdocutils.nodes target rx)ry}rz(hUhhhh=h Utargetr{h"}r|(h$]h']r}h)ah&]Uismodh%]h*]uh,Kh-hh]ubhhhhhhTuUsubstitution_namesr~}rh h-h"}r(h$]h']h&]Usourcehh%]h*]uU footnotesr]rUrefidsr}rub.PKXDD8__Jcelery-1.0-archived/.doctrees/reference/celery.contrib.test_runner.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X1contrib: test runner - celery.contrib.test_runnerqNX$celery.contrib.test_runner.run_testsquUsubstitution_defsq}q Uparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startqKUnameidsq}q(hU.contrib-test-runner-celery-contrib-test-runnerqhhuUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXb/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.contrib.test_runner.rstqq}qbUtagnameqUsectionqU attributesq }q!(Udupnamesq"]Uclassesq#]Ubackrefsq$]Uidsq%]q&(X!module-celery.contrib.test_runnerq'heUnamesq(]q)hauUlineq*KUdocumentq+hh]q,(cdocutils.nodes title q-)q.}q/(hX1Contrib: Test runner - celery.contrib.test_runnerq0hhhhhUtitleq1h }q2(h"]h#]h$]h%]h(]uh*Kh+hh]q3cdocutils.nodes Text q4X1Contrib: Test runner - celery.contrib.test_runnerq5q6}q7(hh0hh.ubaubcsphinx.addnodes index q8)q9}q:(hUhhhU q;hUindexq(Usingleq?X#celery.contrib.test_runner (module)X!module-celery.contrib.test_runnerUtq@auh*Kh+hh]ubh8)qA}qB(hUhhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/contrib/test_runner.py:docstring of celery.contrib.test_runner.run_testsqChhqUhUdesc_signatureqVh }qW(h%]qXhaUmoduleqYhXcelery.contrib.test_runnerqZq[}q\bh$]h"]h#]h(]q]haUfullnameq^X run_testsq_Uclassq`UUfirstqauh*Nh+hh]qb(csphinx.addnodes desc_addname qc)qd}qe(hXcelery.contrib.test_runner.hhShhUhU desc_addnameqfh }qg(h"]h#]h$]h%]h(]uh*Nh+hh]qhh4Xcelery.contrib.test_runner.qiqj}qk(hUhhdubaubcsphinx.addnodes desc_name ql)qm}qn(hh_hhShhUhU desc_nameqoh }qp(h"]h#]h$]h%]h(]uh*Nh+hh]qqh4X run_testsqrqs}qt(hUhhmubaubcsphinx.addnodes desc_parameterlist qu)qv}qw(hUhhShhUhUdesc_parameterlistqxh }qy(h"]h#]h$]h%]h(]uh*Nh+hh]qz(csphinx.addnodes desc_parameter q{)q|}q}(hX test_labelsh }q~(h"]h#]h$]h%]h(]uhhvh]qh4X test_labelsqq}q(hUhh|ubahUdesc_parameterqubh{)q}q(hX*argsh }q(h"]h#]h$]h%]h(]uhhvh]qh4X*argsqq}q(hUhhubahhubh{)q}q(hX**kwargsh }q(h"]h#]h$]h%]h(]uhhvh]qh4X**kwargsqq}q(hUhhubahhubeubeubcsphinx.addnodes desc_content q)q}q(hUhhHhhUhU desc_contentqh }q(h"]h#]h$]h%]h(]uh*Nh+hh]q(cdocutils.nodes paragraph q)q}q(hX<Django test runner allowing testing of celery delayed tasks.qhhhhChU paragraphqh }q(h"]h#]h$]h%]h(]uh*Kh+hh]qh4X<Django test runner allowing testing of celery delayed tasks.qq}q(hhhhubaubh)q}q(hX+All tasks are run locally, not in a worker.qhhhhChhh }q(h"]h#]h$]h%]h(]uh*Kh+hh]qh4X+All tasks are run locally, not in a worker.qq}q(hhhhubaubh)q}q(hX1To use this runner set ``settings.TEST_RUNNER``::qhhhhChhh }q(h"]h#]h$]h%]h(]uh*Kh+hh]q(h4XTo use this runner set qq}q(hXTo use this runner set hhubcdocutils.nodes literal q)q}q(hX``settings.TEST_RUNNER``h }q(h"]h#]h$]h%]h(]uhhh]qh4Xsettings.TEST_RUNNERqq}q(hUhhubahUliteralqubh4X:q}q(hX:hhubeubcdocutils.nodes literal_block q)q}q(hX4TEST_RUNNER = "celery.contrib.test_runner.run_tests"hhhhChU literal_blockqh }q(U xml:spaceqUpreserveqh%]h$]h"]h#]h(]uh*Kh+hh]qh4X4TEST_RUNNER = "celery.contrib.test_runner.run_tests"qŅq}q(hUhhubaubeubeubeubahUU transformerqNU footnote_refsq}qUrefnamesq}qUsymbol_footnotesq]qUautofootnote_refsq]qUsymbol_footnote_refsq]qU citationsq]qh+hU current_lineqNUtransform_messagesq]qUreporterqNUid_startqKU autofootnotesq]qU citation_refsq}qUindirect_targetsq]qUsettingsq(cdocutils.frontend Values qoq}q(Ufootnote_backlinksqKUrecord_dependenciesqNU rfc_base_urlqUhttp://tools.ietf.org/html/qU tracebackqUpep_referencesqNUstrip_commentsqNU toc_backlinksqUentryqU language_codeqUenqU datestampqNU report_levelqKU _destinationqNU halt_levelqKU strip_classesqNh1NUerror_encoding_error_handlerqUbackslashreplaceqUdebugqNUembed_stylesheetqUoutput_encoding_error_handlerqUstrictqU sectnum_xformqKUdump_transformsqNU docinfo_xformqKUwarning_streamqNUpep_file_url_templateqUpep-%04dqUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkr NUrfc_referencesr NUoutput_encodingr Uutf-8r U source_urlr NUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUb/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.contrib.test_runner.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrhUauto_id_prefixr Uidr!Udoctitle_xformr"Ustrip_elements_with_classesr#NU _config_filesr$]Ufile_insertion_enabledr%U raw_enabledr&KU dump_settingsr'NubUsymbol_footnote_startr(KUidsr)}r*(h'cdocutils.nodes target r+)r,}r-(hUhhhh;hUtargetr.h }r/(h"]h%]r0h'ah$]Uismodh#]h(]uh*Kh+hh]ubhhhhSuUsubstitution_namesr1}r2hh+h }r3(h"]h%]h$]Usourcehh#]h(]uU footnotesr4]r5Urefidsr6}r7ub.PKXDDrfe88@celery-1.0-archived/.doctrees/reference/celery.task.http.doctreecdocutils.nodes document q)q}q(U nametypesq}qX&http callback tasks - celery.task.httpqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXX/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.task.http.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U$http-callback-tasks-celery-task-httpq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX&HTTP Callback Tasks - celery.task.httpq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X&HTTP Callback Tasks - celery.task.httpq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/Xautodoc: failed to import module u'celery.task.http'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/task/__init__.py", line 8, in from celery.execute import apply_async File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/execute/__init__.py", line 1, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUX/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.task.http.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDk$$@celery-1.0-archived/.doctrees/reference/celery.task.base.doctreecdocutils.nodes document q)q}q(U nametypesq}qX!defining tasks - celery.task.baseqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXX/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.task.base.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q Udefining-tasks-celery-task-baseq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX!Defining Tasks - celery.task.baseq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X!Defining Tasks - celery.task.baseq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/Xautodoc: failed to import module u'celery.task.base'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/task/__init__.py", line 8, in from celery.execute import apply_async File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/execute/__init__.py", line 1, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUX/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.task.base.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDpoתBcelery-1.0-archived/.doctrees/reference/celery.bin.celeryd.doctreecdocutils.nodes document q)q}q(U nametypesq}qX)celery worker daemon - celery.bin.celerydqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXZ/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.bin.celeryd.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U'celery-worker-daemon-celery-bin-celerydq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX)Celery Worker Daemon - celery.bin.celerydq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X)Celery Worker Daemon - celery.bin.celerydq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X8autodoc: failed to import module u'celery.bin.celeryd'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/bin/celeryd.py", line 56, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUZ/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.bin.celeryd.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]qUfile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD from celery.execute import apply_async File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/execute/__init__.py", line 1, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqU]/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.task.schedules.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDm(O{{Hcelery-1.0-archived/.doctrees/reference/celery.contrib.abortable.doctreecdocutils.nodes document q)q}q(U nametypesq}qX3contrib: abortable tasks - celery.contrib.abortableqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUU attributesq}q(Udupnamesq]UlevelKUidsq]Ubackrefsq]Usourcecdocutils.nodes reprunicode qX`/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.contrib.abortable.rstqq}qbUclassesq]Unamesq]UlineKUtypeUWARNINGquUparentqcdocutils.nodes block_quote q)q}q(hUhcdocutils.nodes section q)q }q!(hUhhUsourceq"hUtagnameq#Usectionq$h}q%(h]h]h]h]q&U0contrib-abortable-tasks-celery-contrib-abortableq'ah]q(hauUlineq)KUdocumentq*hUchildrenq+]q,(cdocutils.nodes title q-)q.}q/(hX3Contrib: Abortable tasks - celery.contrib.abortableq0hh h"hh#Utitleq1h}q2(h]h]h]h]h]uh)Kh*hh+]q3cdocutils.nodes Text q4X3Contrib: Abortable tasks - celery.contrib.abortableq5q6}q7(hh0hh.ubaubheubh"Nh#U block_quoteq8h}q9(h]h]h]h]h]uh)Nh*hh+]ubh+]q:cdocutils.nodes paragraph q;)q<}q=(hUh}q>(h]h]h]h]h]uhh h+]q?h4X~autodoc: failed to import module u'celery.contrib.abortable'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/contrib/abortable.py", line 74, in from celery.task.base import Task File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/task/__init__.py", line 8, in from celery.execute import apply_async File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/execute/__init__.py", line 1, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q@qA}qB(hUhhcelery-1.0-archived/.doctrees/reference/celery.loaders.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xcelery.loaders.get_loader_clsqXcelery.loaders.current_loaderqXcelery.loaders.load_settingsqXloaders - celery.loadersq NuUsubstitution_defsq }q Uparse_messagesq ]q Ucurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hhhhhhh Uloaders-celery-loadersquUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXV/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.loaders.rstqq}qbUtagnameq Usectionq!U attributesq"}q#(Udupnamesq$]Uclassesq%]Ubackrefsq&]Uidsq']q((Xmodule-celery.loadersq)heUnamesq*]q+h auUlineq,KUdocumentq-hh]q.(cdocutils.nodes title q/)q0}q1(hXLoaders - celery.loadersq2hhhhh Utitleq3h"}q4(h$]h%]h&]h']h*]uh,Kh-hh]q5cdocutils.nodes Text q6XLoaders - celery.loadersq7q8}q9(hh2hh0ubaubcsphinx.addnodes index q:)q;}q<(hUhhhU q=h Uindexq>h"}q?(h']h&]h$]h%]h*]Uentries]q@(UsingleqAXcelery.loaders (module)Xmodule-celery.loadersUtqBauh,Kh-hh]ubh:)qC}qD(hUhhhXz/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/__init__.py:docstring of celery.loaders.current_loaderqEh h>h"}qF(h']h&]h$]h%]h*]Uentries]qG(hAX+current_loader() (in module celery.loaders)hUtqHauh,Nh-hh]ubcsphinx.addnodes desc qI)qJ}qK(hUhhhhEh UdescqLh"}qM(UnoindexqNUdomainqOXpyh']h&]h$]h%]h*]UobjtypeqPXfunctionqQUdesctypeqRhQuh,Nh-hh]qS(csphinx.addnodes desc_signature qT)qU}qV(hXcurrent_loader()hhJhU qWh Udesc_signatureqXh"}qY(h']qZhaUmoduleq[hXcelery.loadersq\q]}q^bh&]h$]h%]h*]q_haUfullnameq`Xcurrent_loaderqaUclassqbUUfirstqcuh,Nh-hh]qd(csphinx.addnodes desc_addname qe)qf}qg(hXcelery.loaders.hhUhhWh U desc_addnameqhh"}qi(h$]h%]h&]h']h*]uh,Nh-hh]qjh6Xcelery.loaders.qkql}qm(hUhhfubaubcsphinx.addnodes desc_name qn)qo}qp(hhahhUhhWh U desc_nameqqh"}qr(h$]h%]h&]h']h*]uh,Nh-hh]qsh6Xcurrent_loaderqtqu}qv(hUhhoubaubcsphinx.addnodes desc_parameterlist qw)qx}qy(hUhhUhhWh Udesc_parameterlistqzh"}q{(h$]h%]h&]h']h*]uh,Nh-hh]ubeubcsphinx.addnodes desc_content q|)q}}q~(hUhhJhhWh U desc_contentqh"}q(h$]h%]h&]h']h*]uh,Nh-hh]qcdocutils.nodes paragraph q)q}q(hX%Detect and return the current loader.qhh}hhEh U paragraphqh"}q(h$]h%]h&]h']h*]uh,Kh-hh]qh6X%Detect and return the current loader.qq}q(hhhhubaubaubeubh:)q}q(hUhhhXz/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/__init__.py:docstring of celery.loaders.get_loader_clsqh h>h"}q(h']h&]h$]h%]h*]Uentries]q(hAX+get_loader_cls() (in module celery.loaders)hUtqauh,Nh-hh]ubhI)q}q(hUhhhhh hLh"}q(hNhOXpyh']h&]h$]h%]h*]hPXfunctionqhRhuh,Nh-hh]q(hT)q}q(hXget_loader_cls(loader)hhhhWh hXh"}q(h']qhah[hXcelery.loadersqq}qbh&]h$]h%]h*]qhah`Xget_loader_clsqhbUhcuh,Nh-hh]q(he)q}q(hXcelery.loaders.hhhhWh hhh"}q(h$]h%]h&]h']h*]uh,Nh-hh]qh6Xcelery.loaders.qq}q(hUhhubaubhn)q}q(hhhhhhWh hqh"}q(h$]h%]h&]h']h*]uh,Nh-hh]qh6Xget_loader_clsqq}q(hUhhubaubhw)q}q(hUhhhhWh hzh"}q(h$]h%]h&]h']h*]uh,Nh-hh]qcsphinx.addnodes desc_parameter q)q}q(hXloaderh"}q(h$]h%]h&]h']h*]uhhh]qh6Xloaderqq}q(hUhhubah Udesc_parameterqubaubeubh|)q}q(hUhhhhWh hh"}q(h$]h%]h&]h']h*]uh,Nh-hh]qh)q}q(hXGet loader class by name/aliasqhhhhh hh"}q(h$]h%]h&]h']h*]uh,Kh-hh]qh6XGet loader class by name/aliasqŅq}q(hhhhubaubaubeubh:)q}q(hUhhhXy/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/__init__.py:docstring of celery.loaders.load_settingsqh h>h"}q(h']h&]h$]h%]h*]Uentries]q(hAX*load_settings() (in module celery.loaders)hUtqauh,Nh-hh]ubhI)q}q(hUhhhhh hLh"}q(hNhOXpyh']h&]h$]h%]h*]hPXfunctionqhRhuh,Nh-hh]q(hT)q}q(hXload_settings()qhhhhWh hXh"}q(h']qhah[hXcelery.loadersq؅q}qbh&]h$]h%]h*]qhah`X load_settingsqhbUhcuh,Nh-hh]q(he)q}q(hXcelery.loaders.hhhhWh hhh"}q(h$]h%]h&]h']h*]uh,Nh-hh]qh6Xcelery.loaders.q⅁q}q(hUhhubaubhn)q}q(hhhhhhWh hqh"}q(h$]h%]h&]h']h*]uh,Nh-hh]qh6X load_settingsq酁q}q(hUhhubaubhw)q}q(hUhhhhWh hzh"}q(h$]h%]h&]h']h*]uh,Nh-hh]ubeubh|)q}q(hUhhhhWh hh"}q(h$]h%]h&]h']h*]uh,Nh-hh]qh)q}q(hX Load the global settings object.qhhhhh hh"}q(h$]h%]h&]h']h*]uh,Kh-hh]qh6X Load the global settings object.qq}q(hhhhubaubaubeubeubahUU transformerqNU footnote_refsq}qUrefnamesq}qUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh-hU current_linerNUtransform_messagesr ]r Ureporterr NUid_startr KU autofootnotesr ]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coder Uenr!U datestampr"NU report_levelr#KU _destinationr$NU halt_levelr%KU strip_classesr&Nh3NUerror_encoding_error_handlerr'Ubackslashreplacer(Udebugr)NUembed_stylesheetr*Uoutput_encoding_error_handlerr+Ustrictr,U sectnum_xformr-KUdump_transformsr.NU docinfo_xformr/KUwarning_streamr0NUpep_file_url_templater1Upep-%04dr2Uexit_status_levelr3KUconfigr4NUstrict_visitorr5NUcloak_email_addressesr6Utrim_footnote_reference_spacer7Uenvr8NUdump_pseudo_xmlr9NUexpose_internalsr:NUsectsubtitle_xformr;U source_linkr<NUrfc_referencesr=NUoutput_encodingr>Uutf-8r?U source_urlr@NUinput_encodingrAU utf-8-sigrBU_disable_configrCNU id_prefixrDUU tab_widthrEKUerror_encodingrFUUTF-8rGU_sourcerHUV/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.loaders.rstrIUgettext_compactrJU generatorrKNUdump_internalsrLNU smart_quotesrMU pep_base_urlrNUhttp://www.python.org/dev/peps/rOUsyntax_highlightrPUlongrQUinput_encoding_error_handlerrRj,Uauto_id_prefixrSUidrTUdoctitle_xformrUUstrip_elements_with_classesrVNU _config_filesrW]Ufile_insertion_enabledrXU raw_enabledrYKU dump_settingsrZNubUsymbol_footnote_startr[KUidsr\}r](h)cdocutils.nodes target r^)r_}r`(hUhhhh=h Utargetrah"}rb(h$]h']rch)ah&]Uismodh%]h*]uh,Kh-hh]ubhhhhUhhhhuUsubstitution_namesrd}reh h-h"}rf(h$]h']h&]Usourcehh%]h*]uU footnotesrg]rhUrefidsri}rjub.PKXDDoJ_>_>?celery-1.0-archived/.doctrees/reference/celery.registry.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xcelery.registry.TaskRegistryqX$celery.registry.TaskRegistry.regularqXtask registry - celery.registryqNX%celery.registry.TaskRegistry.periodicq X*celery.registry.TaskRegistry.NotRegisteredq X%celery.registry.TaskRegistry.registerq X'celery.registry.TaskRegistry.unregisterq X)celery.registry.TaskRegistry.filter_typesq uUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hhhhhUtask-registry-celery-registryqh h h h h h h h h h uUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode q XW/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.registry.rstq!q"}q#bUtagnameq$Usectionq%U attributesq&}q'(Udupnamesq(]Uclassesq)]Ubackrefsq*]Uidsq+]q,(Xmodule-celery.registryq-heUnamesq.]q/hauUlineq0KUdocumentq1hh]q2(cdocutils.nodes title q3)q4}q5(hXTask Registry - celery.registryq6hhhh"h$Utitleq7h&}q8(h(]h)]h*]h+]h.]uh0Kh1hh]q9cdocutils.nodes Text q:XTask Registry - celery.registryq;q<}q=(hh6hh4ubaubcsphinx.addnodes index q>)q?}q@(hUhhhU qAh$UindexqBh&}qC(h+]h*]h(]h)]h.]Uentries]qD(UsingleqEXcelery.registry (module)Xmodule-celery.registryUtqFauh0Kh1hh]ubcdocutils.nodes paragraph qG)qH}qI(hXcelery.registryqJhhhXd/var/build/user_builds/celery/checkouts/1.0-archived/celery/registry.py:docstring of celery.registryqKh$U paragraphqLh&}qM(h(]h)]h*]h+]h.]uh0Kh1hh]qNh:Xcelery.registryqOqP}qQ(hhJhhHubaubh>)qR}qS(hUhhhNh$hBh&}qT(h+]h*]h(]h)]h.]Uentries]qU(hEX'TaskRegistry (class in celery.registry)hUtqVauh0Nh1hh]ubcsphinx.addnodes desc qW)qX}qY(hUhhhNh$UdescqZh&}q[(Unoindexq\Udomainq]Xpyh+]h*]h(]h)]h.]Uobjtypeq^Xclassq_Udesctypeq`h_uh0Nh1hh]qa(csphinx.addnodes desc_signature qb)qc}qd(hXTaskRegistry()qehhXhU qfh$Udesc_signatureqgh&}qh(h+]qihaUmoduleqjh Xcelery.registryqkql}qmbh*]h(]h)]h.]qnhaUfullnameqoX TaskRegistryqpUclassqqUUfirstqruh0Nh1hh]qs(csphinx.addnodes desc_annotation qt)qu}qv(hXclass hhchhfh$Udesc_annotationqwh&}qx(h(]h)]h*]h+]h.]uh0Nh1hh]qyh:Xclass qzq{}q|(hUhhuubaubcsphinx.addnodes desc_addname q})q~}q(hXcelery.registry.hhchhfh$U desc_addnameqh&}q(h(]h)]h*]h+]h.]uh0Nh1hh]qh:Xcelery.registry.qq}q(hUhh~ubaubcsphinx.addnodes desc_name q)q}q(hhphhchhfh$U desc_nameqh&}q(h(]h)]h*]h+]h.]uh0Nh1hh]qh:X TaskRegistryqq}q(hUhhubaubeubcsphinx.addnodes desc_content q)q}q(hUhhXhhfh$U desc_contentqh&}q(h(]h)]h*]h+]h.]uh0Nh1hh]q(hG)q}q(hXSite registry for tasks.qhhhXq/var/build/user_builds/celery/checkouts/1.0-archived/celery/registry.py:docstring of celery.registry.TaskRegistryqh$hLh&}q(h(]h)]h*]h+]h.]uh0Kh1hh]qh:XSite registry for tasks.qq}q(hhhhubaubh>)q}q(hUhhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/registry.py:docstring of celery.registry.TaskRegistry.NotRegisteredqh$hBh&}q(h+]h*]h(]h)]h.]Uentries]q(hEXTaskRegistry.NotRegisteredqh Utqauh0Nh1hh]ubhW)q}q(hUhhhhh$hZh&}q(h\h]Xpyh+]h*]h(]h)]h.]h^X exceptionqh`huh0Nh1hh]q(hb)q}q(hX4TaskRegistry.NotRegistered(message, *args, **kwargs)hhhhfh$hgh&}q(h+]qh ahjh Xcelery.registryqq}qbh*]h(]h)]h.]qh ahohhqhphruh0Nh1hh]q(ht)q}q(hX exception hhhhfh$hwh&}q(h(]h)]h*]h+]h.]uh0Nh1hh]qh:X exception qq}q(hUhhubaubh)q}q(hX NotRegisteredhhhhfh$hh&}q(h(]h)]h*]h+]h.]uh0Nh1hh]qh:X NotRegisteredqq}q(hUhhubaubcsphinx.addnodes desc_parameterlist q)q}q(hUhhhhfh$Udesc_parameterlistqh&}q(h(]h)]h*]h+]h.]uh0Nh1hh]q(csphinx.addnodes desc_parameter q)q}q(hXmessageh&}q(h(]h)]h*]h+]h.]uhhh]qh:Xmessageq̅q}q(hUhhubah$Udesc_parameterqubh)q}q(hX*argsh&}q(h(]h)]h*]h+]h.]uhhh]qh:X*argsqԅq}q(hUhhubah$hubh)q}q(hX**kwargsh&}q(h(]h)]h*]h+]h.]uhhh]qh:X**kwargsqۅq}q(hUhhubah$hubeubeubh)q}q(hUhhhhfh$hh&}q(h(]h)]h*]h+]h.]uh0Nh1hh]qhG)q}q(hXThe task is not registered.qhhhhh$hLh&}q(h(]h)]h*]h+]h.]uh0Kh1hh]qh:XThe task is not registered.q煁q}q(hhhhubaubaubeubh>)q}q(hUhhhX~/var/build/user_builds/celery/checkouts/1.0-archived/celery/registry.py:docstring of celery.registry.TaskRegistry.filter_typesqh$hBh&}q(h+]h*]h(]h)]h.]Uentries]q(hEX4filter_types() (celery.registry.TaskRegistry method)h Utqauh0Nh1hh]ubhW)q}q(hUhhhhh$hZh&}q(h\h]Xpyh+]h*]h(]h)]h.]h^Xmethodqh`huh0Nh1hh]q(hb)q}q(hXTaskRegistry.filter_types(type)hhhhfh$hgh&}q(h+]qh ahjh Xcelery.registryqq}qbh*]h(]h)]h.]qh ahoXTaskRegistry.filter_typeshqX TaskRegistryhruh0Nh1hh]q(h})q}q(hX TaskRegistry.hhhhfh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh:X TaskRegistry.rr}r(hUhhubaubh)r}r(hX filter_typeshhhhfh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh:X filter_typesr r }r (hUhjubaubh)r }r (hUhhhhfh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh)r}r(hXtypeh&}r(h(]h)]h*]h+]h.]uhj h]rh:Xtyperr}r(hUhjubah$hubaubeubh)r}r(hUhhhhfh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rhG)r}r(hX$Return all tasks of a specific type.rhjhhh$hLh&}r(h(]h)]h*]h+]h.]uh0Kh1hh]rh:X$Return all tasks of a specific type.r r!}r"(hjhjubaubaubeubh>)r#}r$(hUhhhXz/var/build/user_builds/celery/checkouts/1.0-archived/celery/registry.py:docstring of celery.registry.TaskRegistry.periodicr%h$hBh&}r&(h+]h*]h(]h)]h.]Uentries]r'(hEX0periodic() (celery.registry.TaskRegistry method)h Utr(auh0Nh1hh]ubhW)r)}r*(hUhhhj%h$hZh&}r+(h\h]Xpyh+]h*]h(]h)]h.]h^Xmethodr,h`j,uh0Nh1hh]r-(hb)r.}r/(hXTaskRegistry.periodic()hj)hhfh$hgh&}r0(h+]r1h ahjh Xcelery.registryr2r3}r4bh*]h(]h)]h.]r5h ahoXTaskRegistry.periodichqX TaskRegistryhruh0Nh1hh]r6(h})r7}r8(hX TaskRegistry.hj.hhfh$hh&}r9(h(]h)]h*]h+]h.]uh0Nh1hh]r:h:X TaskRegistry.r;r<}r=(hUhj7ubaubh)r>}r?(hXperiodichj.hhfh$hh&}r@(h(]h)]h*]h+]h.]uh0Nh1hh]rAh:XperiodicrBrC}rD(hUhj>ubaubh)rE}rF(hUhj.hhfh$hh&}rG(h(]h)]h*]h+]h.]uh0Nh1hh]ubeubh)rH}rI(hUhj)hhfh$hh&}rJ(h(]h)]h*]h+]h.]uh0Nh1hh]rKhG)rL}rM(hXGet all periodic task types.rNhjHhj%h$hLh&}rO(h(]h)]h*]h+]h.]uh0Kh1hh]rPh:XGet all periodic task types.rQrR}rS(hjNhjLubaubaubeubh>)rT}rU(hUhhhXz/var/build/user_builds/celery/checkouts/1.0-archived/celery/registry.py:docstring of celery.registry.TaskRegistry.registerrVh$hBh&}rW(h+]h*]h(]h)]h.]Uentries]rX(hEX0register() (celery.registry.TaskRegistry method)h UtrYauh0Nh1hh]ubhW)rZ}r[(hUhhhjVh$hZh&}r\(h\h]Xpyh+]h*]h(]h)]h.]h^Xmethodr]h`j]uh0Nh1hh]r^(hb)r_}r`(hXTaskRegistry.register(task)hjZhhfh$hgh&}ra(h+]rbh ahjh Xcelery.registryrcrd}rebh*]h(]h)]h.]rfh ahoXTaskRegistry.registerhqX TaskRegistryhruh0Nh1hh]rg(h})rh}ri(hX TaskRegistry.hj_hhfh$hh&}rj(h(]h)]h*]h+]h.]uh0Nh1hh]rkh:X TaskRegistry.rlrm}rn(hUhjhubaubh)ro}rp(hXregisterhj_hhfh$hh&}rq(h(]h)]h*]h+]h.]uh0Nh1hh]rrh:Xregisterrsrt}ru(hUhjoubaubh)rv}rw(hUhj_hhfh$hh&}rx(h(]h)]h*]h+]h.]uh0Nh1hh]ryh)rz}r{(hXtaskh&}r|(h(]h)]h*]h+]h.]uhjvh]r}h:Xtaskr~r}r(hUhjzubah$hubaubeubh)r}r(hUhjZhhfh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]r(hG)r}r(hX%Register a task in the task registry.rhjhjVh$hLh&}r(h(]h)]h*]h+]h.]uh0Kh1hh]rh:X%Register a task in the task registry.rr}r(hjhjubaubhG)r}r(hXGThe task will be automatically instantiated if not already an instance.rhjhjVh$hLh&}r(h(]h)]h*]h+]h.]uh0Kh1hh]rh:XGThe task will be automatically instantiated if not already an instance.rr}r(hjhjubaubeubeubh>)r}r(hUhhhXy/var/build/user_builds/celery/checkouts/1.0-archived/celery/registry.py:docstring of celery.registry.TaskRegistry.regularrh$hBh&}r(h+]h*]h(]h)]h.]Uentries]r(hEX/regular() (celery.registry.TaskRegistry method)hUtrauh0Nh1hh]ubhW)r}r(hUhhhjh$hZh&}r(h\h]Xpyh+]h*]h(]h)]h.]h^Xmethodrh`juh0Nh1hh]r(hb)r}r(hXTaskRegistry.regular()hjhhfh$hgh&}r(h+]rhahjh Xcelery.registryrr}rbh*]h(]h)]h.]rhahoXTaskRegistry.regularhqX TaskRegistryhruh0Nh1hh]r(h})r}r(hX TaskRegistry.hjhhfh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh:X TaskRegistry.rr}r(hUhjubaubh)r}r(hXregularhjhhfh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh:Xregularrr}r(hUhjubaubh)r}r(hUhjhhfh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]ubeubh)r}r(hUhjhhfh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rhG)r}r(hXGet all regular task types.rhjhjh$hLh&}r(h(]h)]h*]h+]h.]uh0Kh1hh]rh:XGet all regular task types.rr}r(hjhjubaubaubeubh>)r}r(hUhhhNh$hBh&}r(h+]h*]h(]h)]h.]Uentries]r(hEX2unregister() (celery.registry.TaskRegistry method)h Utrauh0Nh1hh]ubhW)r}r(hUhhhNh$hZh&}r(h\h]Xpyrh+]h*]h(]h)]h.]h^Xmethodrh`juh0Nh1hh]r(hb)r}r(hXTaskRegistry.unregister(name)rhjhhfh$hgh&}r(h+]rh ahjh Xcelery.registryrr}rbh*]h(]h)]h.]rh ahoXTaskRegistry.unregisterhqX TaskRegistryhruh0Nh1hh]r(h})r}r(hX TaskRegistry.hjhhfh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh:X TaskRegistry.rr}r(hUhjubaubh)r}r(hX unregisterhjhhfh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh:X unregisterrr}r(hUhjubaubh)r}r(hUhjhhfh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]rh)r}r(hXnameh&}r(h(]h)]h*]h+]h.]uhjh]rh:Xnamerr}r(hUhjubah$hubaubeubh)r}r(hUhjhhfh$hh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]r(hG)r}r(hXUnregister task by name.rhjhX|/var/build/user_builds/celery/checkouts/1.0-archived/celery/registry.py:docstring of celery.registry.TaskRegistry.unregisterrh$hLh&}r(h(]h)]h*]h+]h.]uh0Kh1hh]rh:XUnregister task by name.rr}r(hjhjubaubcdocutils.nodes field_list r)r}r(hUhjhNh$U field_listrh&}r(h(]h)]h*]h+]h.]uh0Nh1hh]r(cdocutils.nodes field r)r}r (hUh&}r (h(]h)]h*]h+]h.]uhjh]r (cdocutils.nodes field_name r )r }r(hUh&}r(h(]h)]h*]h+]h.]uhjh]rh:X Parametersrr}r(hUhj ubah$U field_namerubcdocutils.nodes field_body r)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh]rhG)r}r(hUh&}r(h(]h)]h*]h+]h.]uhjh]r(cdocutils.nodes strong r)r}r (hXnameh&}r!(h(]h)]h*]h+]h.]uhjh]r"h:Xnamer#r$}r%(hUhjubah$Ustrongr&ubh:X -- r'r(}r)(hUhjubh:X%name of the task to unregister, or a r*r+}r,(hX%name of the task to unregister, or a hjubcsphinx.addnodes pending_xref r-)r.}r/(hX:class:`celery.task.base.Task`r0hjhNh$U pending_xrefr1h&}r2(UreftypeXclassUrefwarnr3U reftargetr4Xcelery.task.base.TaskU refdomainXpyr5h+]h*]U refexplicith(]h)]h.]Urefdocr6Xreference/celery.registryr7Upy:classr8X TaskRegistryU py:moduler9Xcelery.registryr:uh0Nh]r;cdocutils.nodes literal r<)r=}r>(hj0h&}r?(h(]h)]r@(UxrefrAj5Xpy-classrBeh*]h+]h.]uhj.h]rCh:Xcelery.task.base.TaskrDrE}rF(hUhj=ubah$UliteralrGubaubh:X with a valid rHrI}rJ(hX with a valid hjubj<)rK}rL(hX``name``h&}rM(h(]h)]h*]h+]h.]uhjh]rNh:XnamerOrP}rQ(hUhjKubah$jGubh:X attribute.rRrS}rT(hX attribute.hjubeh$hLubah$U field_bodyrUubeh$UfieldrVubj)rW}rX(hUh&}rY(h(]h)]h*]h+]h.]uhjh]rZ(j )r[}r\(hUh&}r](h(]h)]h*]h+]h.]uhjWh]r^(h:XRaisesr_r`}ra(hUhj[ubh:X rb}rc(hUhj[ubj-)rd}re(hUh&}rf(UreftypeUexcrgU reftargetXcelery.exceptions.NotRegisteredrhU refdomainjh+]h*]U refexplicith(]h)]h.]uhj[h]rih:Xcelery.exceptions.NotRegisteredrjrk}rl(hjhhjdubah$j1ubeh$jubj)rm}rn(hUh&}ro(h(]h)]h*]h+]h.]uhjWh]rphG)rq}rr(hUh&}rs(h(]h)]h*]h+]h.]uhjmh]rth:X$if the task has not been registered.rurv}rw(hX$if the task has not been registered.rxhjqubah$hLubah$jUubeh$jVubeubeubeubeubeubeubahUU transformerryNU footnote_refsrz}r{Urefnamesr|}r}Usymbol_footnotesr~]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh1hU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh7NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUW/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.registry.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(h-cdocutils.nodes target r)r}r(hUhhhhAh$Utargetrh&}r(h(]h+]rh-ah*]Uismodh)]h.]uh0Kh1hh]ubhhchhh j.h hh j_h jh hhjuUsubstitution_namesr}rh$h1h&}r(h(]h+]h*]Usourceh"h)]h.]uU footnotesr]rUrefidsr}rub.PKXDDF8h=celery-1.0-archived/.doctrees/reference/celery.events.doctreecdocutils.nodes document q)q}q(U nametypesq}qXevents - celery.eventsqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXU/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.events.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q Uevents-celery-eventsq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hXEvents - celery.eventsq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/XEvents - celery.eventsq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/Xautodoc: failed to import module u'celery.events'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/events.py", line 5, in from celery.messaging import EventPublisher, EventConsumer File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/messaging.py", line 14, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUU/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.events.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]qUfile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDL!ll@celery-1.0-archived/.doctrees/reference/celery.messaging.doctreecdocutils.nodes document q)q}q(U nametypesq}qXmessaging - celery.messagingqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXX/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.messaging.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q Umessaging-celery-messagingq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hXMessaging - celery.messagingq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/XMessaging - celery.messagingq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X4autodoc: failed to import module u'celery.messaging'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/messaging.py", line 14, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUX/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.messaging.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD-=celery-1.0-archived/.doctrees/reference/celery.result.doctreecdocutils.nodes document q)q}q(U nametypesq}qXtask result - celery.resultqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXU/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.result.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q Utask-result-celery-resultq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hXTask Result - celery.resultq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/XTask Result - celery.resultq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/Xautodoc: failed to import module u'celery.result'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/result.py", line 13, in from celery.backends import default_backend File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/backends/__init__.py", line 3, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUU/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.result.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD~HII>celery-1.0-archived/.doctrees/reference/celery.signals.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X task_sentqX task_postrunqXworker_shutdownqX worker_readyq X worker_initq Xsignals - celery.signalsq NX task_prerunq uUsubstitution_defsq }qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hhhhhhh h h h h Usignals-celery-signalsqh h uUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXV/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.signals.rstq q!}q"bUtagnameq#Usectionq$U attributesq%}q&(Udupnamesq']Uclassesq(]Ubackrefsq)]Uidsq*]q+haUnamesq,]q-h auUlineq.KUdocumentq/hh]q0(cdocutils.nodes title q1)q2}q3(hXSignals - celery.signalsq4hhhh!h#Utitleq5h%}q6(h']h(]h)]h*]h,]uh.Kh/hh]q7cdocutils.nodes Text q8XSignals - celery.signalsq9q:}q;(hh4hh2ubaubcsphinx.addnodes index q<)q=}q>(hUhhhNh#Uindexq?h%}q@(h*]h)]h']h(]h,]Uentries]qA(UsingleqBXtask_sent (built-in variable)hUtqCauh.Nh/hh]ubcsphinx.addnodes desc qD)qE}qF(hUhhhNh#UdescqGh%}qH(UnoindexqIUdomainqJXpyh*]h)]h']h(]h,]UobjtypeqKXdataqLUdesctypeqMhLuh.Nh/hh]qN(csphinx.addnodes desc_signature qO)qP}qQ(hhhhEhh!h#Udesc_signatureqRh%}qS(h*]qThaUmoduleqUNh)]h']h(]h,]qVhaUfullnameqWhUclassqXUUfirstqYuh.Kh/hh]qZcsphinx.addnodes desc_name q[)q\}q](hhhhPhh!h#U desc_nameq^h%}q_(h']h(]h)]h*]h,]uh.Kh/hh]q`h8X task_sentqaqb}qc(hUhh\ubaubaubcsphinx.addnodes desc_content qd)qe}qf(hUhhEhh!h#U desc_contentqgh%}qh(h']h(]h)]h*]h,]uh.Kh/hh]qi(cdocutils.nodes paragraph qj)qk}ql(hXTriggered when a task has been sent to the broker. Note that this is executed in the client process, the one sending the task, not in the worker.qmhhehh!h#U paragraphqnh%}qo(h']h(]h)]h*]h,]uh.Kh/hh]qph8XTriggered when a task has been sent to the broker. Note that this is executed in the client process, the one sending the task, not in the worker.qqqr}qs(hhmhhkubaubhj)qt}qu(hXProvides arguments:qvhhehh!h#hnh%}qw(h']h(]h)]h*]h,]uh.K h/hh]qxh8XProvides arguments:qyqz}q{(hhvhhtubaubcdocutils.nodes bullet_list q|)q}}q~(hUhhehh!h#U bullet_listqh%}q(UbulletqX*h*]h)]h']h(]h,]uh.K h/hh]q(cdocutils.nodes list_item q)q}q(hX)task_id Id of the task to be executed. hh}hNh#U list_itemqh%}q(h']h(]h)]h*]h,]uh.Nh/hh]qcdocutils.nodes definition_list q)q}q(hUh%}q(h']h(]h)]h*]h,]uhhh]qcdocutils.nodes definition_list_item q)q}q(hX'task_id Id of the task to be executed. hhhh!h#Udefinition_list_itemqh%}q(h']h(]h)]h*]h,]uh.Kh]q(cdocutils.nodes term q)q}q(hXtask_idqhhhh!h#Utermqh%}q(h']h(]h)]h*]h,]uh.Kh]qh8Xtask_idqq}q(hhhhubaubcdocutils.nodes definition q)q}q(hUh%}q(h']h(]h)]h*]h,]uhhh]qhj)q}q(hXId of the task to be executed.qhhhh!h#hnh%}q(h']h(]h)]h*]h,]uh.Kh]qh8XId of the task to be executed.qq}q(hhhhubaubah#U definitionqubeubah#Udefinition_listqubaubh)q}q(hX task The task being executed. hh}hNh#hh%}q(h']h(]h)]h*]h,]uh.Nh/hh]qh)q}q(hUh%}q(h']h(]h)]h*]h,]uhhh]qh)q}q(hXtask The task being executed. hhhh!h#hh%}q(h']h(]h)]h*]h,]uh.Kh]q(h)q}q(hXtaskqhhhh!h#hh%}q(h']h(]h)]h*]h,]uh.Kh]qh8Xtaskqq}q(hhhhubaubh)q}q(hUh%}q(h']h(]h)]h*]h,]uhhh]qhj)q}q(hXThe task being executed.qhhhh!h#hnh%}q(h']h(]h)]h*]h,]uh.Kh]qh8XThe task being executed.qʅq}q(hhhhubaubah#hubeubah#hubaubh)q}q(hX'args the tasks positional arguments. hh}hNh#hh%}q(h']h(]h)]h*]h,]uh.Nh/hh]qh)q}q(hUh%}q(h']h(]h)]h*]h,]uhhh]qh)q}q(hX%args the tasks positional arguments. hhhh!h#hh%}q(h']h(]h)]h*]h,]uh.Kh]q(h)q}q(hXargsqhhhh!h#hh%}q(h']h(]h)]h*]h,]uh.Kh]qh8Xargsqޅq}q(hhhhubaubh)q}q(hUh%}q(h']h(]h)]h*]h,]uhhh]qhj)q}q(hXthe tasks positional arguments.qhhhh!h#hnh%}q(h']h(]h)]h*]h,]uh.Kh]qh8Xthe tasks positional arguments.qꅁq}q(hhhhubaubah#hubeubah#hubaubh)q}q(hX&kwargs The tasks keyword arguments. hh}hNh#hh%}q(h']h(]h)]h*]h,]uh.Nh/hh]qh)q}q(hUh%}q(h']h(]h)]h*]h,]uhhh]qh)q}q(hX$kwargs The tasks keyword arguments. hhhh!h#hh%}q(h']h(]h)]h*]h,]uh.Kh]q(h)q}q(hXkwargsqhhhh!h#hh%}q(h']h(]h)]h*]h,]uh.Kh]qh8Xkwargsqq}r(hhhhubaubh)r}r(hUh%}r(h']h(]h)]h*]h,]uhhh]rhj)r}r(hXThe tasks keyword arguments.rhjhh!h#hnh%}r(h']h(]h)]h*]h,]uh.Kh]r h8XThe tasks keyword arguments.r r }r (hjhjubaubah#hubeubah#hubaubh)r }r(hX$eta The time to execute the task. hh}hNh#hh%}r(h']h(]h)]h*]h,]uh.Nh/hh]rh)r}r(hUh%}r(h']h(]h)]h*]h,]uhj h]rh)r}r(hX"eta The time to execute the task. hjhh!h#hh%}r(h']h(]h)]h*]h,]uh.Kh]r(h)r}r(hXetarhjhh!h#hh%}r(h']h(]h)]h*]h,]uh.Kh]rh8Xetarr}r (hjhjubaubh)r!}r"(hUh%}r#(h']h(]h)]h*]h,]uhjh]r$hj)r%}r&(hXThe time to execute the task.r'hj!hh!h#hnh%}r((h']h(]h)]h*]h,]uh.Kh]r)h8XThe time to execute the task.r*r+}r,(hj'hj%ubaubah#hubeubah#hubaubh)r-}r.(hX:taskset Id of the taskset this task is part of (if any).hh}hNh#hh%}r/(h']h(]h)]h*]h,]uh.Nh/hh]r0h)r1}r2(hUh%}r3(h']h(]h)]h*]h,]uhj-h]r4h)r5}r6(hX8taskset Id of the taskset this task is part of (if any).hj1hh!h#hh%}r7(h']h(]h)]h*]h,]uh.Kh]r8(h)r9}r:(hXtasksetr;hj5hh!h#hh%}r<(h']h(]h)]h*]h,]uh.Kh]r=h8Xtasksetr>r?}r@(hj;hj9ubaubh)rA}rB(hUh%}rC(h']h(]h)]h*]h,]uhj5h]rDhj)rE}rF(hX0Id of the taskset this task is part of (if any).rGhjAhh!h#hnh%}rH(h']h(]h)]h*]h,]uh.Kh]rIh8X0Id of the taskset this task is part of (if any).rJrK}rL(hjGhjEubaubah#hubeubah#hubaubeubeubeubh<)rM}rN(hUhhhNh#h?h%}rO(h*]h)]h']h(]h,]Uentries]rP(hBXtask_prerun (built-in variable)h UtrQauh.Nh/hh]ubhD)rR}rS(hUhhhNh#hGh%}rT(hIhJXpyh*]h)]h']h(]h,]hKXdatarUhMjUuh.Nh/hh]rV(hO)rW}rX(hh hjRhh!h#hRh%}rY(h*]rZh ahUNh)]h']h(]h,]r[h ahWh hXUhYuh.K0h/hh]r\h[)r]}r^(hh hjWhh!h#h^h%}r_(h']h(]h)]h*]h,]uh.K0h/hh]r`h8X task_prerunrarb}rc(hUhj]ubaubaubhd)rd}re(hUhjRhh!h#hgh%}rf(h']h(]h)]h*]h,]uh.K0h/hh]rg(hj)rh}ri(hX$Triggered before a task is executed.rjhjdhh!h#hnh%}rk(h']h(]h)]h*]h,]uh.K!h/hh]rlh8X$Triggered before a task is executed.rmrn}ro(hjjhjhubaubhj)rp}rq(hXProvides arguments:rrhjdhh!h#hnh%}rs(h']h(]h)]h*]h,]uh.K#h/hh]rth8XProvides arguments:rurv}rw(hjrhjpubaubh|)rx}ry(hUhjdhh!h#hh%}rz(hX*h*]h)]h']h(]h,]uh.K%h/hh]r{(h)r|}r}(hX)task_id Id of the task to be executed. hjxhNh#hh%}r~(h']h(]h)]h*]h,]uh.Nh/hh]rh)r}r(hUh%}r(h']h(]h)]h*]h,]uhj|h]rh)r}r(hX'task_id Id of the task to be executed. hjhh!h#hh%}r(h']h(]h)]h*]h,]uh.K&h]r(h)r}r(hXtask_idrhjhh!h#hh%}r(h']h(]h)]h*]h,]uh.K&h]rh8Xtask_idrr}r(hjhjubaubh)r}r(hUh%}r(h']h(]h)]h*]h,]uhjh]rhj)r}r(hXId of the task to be executed.rhjhh!h#hnh%}r(h']h(]h)]h*]h,]uh.K&h]rh8XId of the task to be executed.rr}r(hjhjubaubah#hubeubah#hubaubh)r}r(hX task The task being executed. hjxhNh#hh%}r(h']h(]h)]h*]h,]uh.Nh/hh]rh)r}r(hUh%}r(h']h(]h)]h*]h,]uhjh]rh)r}r(hXtask The task being executed. hjhh!h#hh%}r(h']h(]h)]h*]h,]uh.K)h]r(h)r}r(hXtaskrhjhh!h#hh%}r(h']h(]h)]h*]h,]uh.K)h]rh8Xtaskrr}r(hjhjubaubh)r}r(hUh%}r(h']h(]h)]h*]h,]uhjh]rhj)r}r(hXThe task being executed.rhjhh!h#hnh%}r(h']h(]h)]h*]h,]uh.K)h]rh8XThe task being executed.rr}r(hjhjubaubah#hubeubah#hubaubh)r}r(hX'args the tasks positional arguments. hjxhNh#hh%}r(h']h(]h)]h*]h,]uh.Nh/hh]rh)r}r(hUh%}r(h']h(]h)]h*]h,]uhjh]rh)r}r(hX%args the tasks positional arguments. hjhh!h#hh%}r(h']h(]h)]h*]h,]uh.K,h]r(h)r}r(hXargsrhjhh!h#hh%}r(h']h(]h)]h*]h,]uh.K,h]rh8Xargsrr}r(hjhjubaubh)r}r(hUh%}r(h']h(]h)]h*]h,]uhjh]rhj)r}r(hXthe tasks positional arguments.rhjhh!h#hnh%}r(h']h(]h)]h*]h,]uh.K,h]rh8Xthe tasks positional arguments.rr}r(hjhjubaubah#hubeubah#hubaubh)r}r(hX%kwargs The tasks keyword arguments.hjxhNh#hh%}r(h']h(]h)]h*]h,]uh.Nh/hh]rh)r}r(hUh%}r(h']h(]h)]h*]h,]uhjh]rh)r}r(hX#kwargs The tasks keyword arguments.hjhh!h#hh%}r(h']h(]h)]h*]h,]uh.K.h]r(h)r}r(hXkwargsrhjhh!h#hh%}r(h']h(]h)]h*]h,]uh.K.h]rh8Xkwargsrr}r(hjhjubaubh)r}r(hUh%}r(h']h(]h)]h*]h,]uhjh]rhj)r}r(hXThe tasks keyword arguments.rhjhh!h#hnh%}r(h']h(]h)]h*]h,]uh.K/h]rh8XThe tasks keyword arguments.rr}r(hjhjubaubah#hubeubah#hubaubeubeubeubh<)r}r(hUhhhNh#h?h%}r(h*]h)]h']h(]h,]Uentries]r(hBX task_postrun (built-in variable)hUtrauh.Nh/hh]ubhD)r}r(hUhhhNh#hGh%}r(hIhJXpyh*]h)]h']h(]h,]hKXdatarhMjuh.Nh/hh]r(hO)r}r(hhhjhh!h#hRh%}r(h*]r hahUNh)]h']h(]h,]r hahWhhXUhYuh.KFh/hh]r h[)r }r (hhhjhh!h#h^h%}r(h']h(]h)]h*]h,]uh.KFh/hh]rh8X task_postrunrr}r(hUhj ubaubaubhd)r}r(hUhjhh!h#hgh%}r(h']h(]h)]h*]h,]uh.KFh/hh]r(hj)r}r(hX)Triggered after a task has been executed.rhjhh!h#hnh%}r(h']h(]h)]h*]h,]uh.K3h/hh]rh8X)Triggered after a task has been executed.rr}r(hjhjubaubhj)r}r (hXProvides arguments:r!hjhh!h#hnh%}r"(h']h(]h)]h*]h,]uh.K5h/hh]r#h8XProvides arguments:r$r%}r&(hj!hjubaubh|)r'}r((hUhjhh!h#hh%}r)(hX*h*]h)]h']h(]h,]uh.K7h/hh]r*(h)r+}r,(hX)task_id Id of the task to be executed. hj'hNh#hh%}r-(h']h(]h)]h*]h,]uh.Nh/hh]r.h)r/}r0(hUh%}r1(h']h(]h)]h*]h,]uhj+h]r2h)r3}r4(hX'task_id Id of the task to be executed. hj/hh!h#hh%}r5(h']h(]h)]h*]h,]uh.K8h]r6(h)r7}r8(hXtask_idr9hj3hh!h#hh%}r:(h']h(]h)]h*]h,]uh.K8h]r;h8Xtask_idr<r=}r>(hj9hj7ubaubh)r?}r@(hUh%}rA(h']h(]h)]h*]h,]uhj3h]rBhj)rC}rD(hXId of the task to be executed.rEhj?hh!h#hnh%}rF(h']h(]h)]h*]h,]uh.K8h]rGh8XId of the task to be executed.rHrI}rJ(hjEhjCubaubah#hubeubah#hubaubh)rK}rL(hX task The task being executed. hj'hNh#hh%}rM(h']h(]h)]h*]h,]uh.Nh/hh]rNh)rO}rP(hUh%}rQ(h']h(]h)]h*]h,]uhjKh]rRh)rS}rT(hXtask The task being executed. hjOhh!h#hh%}rU(h']h(]h)]h*]h,]uh.K;h]rV(h)rW}rX(hXtaskrYhjShh!h#hh%}rZ(h']h(]h)]h*]h,]uh.K;h]r[h8Xtaskr\r]}r^(hjYhjWubaubh)r_}r`(hUh%}ra(h']h(]h)]h*]h,]uhjSh]rbhj)rc}rd(hXThe task being executed.rehj_hh!h#hnh%}rf(h']h(]h)]h*]h,]uh.K;h]rgh8XThe task being executed.rhri}rj(hjehjcubaubah#hubeubah#hubaubh)rk}rl(hX'args The tasks positional arguments. hj'hNh#hh%}rm(h']h(]h)]h*]h,]uh.Nh/hh]rnh)ro}rp(hUh%}rq(h']h(]h)]h*]h,]uhjkh]rrh)rs}rt(hX%args The tasks positional arguments. hjohh!h#hh%}ru(h']h(]h)]h*]h,]uh.K>h]rv(h)rw}rx(hXargsryhjshh!h#hh%}rz(h']h(]h)]h*]h,]uh.K>h]r{h8Xargsr|r}}r~(hjyhjwubaubh)r}r(hUh%}r(h']h(]h)]h*]h,]uhjsh]rhj)r}r(hXThe tasks positional arguments.rhjhh!h#hnh%}r(h']h(]h)]h*]h,]uh.K>h]rh8XThe tasks positional arguments.rr}r(hjhjubaubah#hubeubah#hubaubh)r}r(hX&kwargs The tasks keyword arguments. hj'hNh#hh%}r(h']h(]h)]h*]h,]uh.Nh/hh]rh)r}r(hUh%}r(h']h(]h)]h*]h,]uhjh]rh)r}r(hX$kwargs The tasks keyword arguments. hjhh!h#hh%}r(h']h(]h)]h*]h,]uh.KAh]r(h)r}r(hXkwargsrhjhh!h#hh%}r(h']h(]h)]h*]h,]uh.KAh]rh8Xkwargsrr}r(hjhjubaubh)r}r(hUh%}r(h']h(]h)]h*]h,]uhjh]rhj)r}r(hXThe tasks keyword arguments.rhjhh!h#hnh%}r(h']h(]h)]h*]h,]uh.KAh]rh8XThe tasks keyword arguments.rr}r(hjhjubaubah#hubeubah#hubaubh)r}r(hX'retval The return value of the task.hj'hh!h#hh%}r(h']h(]h)]h*]h,]uh.Nh/hh]r(hj)r}r(hXretvalrhjhh!h#hnh%}r(h']h(]h)]h*]h,]uh.KCh]rh8Xretvalrr}r(hjhjubaubcdocutils.nodes block_quote r)r}r(hUh%}r(h']h(]h)]h*]h,]uhjh]rhj)r}r(hXThe return value of the task.rhjhh!h#hnh%}r(h']h(]h)]h*]h,]uh.KEh]rh8XThe return value of the task.rr}r(hjhjubaubah#U block_quoterubeubeubeubeubh<)r}r(hUhhhh!h#h?h%}r(h*]h)]h']h(]h,]Uentries]r(hBXworker_init (built-in variable)h Utrauh.Nh/hh]ubhD)r}r(hUhhhh!h#hGh%}r(hIhJXpyh*]h)]h']h(]h,]hKXdatarhMjuh.Nh/hh]r(hO)r}r(hh hjhh!h#hRh%}r(h*]rh ahUNh)]h']h(]h,]rh ahWh hXUhYuh.KJh/hh]rh[)r}r(hh hjhh!h#h^h%}r(h']h(]h)]h*]h,]uh.KJh/hh]rh8X worker_initrr}r(hUhjubaubaubhd)r}r(hUhjhh!h#hgh%}r(h']h(]h)]h*]h,]uh.KJh/hh]rhj)r}r(hX'Triggered before the worker is started.rhjhh!h#hnh%}r(h']h(]h)]h*]h,]uh.KIh/hh]rh8X'Triggered before the worker is started.rr}r(hjhjubaubaubeubh<)r}r(hUhhhh!h#h?h%}r(h*]h)]h']h(]h,]Uentries]r(hBX worker_ready (built-in variable)h Utrauh.Nh/hh]ubhD)r}r(hUhhhh!h#hGh%}r(hIhJXpyh*]h)]h']h(]h,]hKXdatarhMjuh.Nh/hh]r(hO)r}r(hh hjhh!h#hRh%}r(h*]rh ahUNh)]h']h(]h,]rh ahWh hXUhYuh.KNh/hh]rh[)r}r(hh hjhh!h#h^h%}r(h']h(]h)]h*]h,]uh.KNh/hh]rh8X worker_readyrr}r(hUhjubaubaubhd)r}r(hUhjhh!h#hgh%}r(h']h(]h)]h*]h,]uh.KNh/hh]rhj)r}r(hX2Triggered when the worker is ready to accept work.rhjhh!h#hnh%}r(h']h(]h)]h*]h,]uh.KMh/hh]rh8X2Triggered when the worker is ready to accept work.rr }r (hjhjubaubaubeubh<)r }r (hUhhhh!h#h?h%}r (h*]h)]h']h(]h,]Uentries]r(hBX#worker_shutdown (built-in variable)hUtrauh.Nh/hh]ubhD)r}r(hUhhhh!h#hGh%}r(hIhJXpyh*]h)]h']h(]h,]hKXdatarhMjuh.Nh/hh]r(hO)r}r(hhhjhh!h#hRh%}r(h*]rhahUNh)]h']h(]h,]rhahWhhXUhYuh.KQh/hh]rh[)r}r(hhhjhh!h#h^h%}r(h']h(]h)]h*]h,]uh.KQh/hh]rh8Xworker_shutdownrr }r!(hUhjubaubaubhd)r"}r#(hUhjhh!h#hgh%}r$(h']h(]h)]h*]h,]uh.KQh/hh]r%hj)r&}r'(hX0Triggered when the worker is about to shut down.r(hj"hh!h#hnh%}r)(h']h(]h)]h*]h,]uh.KQh/hh]r*h8X0Triggered when the worker is about to shut down.r+r,}r-(hj(hj&ubaubaubeubeubahUU transformerr.NU footnote_refsr/}r0Urefnamesr1}r2Usymbol_footnotesr3]r4Uautofootnote_refsr5]r6Usymbol_footnote_refsr7]r8U citationsr9]r:h/hU current_liner;NUtransform_messagesr<]r=Ureporterr>NUid_startr?KU autofootnotesr@]rAU citation_refsrB}rCUindirect_targetsrD]rEUsettingsrF(cdocutils.frontend Values rGorH}rI(Ufootnote_backlinksrJKUrecord_dependenciesrKNU rfc_base_urlrLUhttp://tools.ietf.org/html/rMU tracebackrNUpep_referencesrONUstrip_commentsrPNU toc_backlinksrQUentryrRU language_coderSUenrTU datestamprUNU report_levelrVKU _destinationrWNU halt_levelrXKU strip_classesrYNh5NUerror_encoding_error_handlerrZUbackslashreplacer[Udebugr\NUembed_stylesheetr]Uoutput_encoding_error_handlerr^Ustrictr_U sectnum_xformr`KUdump_transformsraNU docinfo_xformrbKUwarning_streamrcNUpep_file_url_templaterdUpep-%04dreUexit_status_levelrfKUconfigrgNUstrict_visitorrhNUcloak_email_addressesriUtrim_footnote_reference_spacerjUenvrkNUdump_pseudo_xmlrlNUexpose_internalsrmNUsectsubtitle_xformrnU source_linkroNUrfc_referencesrpNUoutput_encodingrqUutf-8rrU source_urlrsNUinput_encodingrtU utf-8-sigruU_disable_configrvNU id_prefixrwUU tab_widthrxKUerror_encodingryUUTF-8rzU_sourcer{UV/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.signals.rstr|Ugettext_compactr}U generatorr~NUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrj_Uauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hhPhjhjh jh jh jWhhuUsubstitution_namesr}rh#h/h%}r(h']h*]h)]Usourceh!h(]h,]uU footnotesr]rUrefidsr}rub.PKXDD8pAcelery-1.0-archived/.doctrees/reference/celery.decorators.doctreecdocutils.nodes document q)q}q(U nametypesq}qX#task decorators - celery.decoratorsqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXY/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.decorators.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U!task-decorators-celery-decoratorsq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX#Task Decorators - celery.decoratorsq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X#Task Decorators - celery.decoratorsq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X~autodoc: failed to import module u'celery.decorators'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/decorators.py", line 10, in from celery.task.base import Task, PeriodicTask File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/task/__init__.py", line 8, in from celery.execute import apply_async File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/execute/__init__.py", line 1, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUY/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.decorators.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD mj5celery-1.0-archived/.doctrees/reference/index.doctreecdocutils.nodes document q)q}q(U nametypesq}qX api referenceqNsUsubstitution_defsq}qUparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startq KUnameidsq}qhU api-referenceqsUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXM/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/index.rstqq}qbUtagnameqUsectionqU attributesq}q (Udupnamesq!]Uclassesq"]Ubackrefsq#]Uidsq$]q%haUnamesq&]q'hauUlineq(KUdocumentq)hh]q*(cdocutils.nodes title q+)q,}q-(hX API Referenceq.hhhhhUtitleq/h}q0(h!]h"]h#]h$]h&]uh(Kh)hh]q1cdocutils.nodes Text q2X API Referenceq3q4}q5(hh.hh,ubaubcdocutils.nodes field_list q6)q7}q8(hUhhhhhU field_listq9h}q:(h!]h"]h#]h$]h&]uh(Kh)hh]q;(cdocutils.nodes field q<)q=}q>(hUhh7hhhUfieldq?h}q@(h!]h"]h#]h$]h&]uh(Kh)hh]qA(cdocutils.nodes field_name qB)qC}qD(hXReleaseqEh}qF(h!]h"]h#]h$]h&]uhh=h]qGh2XReleaseqHqI}qJ(hhEhhCubahU field_nameqKubcdocutils.nodes field_body qL)qM}qN(hX |version|qOh}qP(h!]h"]h#]h$]h&]uhh=h]qQcdocutils.nodes paragraph qR)qS}qT(hhOhhMhhhU paragraphqUh}qV(h!]h"]h#]h$]h&]uh(Kh]qWh2X1.0qXqY}qZ(hU1.0q[hhSubaubahU field_bodyq\ubeubh<)q]}q^(hUhh7hhhh?h}q_(h!]h"]h#]h$]h&]uh(Kh)hh]q`(hB)qa}qb(hXDateqch}qd(h!]h"]h#]h$]h&]uhh]h]qeh2XDateqfqg}qh(hhchhaubahhKubhL)qi}qj(hX|today| h}qk(h!]h"]h#]h$]h&]uhh]h]qlhR)qm}qn(hX|today|qohhihhhhUh}qp(h!]h"]h#]h$]h&]uh(Kh]qqh2XFebruary 04, 2014qrqs}qt(hXFebruary 04, 2014hhmubaubahh\ubeubeubcdocutils.nodes compound qu)qv}qw(hUhhhhhUcompoundqxh}qy(h!]h"]qzUtoctree-wrapperq{ah#]h$]h&]uh(Nh)hh]q|csphinx.addnodes toctree q})q~}q(hUhhvhhhUtoctreeqh}q(UnumberedqKU includehiddenqhXreference/indexqU titlesonlyqUglobqh$]h#]h!]h"]h&]Uentriesq]q(NXreference/celery.decoratorsqqNXreference/celery.task.baseqqNXreference/celery.executeqqNXreference/celery.resultqqNXreference/celery.taskqqNXreference/celery.confqqNXreference/celery.task.controlqqNXreference/celery.task.httpqqNXreference/celery.task.schedulesqqNXreference/celery.signalsqqNXreference/celery.exceptionsqqNXreference/celery.task.builtinsqqNXreference/celery.loadersqqNXreference/celery.loaders.baseqqNX reference/celery.loaders.defaultqqNX"reference/celery.loaders.djangoappqqNXreference/celery.registryqqNXreference/celery.statesqqNXreference/celery.messagingqqNX$reference/celery.contrib.test_runnerqqNX"reference/celery.contrib.abortableqqNXreference/celery.viewsqqNXreference/celery.eventsqqNXreference/celery.bin.celerydqqNXreference/celery.bin.celerybeatqqNXreference/celery.bin.celeryinitqqNXreference/celery.bin.camqadmqqeUhiddenqU includefilesq]q(hhhhhhhhhhhhhhhhhhhhhhhhhhheUmaxdepthqKuh(Kh]ubaubeubahUU transformerqNU footnote_refsq}qUrefnamesq}qUsymbol_footnotesq]qUautofootnote_refsq]qUsymbol_footnote_refsq]qU citationsq]qh)hU current_lineqNUtransform_messagesq]qUreporterqNUid_startqKU autofootnotesq]qU citation_refsq}qUindirect_targetsq]qUsettingsq(cdocutils.frontend Values qoq}q(Ufootnote_backlinksqKUrecord_dependenciesqNU rfc_base_urlqUhttp://tools.ietf.org/html/qU tracebackqUpep_referencesqNUstrip_commentsqNU toc_backlinksqUentryqU language_codeqUenqU datestampqNU report_levelqKU _destinationqNU halt_levelqKU strip_classesqNh/NUerror_encoding_error_handlerqUbackslashreplaceqUdebugqNUembed_stylesheetqUoutput_encoding_error_handlerqUstrictqU sectnum_xformqKUdump_transformsqNU docinfo_xformqKUwarning_streamqNUpep_file_url_templateqUpep-%04dqUexit_status_levelqKUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingr U utf-8-sigr U_disable_configr NU id_prefixr UU tab_widthr KUerror_encodingrUUTF-8rU_sourcerUM/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/index.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrhUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledr U raw_enabledr!KU dump_settingsr"NubUsymbol_footnote_startr#KUidsr$}r%hhsUsubstitution_namesr&}r'hh)h}r((h!]h$]h#]Usourcehh"]h&]uU footnotesr)]r*Urefidsr+}r,ub.PKXDDM^^Dcelery-1.0-archived/.doctrees/reference/celery.task.builtins.doctreecdocutils.nodes document q)q}q(U nametypesq}qX,built-in task classes - celery.task.builtinsqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qX\/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.task.builtins.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U*built-in-task-classes-celery-task-builtinsq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX,Built-in Task Classes - celery.task.builtinsq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X,Built-in Task Classes - celery.task.builtinsq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/Xautodoc: failed to import module u'celery.task.builtins'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/task/__init__.py", line 8, in from celery.execute import apply_async File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/execute/__init__.py", line 1, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqU\/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.task.builtins.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]qUfile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD^] Ecelery-1.0-archived/.doctrees/reference/celery.bin.celeryinit.doctreecdocutils.nodes document q)q}q(U nametypesq}qX)celery initialize - celery.bin.celeryinitqNsUsubstitution_defsq}qUparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startq KUnameidsq}qhU'celery-initialize-celery-bin-celeryinitqsUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qX]/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.bin.celeryinit.rstqq}qbUtagnameqUsectionqU attributesq}q (Udupnamesq!]Uclassesq"]Ubackrefsq#]Uidsq$]q%(Xmodule-celery.bin.celeryinitq&heUnamesq']q(hauUlineq)KUdocumentq*hh]q+(cdocutils.nodes title q,)q-}q.(hX)Celery Initialize - celery.bin.celeryinitq/hhhhhUtitleq0h}q1(h!]h"]h#]h$]h']uh)Kh*hh]q2cdocutils.nodes Text q3X)Celery Initialize - celery.bin.celeryinitq4q5}q6(hh/hh-ubaubcsphinx.addnodes index q7)q8}q9(hUhhhU q:hUindexq;h}q<(h$]h#]h!]h"]h']Uentries]q=(Usingleq>Xcelery.bin.celeryinit (module)Xmodule-celery.bin.celeryinitUtq?auh)Kh*hh]ubeubahUU transformerq@NU footnote_refsqA}qBUrefnamesqC}qDUsymbol_footnotesqE]qFUautofootnote_refsqG]qHUsymbol_footnote_refsqI]qJU citationsqK]qLh*hU current_lineqMNUtransform_messagesqN]qOUreporterqPNUid_startqQKU autofootnotesqR]qSU citation_refsqT}qUUindirect_targetsqV]qWUsettingsqX(cdocutils.frontend Values qYoqZ}q[(Ufootnote_backlinksq\KUrecord_dependenciesq]NU rfc_base_urlq^Uhttp://tools.ietf.org/html/q_U tracebackq`Upep_referencesqaNUstrip_commentsqbNU toc_backlinksqcUentryqdU language_codeqeUenqfU datestampqgNU report_levelqhKU _destinationqiNU halt_levelqjKU strip_classesqkNh0NUerror_encoding_error_handlerqlUbackslashreplaceqmUdebugqnNUembed_stylesheetqoUoutput_encoding_error_handlerqpUstrictqqU sectnum_xformqrKUdump_transformsqsNU docinfo_xformqtKUwarning_streamquNUpep_file_url_templateqvUpep-%04dqwUexit_status_levelqxKUconfigqyNUstrict_visitorqzNUcloak_email_addressesq{Utrim_footnote_reference_spaceq|Uenvq}NUdump_pseudo_xmlq~NUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqU]/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.bin.celeryinit.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhqUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}q(h&cdocutils.nodes target q)q}q(hUhhhh:hUtargetqh}q(h!]h$]qh&ah#]Uismodh"]h']uh)Kh*hh]ubhhuUsubstitution_namesq}qhh*h}q(h!]h$]h#]Usourcehh"]h']uU footnotesq]qUrefidsq}qub.PKXDD֡qqCcelery-1.0-archived/.doctrees/reference/celery.task.control.doctreecdocutils.nodes document q)q}q(U nametypesq}qX2remote management of workers - celery.task.controlqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qX[/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.task.control.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U0remote-management-of-workers-celery-task-controlq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX2Remote Management of Workers - celery.task.controlq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X2Remote Management of Workers - celery.task.controlq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/Xautodoc: failed to import module u'celery.task.control'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/task/__init__.py", line 8, in from celery.execute import apply_async File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/execute/__init__.py", line 1, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqU[/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.task.control.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD'//Acelery-1.0-archived/.doctrees/reference/celery.exceptions.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xexceptions - celery.exceptionsqNX celery.exceptions.RetryTaskErrorqXcelery.exceptions.TimeoutErrorqX#celery.exceptions.AlreadyRegisteredq Xcelery.exceptions.NotRegisteredq X)celery.exceptions.MaxRetriesExceededErrorq X&celery.exceptions.ImproperlyConfiguredq uUsubstitution_defsq }qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hUexceptions-celery-exceptionsqhhhhh h h h h h h h uUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXY/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.exceptions.rstq q!}q"bUtagnameq#Usectionq$U attributesq%}q&(Udupnamesq']Uclassesq(]Ubackrefsq)]Uidsq*]q+(Xmodule-celery.exceptionsq,heUnamesq-]q.hauUlineq/KUdocumentq0hh]q1(cdocutils.nodes title q2)q3}q4(hXExceptions - celery.exceptionsq5hhhh!h#Utitleq6h%}q7(h']h(]h)]h*]h-]uh/Kh0hh]q8cdocutils.nodes Text q9XExceptions - celery.exceptionsq:q;}q<(hh5hh3ubaubcsphinx.addnodes index q=)q>}q?(hUhhhU q@h#UindexqAh%}qB(h*]h)]h']h(]h-]Uentries]qC(UsingleqDXcelery.exceptions (module)Xmodule-celery.exceptionsUtqEauh/Kh0hh]ubcdocutils.nodes paragraph qF)qG}qH(hXCommon ExceptionsqIhhhXh/var/build/user_builds/celery/checkouts/1.0-archived/celery/exceptions.py:docstring of celery.exceptionsqJh#U paragraphqKh%}qL(h']h(]h)]h*]h-]uh/Kh0hh]qMh9XCommon ExceptionsqNqO}qP(hhIhhGubaubh=)qQ}qR(hUhhhXz/var/build/user_builds/celery/checkouts/1.0-archived/celery/exceptions.py:docstring of celery.exceptions.AlreadyRegisteredqSh#hAh%}qT(h*]h)]h']h(]h-]Uentries]qU(hDXAlreadyRegisteredqVh UtqWauh/Nh0hh]ubcsphinx.addnodes desc qX)qY}qZ(hUhhhhSh#Udescq[h%}q\(Unoindexq]Udomainq^Xpyh*]h)]h']h(]h-]Uobjtypeq_X exceptionq`Udesctypeqah`uh/Nh0hh]qb(csphinx.addnodes desc_signature qc)qd}qe(hhVhhYhU qfh#Udesc_signatureqgh%}qh(h*]qih aUmoduleqjhXcelery.exceptionsqkql}qmbh)]h']h(]h-]qnh aUfullnameqohVUclassqpUUfirstqquh/Nh0hh]qr(csphinx.addnodes desc_annotation qs)qt}qu(hX exception hhdhhfh#Udesc_annotationqvh%}qw(h']h(]h)]h*]h-]uh/Nh0hh]qxh9X exception qyqz}q{(hUhhtubaubcsphinx.addnodes desc_addname q|)q}}q~(hXcelery.exceptions.hhdhhfh#U desc_addnameqh%}q(h']h(]h)]h*]h-]uh/Nh0hh]qh9Xcelery.exceptions.qq}q(hUhh}ubaubcsphinx.addnodes desc_name q)q}q(hhVhhdhhfh#U desc_nameqh%}q(h']h(]h)]h*]h-]uh/Nh0hh]qh9XAlreadyRegisteredqq}q(hUhhubaubeubcsphinx.addnodes desc_content q)q}q(hUhhYhhfh#U desc_contentqh%}q(h']h(]h)]h*]h-]uh/Nh0hh]qhF)q}q(hXThe task is already registered.qhhhhSh#hKh%}q(h']h(]h)]h*]h-]uh/Kh0hh]qh9XThe task is already registered.qq}q(hhhhubaubaubeubh=)q}q(hUhhhX}/var/build/user_builds/celery/checkouts/1.0-archived/celery/exceptions.py:docstring of celery.exceptions.ImproperlyConfiguredqh#hAh%}q(h*]h)]h']h(]h-]Uentries]q(hDXImproperlyConfiguredqh Utqauh/Nh0hh]ubhX)q}q(hUhhhhh#h[h%}q(h]h^Xpyh*]h)]h']h(]h-]h_X exceptionqhahuh/Nh0hh]q(hc)q}q(hhhhhhfh#hgh%}q(h*]qh ahjhXcelery.exceptionsqq}qbh)]h']h(]h-]qh ahohhpUhquh/Nh0hh]q(hs)q}q(hX exception hhhhfh#hvh%}q(h']h(]h)]h*]h-]uh/Nh0hh]qh9X exception qq}q(hUhhubaubh|)q}q(hXcelery.exceptions.hhhhfh#hh%}q(h']h(]h)]h*]h-]uh/Nh0hh]qh9Xcelery.exceptions.qq}q(hUhhubaubh)q}q(hhhhhhfh#hh%}q(h']h(]h)]h*]h-]uh/Nh0hh]qh9XImproperlyConfiguredqÅq}q(hUhhubaubeubh)q}q(hUhhhhfh#hh%}q(h']h(]h)]h*]h-]uh/Nh0hh]qhF)q}q(hX(Celery is somehow improperly configured.qhhhhh#hKh%}q(h']h(]h)]h*]h-]uh/Kh0hh]qh9X(Celery is somehow improperly configured.qυq}q(hhhhubaubaubeubh=)q}q(hUhhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/exceptions.py:docstring of celery.exceptions.MaxRetriesExceededErrorqh#hAh%}q(h*]h)]h']h(]h-]Uentries]q(hDXMaxRetriesExceededErrorqh Utqauh/Nh0hh]ubhX)q}q(hUhhhhh#h[h%}q(h]h^Xpyh*]h)]h']h(]h-]h_X exceptionqhahuh/Nh0hh]q(hc)q}q(hhhhhhfh#hgh%}q(h*]qh ahjhXcelery.exceptionsq⅁q}qbh)]h']h(]h-]qh ahohhpUhquh/Nh0hh]q(hs)q}q(hX exception hhhhfh#hvh%}q(h']h(]h)]h*]h-]uh/Nh0hh]qh9X exception q녁q}q(hUhhubaubh|)q}q(hXcelery.exceptions.hhhhfh#hh%}q(h']h(]h)]h*]h-]uh/Nh0hh]qh9Xcelery.exceptions.qq}q(hUhhubaubh)q}q(hhhhhhfh#hh%}q(h']h(]h)]h*]h-]uh/Nh0hh]qh9XMaxRetriesExceededErrorqq}q(hUhhubaubeubh)q}q(hUhhhhfh#hh%}q(h']h(]h)]h*]h-]uh/Nh0hh]qhF)r}r(hX.The tasks max restart limit has been exceeded.rhhhhh#hKh%}r(h']h(]h)]h*]h-]uh/Kh0hh]rh9X.The tasks max restart limit has been exceeded.rr}r(hjhjubaubaubeubh=)r}r (hUhhhXv/var/build/user_builds/celery/checkouts/1.0-archived/celery/exceptions.py:docstring of celery.exceptions.NotRegisteredr h#hAh%}r (h*]h)]h']h(]h-]Uentries]r (hDX NotRegisteredr h Utrauh/Nh0hh]ubhX)r}r(hUhhhj h#h[h%}r(h]h^Xpyh*]h)]h']h(]h-]h_X exceptionrhajuh/Nh0hh]r(hc)r}r(hX'NotRegistered(message, *args, **kwargs)hjhhfh#hgh%}r(h*]rh ahjhXcelery.exceptionsrr}rbh)]h']h(]h-]rh ahoj hpUhquh/Nh0hh]r(hs)r}r(hX exception hjhhfh#hvh%}r(h']h(]h)]h*]h-]uh/Nh0hh]r h9X exception r!r"}r#(hUhjubaubh|)r$}r%(hXcelery.exceptions.hjhhfh#hh%}r&(h']h(]h)]h*]h-]uh/Nh0hh]r'h9Xcelery.exceptions.r(r)}r*(hUhj$ubaubh)r+}r,(hj hjhhfh#hh%}r-(h']h(]h)]h*]h-]uh/Nh0hh]r.h9X NotRegisteredr/r0}r1(hUhj+ubaubcsphinx.addnodes desc_parameterlist r2)r3}r4(hUhjhhfh#Udesc_parameterlistr5h%}r6(h']h(]h)]h*]h-]uh/Nh0hh]r7(csphinx.addnodes desc_parameter r8)r9}r:(hXmessageh%}r;(h']h(]h)]h*]h-]uhj3h]r<h9Xmessager=r>}r?(hUhj9ubah#Udesc_parameterr@ubj8)rA}rB(hX*argsh%}rC(h']h(]h)]h*]h-]uhj3h]rDh9X*argsrErF}rG(hUhjAubah#j@ubj8)rH}rI(hX**kwargsh%}rJ(h']h(]h)]h*]h-]uhj3h]rKh9X**kwargsrLrM}rN(hUhjHubah#j@ubeubeubh)rO}rP(hUhjhhfh#hh%}rQ(h']h(]h)]h*]h-]uh/Nh0hh]rRhF)rS}rT(hXThe task is not registered.rUhjOhj h#hKh%}rV(h']h(]h)]h*]h-]uh/Kh0hh]rWh9XThe task is not registered.rXrY}rZ(hjUhjSubaubaubeubh=)r[}r\(hUhhhXw/var/build/user_builds/celery/checkouts/1.0-archived/celery/exceptions.py:docstring of celery.exceptions.RetryTaskErrorr]h#hAh%}r^(h*]h)]h']h(]h-]Uentries]r_(hDXRetryTaskErrorr`hUtraauh/Nh0hh]ubhX)rb}rc(hUhhhj]h#h[h%}rd(h]h^Xpyh*]h)]h']h(]h-]h_X exceptionrehajeuh/Nh0hh]rf(hc)rg}rh(hX-RetryTaskError(message, exc, *args, **kwargs)hjbhhfh#hgh%}ri(h*]rjhahjhXcelery.exceptionsrkrl}rmbh)]h']h(]h-]rnhahoj`hpUhquh/Nh0hh]ro(hs)rp}rq(hX exception hjghhfh#hvh%}rr(h']h(]h)]h*]h-]uh/Nh0hh]rsh9X exception rtru}rv(hUhjpubaubh|)rw}rx(hXcelery.exceptions.hjghhfh#hh%}ry(h']h(]h)]h*]h-]uh/Nh0hh]rzh9Xcelery.exceptions.r{r|}r}(hUhjwubaubh)r~}r(hj`hjghhfh#hh%}r(h']h(]h)]h*]h-]uh/Nh0hh]rh9XRetryTaskErrorrr}r(hUhj~ubaubj2)r}r(hUhjghhfh#j5h%}r(h']h(]h)]h*]h-]uh/Nh0hh]r(j8)r}r(hXmessageh%}r(h']h(]h)]h*]h-]uhjh]rh9Xmessagerr}r(hUhjubah#j@ubj8)r}r(hXexch%}r(h']h(]h)]h*]h-]uhjh]rh9Xexcrr}r(hUhjubah#j@ubj8)r}r(hX*argsh%}r(h']h(]h)]h*]h-]uhjh]rh9X*argsrr}r(hUhjubah#j@ubj8)r}r(hX**kwargsh%}r(h']h(]h)]h*]h-]uhjh]rh9X**kwargsrr}r(hUhjubah#j@ubeubeubh)r}r(hUhjbhhfh#hh%}r(h']h(]h)]h*]h-]uh/Nh0hh]rhF)r}r(hX The task is to be retried later.rhjhj]h#hKh%}r(h']h(]h)]h*]h-]uh/Kh0hh]rh9X The task is to be retried later.rr}r(hjhjubaubaubeubh=)r}r(hUhhhXu/var/build/user_builds/celery/checkouts/1.0-archived/celery/exceptions.py:docstring of celery.exceptions.TimeoutErrorrh#hAh%}r(h*]h)]h']h(]h-]Uentries]r(hDX TimeoutErrorrhUtrauh/Nh0hh]ubhX)r}r(hUhhhjh#h[h%}r(h]h^Xpyh*]h)]h']h(]h-]h_X exceptionrhajuh/Nh0hh]r(hc)r}r(hjhjhhfh#hgh%}r(h*]rhahjhXcelery.exceptionsrr}rbh)]h']h(]h-]rhahojhpUhquh/Nh0hh]r(hs)r}r(hX exception hjhhfh#hvh%}r(h']h(]h)]h*]h-]uh/Nh0hh]rh9X exception rr}r(hUhjubaubh|)r}r(hXcelery.exceptions.hjhhfh#hh%}r(h']h(]h)]h*]h-]uh/Nh0hh]rh9Xcelery.exceptions.rr}r(hUhjubaubh)r}r(hjhjhhfh#hh%}r(h']h(]h)]h*]h-]uh/Nh0hh]rh9X TimeoutErrorrr}r(hUhjubaubeubh)r}r(hUhjhhfh#hh%}r(h']h(]h)]h*]h-]uh/Nh0hh]rhF)r}r(hXThe operation timed out.rhjhjh#hKh%}r(h']h(]h)]h*]h-]uh/Kh0hh]rh9XThe operation timed out.rr}r(hjhjubaubaubeubeubahUU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh0hU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsr NU toc_backlinksr Uentryr U language_coder Uenr U datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh6NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigr NUstrict_visitorr!NUcloak_email_addressesr"Utrim_footnote_reference_spacer#Uenvr$NUdump_pseudo_xmlr%NUexpose_internalsr&NUsectsubtitle_xformr'U source_linkr(NUrfc_referencesr)NUoutput_encodingr*Uutf-8r+U source_urlr,NUinput_encodingr-U utf-8-sigr.U_disable_configr/NU id_prefixr0UU tab_widthr1KUerror_encodingr2UUTF-8r3U_sourcer4UY/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.exceptions.rstr5Ugettext_compactr6U generatorr7NUdump_internalsr8NU smart_quotesr9U pep_base_urlr:Uhttp://www.python.org/dev/peps/r;Usyntax_highlightr<Ulongr=Uinput_encoding_error_handlerr>jUauto_id_prefixr?Uidr@Udoctitle_xformrAUstrip_elements_with_classesrBNU _config_filesrC]rDUfile_insertion_enabledrEU raw_enabledrFKU dump_settingsrGNubUsymbol_footnote_startrHKUidsrI}rJ(hhhjghjh hdh jh,cdocutils.nodes target rK)rL}rM(hUhhhh@h#UtargetrNh%}rO(h']h*]rPh,ah)]Uismodh(]h-]uh/Kh0hh]ubh hh huUsubstitution_namesrQ}rRh#h0h%}rS(h']h*]h)]Usourceh!h(]h-]uU footnotesrT]rUUrefidsrV}rWub.PKXDD*/{||>celery-1.0-archived/.doctrees/reference/celery.execute.doctreecdocutils.nodes document q)q}q(U nametypesq}qX executing tasks - celery.executeqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXV/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.execute.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q Uexecuting-tasks-celery-executeq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX Executing Tasks - celery.executeq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X Executing Tasks - celery.executeq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X8autodoc: failed to import module u'celery.execute'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/execute/__init__.py", line 1, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUV/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.execute.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD//Ccelery-1.0-archived/.doctrees/reference/celery.loaders.base.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xcelery.loaders.base.BaseLoaderqX#celery.loaders.base.BaseLoader.confqX+celery.loaders.base.BaseLoader.on_task_initqX)loader base classes - celery.loaders.baseq NX-celery.loaders.base.BaseLoader.on_worker_initq uUsubstitution_defsq }q Uparse_messagesq ]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hhhhhhh U'loader-base-classes-celery-loaders-baseqh h uUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qX[/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.loaders.base.rstqq}q bUtagnameq!Usectionq"U attributesq#}q$(Udupnamesq%]Uclassesq&]Ubackrefsq']Uidsq(]q)(Xmodule-celery.loaders.baseq*heUnamesq+]q,h auUlineq-KUdocumentq.hh]q/(cdocutils.nodes title q0)q1}q2(hX)Loader Base Classes - celery.loaders.baseq3hhhhh!Utitleq4h#}q5(h%]h&]h']h(]h+]uh-Kh.hh]q6cdocutils.nodes Text q7X)Loader Base Classes - celery.loaders.baseq8q9}q:(hh3hh1ubaubcsphinx.addnodes index q;)q<}q=(hUhhhU q>h!Uindexq?h#}q@(h(]h']h%]h&]h+]Uentries]qA(UsingleqBXcelery.loaders.base (module)Xmodule-celery.loaders.baseUtqCauh-Kh.hh]ubh;)qD}qE(hUhhhNh!h?h#}qF(h(]h']h%]h&]h+]Uentries]qG(hBX)BaseLoader (class in celery.loaders.base)hUtqHauh-Nh.hh]ubcsphinx.addnodes desc qI)qJ}qK(hUhhhNh!UdescqLh#}qM(UnoindexqNUdomainqOXpyh(]h']h%]h&]h+]UobjtypeqPXclassqQUdesctypeqRhQuh-Nh.hh]qS(csphinx.addnodes desc_signature qT)qU}qV(hX BaseLoaderqWhhJhU qXh!Udesc_signatureqYh#}qZ(h(]q[haUmoduleq\hXcelery.loaders.baseq]q^}q_bh']h%]h&]h+]q`haUfullnameqahWUclassqbUUfirstqcuh-Nh.hh]qd(csphinx.addnodes desc_annotation qe)qf}qg(hXclass hhUhhXh!Udesc_annotationqhh#}qi(h%]h&]h']h(]h+]uh-Nh.hh]qjh7Xclass qkql}qm(hUhhfubaubcsphinx.addnodes desc_addname qn)qo}qp(hXcelery.loaders.base.hhUhhXh!U desc_addnameqqh#}qr(h%]h&]h']h(]h+]uh-Nh.hh]qsh7Xcelery.loaders.base.qtqu}qv(hUhhoubaubcsphinx.addnodes desc_name qw)qx}qy(hhWhhUhhXh!U desc_nameqzh#}q{(h%]h&]h']h(]h+]uh-Nh.hh]q|h7X BaseLoaderq}q~}q(hUhhxubaubeubcsphinx.addnodes desc_content q)q}q(hUhhJhhXh!U desc_contentqh#}q(h%]h&]h']h(]h+]uh-Nh.hh]q(cdocutils.nodes paragraph q)q}q(hXThe base class for loaders.qhhhXw/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/base.py:docstring of celery.loaders.base.BaseLoaderqh!U paragraphqh#}q(h%]h&]h']h(]h+]uh-Kh.hh]qh7XThe base class for loaders.qq}q(hhhhubaubh)q}q(hX$Loaders handles to following things:qhhhhh!hh#}q(h%]h&]h']h(]h+]uh-Kh.hh]qh7X$Loaders handles to following things:qq}q(hhhhubaubcdocutils.nodes bullet_list q)q}q(hUhhhNh!U bullet_listqh#}q(UbulletqX*h(]h']h%]h&]h+]uh-Nh.hh]q(cdocutils.nodes list_item q)q}q(hX-Reading celery client/worker configurations. h#}q(h%]h&]h']h(]h+]uhhh]qh)q}q(hX,Reading celery client/worker configurations.qhhhhh!hh#}q(h%]h&]h']h(]h+]uh-Kh]qh7X,Reading celery client/worker configurations.qq}q(hhhhubaubah!U list_itemqubh)q}q(hX=What happens when a task starts? See :meth:`on_task_init`. h#}q(h%]h&]h']h(]h+]uhhh]qcdocutils.nodes definition_list q)q}q(hUh#}q(h%]h&]h']h(]h+]uhhh]qcdocutils.nodes definition_list_item q)q}q(hX;What happens when a task starts? See :meth:`on_task_init`. hhhhh!Udefinition_list_itemqh#}q(h%]h&]h']h(]h+]uh-Kh]q(cdocutils.nodes term q)q}q(hX What happens when a task starts?qhhhhh!Utermqh#}q(h%]h&]h']h(]h+]uh-Kh]qh7X What happens when a task starts?qąq}q(hhhhubaubcdocutils.nodes definition q)q}q(hUh#}q(h%]h&]h']h(]h+]uhhh]qh)q}q(hXSee :meth:`on_task_init`.hhhhh!hh#}q(h%]h&]h']h(]h+]uh-Kh]q(h7XSee qЅq}q(hXSee hhubcsphinx.addnodes pending_xref q)q}q(hX:meth:`on_task_init`qhhhNh!U pending_xrefqh#}q(UreftypeXmethUrefwarnqىU reftargetqX on_task_initU refdomainXpyqh(]h']U refexplicith%]h&]h+]UrefdocqXreference/celery.loaders.baseqUpy:classqhWU py:moduleqXcelery.loaders.basequh-Nh]qcdocutils.nodes literal q)q}q(hhh#}q(h%]h&]q(UxrefqhXpy-methqeh']h(]h+]uhhh]qh7Xon_task_init()qꅁq}q(hUhhubah!Uliteralqubaubh7X.q}q(hX.hhubeubah!U definitionqubeubah!Udefinition_listqubah!hubh)q}q(hXCWhat happens when the worker starts? See :meth:`on_worker_init`. h#}q(h%]h&]h']h(]h+]uhhh]qh)q}q(hUh#}q(h%]h&]h']h(]h+]uhhh]qh)q}q(hXAWhat happens when the worker starts? See :meth:`on_worker_init`. hhhhh!hh#}q(h%]h&]h']h(]h+]uh-K h]q(h)q}q(hX$What happens when the worker starts?rhhhhh!hh#}r(h%]h&]h']h(]h+]uh-K h]rh7X$What happens when the worker starts?rr}r(hjhhubaubh)r}r(hUh#}r(h%]h&]h']h(]h+]uhhh]r h)r }r (hXSee :meth:`on_worker_init`.r hjhhh!hh#}r (h%]h&]h']h(]h+]uh-K h]r(h7XSee rr}r(hXSee hj ubh)r}r(hX:meth:`on_worker_init`rhj hNh!hh#}r(UreftypeXmethhىhXon_worker_initU refdomainXpyrh(]h']U refexplicith%]h&]h+]hhhhWhhuh-Nh]rh)r}r(hjh#}r(h%]h&]r(hjXpy-methreh']h(]h+]uhjh]rh7Xon_worker_init()rr}r (hUhjubah!hubaubh7X.r!}r"(hX.hj ubeubah!hubeubah!hubah!hubh)r#}r$(hX+What modules are imported to find tasks? h#}r%(h%]h&]h']h(]h+]uhhh]r&h)r'}r((hX(What modules are imported to find tasks?r)hj#hhh!hh#}r*(h%]h&]h']h(]h+]uh-K h]r+h7X(What modules are imported to find tasks?r,r-}r.(hj)hj'ubaubah!hubeubh;)r/}r0(hUhhhX|/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/base.py:docstring of celery.loaders.base.BaseLoader.confr1h!h?h#}r2(h(]h']h%]h&]h+]Uentries]r3(hBX/conf (celery.loaders.base.BaseLoader attribute)hUtr4auh-Nh.hh]ubhI)r5}r6(hUhhhj1h!hLh#}r7(hNhOXpyh(]h']h%]h&]h+]hPX attributer8hRj8uh-Nh.hh]r9(hT)r:}r;(hXBaseLoader.confhj5hhXh!hYh#}r<(h(]r=hah\hXcelery.loaders.baser>r?}r@bh']h%]h&]h+]rAhahaXBaseLoader.confhbhWhcuh-Nh.hh]rBhw)rC}rD(hXconfhj:hhXh!hzh#}rE(h%]h&]h']h(]h+]uh-Nh.hh]rFh7XconfrGrH}rI(hUhjCubaubaubh)rJ}rK(hUhj5hhXh!hh#}rL(h%]h&]h']h(]h+]uh-Nh.hh]rMh)rN}rO(hXLoader configuration.rPhjJhj1h!hh#}rQ(h%]h&]h']h(]h+]uh-Kh.hh]rRh7XLoader configuration.rSrT}rU(hjPhjNubaubaubeubh;)rV}rW(hUhhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/base.py:docstring of celery.loaders.base.BaseLoader.on_task_initrXh!h?h#}rY(h(]h']h%]h&]h+]Uentries]rZ(hBX6on_task_init() (celery.loaders.base.BaseLoader method)hUtr[auh-Nh.hh]ubhI)r\}r](hUhhhjXh!hLh#}r^(hNhOXpyh(]h']h%]h&]h+]hPXmethodr_hRj_uh-Nh.hh]r`(hT)ra}rb(hX&BaseLoader.on_task_init(task_id, task)hj\hhXh!hYh#}rc(h(]rdhah\hXcelery.loaders.basererf}rgbh']h%]h&]h+]rhhahaXBaseLoader.on_task_inithbhWhcuh-Nh.hh]ri(hw)rj}rk(hX on_task_inithjahhXh!hzh#}rl(h%]h&]h']h(]h+]uh-Nh.hh]rmh7X on_task_initrnro}rp(hUhjjubaubcsphinx.addnodes desc_parameterlist rq)rr}rs(hUhjahhXh!Udesc_parameterlistrth#}ru(h%]h&]h']h(]h+]uh-Nh.hh]rv(csphinx.addnodes desc_parameter rw)rx}ry(hXtask_idh#}rz(h%]h&]h']h(]h+]uhjrh]r{h7Xtask_idr|r}}r~(hUhjxubah!Udesc_parameterrubjw)r}r(hXtaskh#}r(h%]h&]h']h(]h+]uhjrh]rh7Xtaskrr}r(hUhjubah!jubeubeubh)r}r(hUhj\hhXh!hh#}r(h%]h&]h']h(]h+]uh-Nh.hh]rh)r}r(hX0This method is called before a task is executed.rhjhjXh!hh#}r(h%]h&]h']h(]h+]uh-Kh.hh]rh7X0This method is called before a task is executed.rr}r(hjhjubaubaubeubh;)r}r(hUhhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/base.py:docstring of celery.loaders.base.BaseLoader.on_worker_initrh!h?h#}r(h(]h']h%]h&]h+]Uentries]r(hBX8on_worker_init() (celery.loaders.base.BaseLoader method)h Utrauh-Nh.hh]ubhI)r}r(hUhhhjh!hLh#}r(hNhOXpyh(]h']h%]h&]h+]hPXmethodrhRjuh-Nh.hh]r(hT)r}r(hXBaseLoader.on_worker_init()rhjhhXh!hYh#}r(h(]rh ah\hXcelery.loaders.baserr}rbh']h%]h&]h+]rh ahaXBaseLoader.on_worker_inithbhWhcuh-Nh.hh]r(hw)r}r(hXon_worker_inithjhhXh!hzh#}r(h%]h&]h']h(]h+]uh-Nh.hh]rh7Xon_worker_initrr}r(hUhjubaubjq)r}r(hUhjhhXh!jth#}r(h%]h&]h']h(]h+]uh-Nh.hh]ubeubh)r}r(hUhjhhXh!hh#}r(h%]h&]h']h(]h+]uh-Nh.hh]rh)r}r(hX;This method is called when the worker (``celeryd``) starts.rhjhjh!hh#}r(h%]h&]h']h(]h+]uh-Kh.hh]r(h7X'This method is called when the worker (rr}r(hX'This method is called when the worker (hjubh)r}r(hX ``celeryd``h#}r(h%]h&]h']h(]h+]uhjh]rh7Xcelerydrr}r(hUhjubah!hubh7X ) starts.rr}r(hX ) starts.hjubeubaubeubeubeubeubahUU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh.hU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh4NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkr NUrfc_referencesr NUoutput_encodingr Uutf-8r U source_urlr NUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerU[/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.loaders.base.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixr Uidr!Udoctitle_xformr"Ustrip_elements_with_classesr#NU _config_filesr$]Ufile_insertion_enabledr%U raw_enabledr&KU dump_settingsr'NubUsymbol_footnote_startr(KUidsr)}r*(hhhj:h jh*cdocutils.nodes target r+)r,}r-(hUhhhh>h!Utargetr.h#}r/(h%]h(]r0h*ah']Uismodh&]h+]uh-Kh.hh]ubhhUhjauUsubstitution_namesr1}r2h!h.h#}r3(h%]h(]h']Usourcehh&]h+]uU footnotesr4]r5Urefidsr6}r7ub.PKXDD#5;AA;celery-1.0-archived/.doctrees/reference/celery.task.doctreecdocutils.nodes document q)q}q(U nametypesq}qX,task information and utilities - celery.taskqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXS/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.task.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U*task-information-and-utilities-celery-taskq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX,Task Information and Utilities - celery.taskq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X,Task Information and Utilities - celery.taskq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/Xautodoc: failed to import module u'celery.task'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/task/__init__.py", line 8, in from celery.execute import apply_async File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/execute/__init__.py", line 1, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUS/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.task.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDD:6i;celery-1.0-archived/.doctrees/reference/celery.conf.doctreecdocutils.nodes document q)q}q(U nametypesq}q(XTASK_SERIALIZERqXCELERYD_PREFETCH_MULTIPLIERqX DEFAULT_QUEUEqXRESULT_EXCHANGEq XBROADCAST_EXCHANGE_TYPEq XEVENT_ROUTING_KEYq XTASK_RESULT_EXPIRESq XCELERYBEAT_MAX_LOOP_INTERVALq XCELERYD_LOG_LEVELqXRESULT_BACKENDqXCELERYD_LOG_FILEqXEVENT_EXCHANGEqXCELERYBEAT_SCHEDULE_FILENAMEqX ALWAYS_EAGERqXCELERYD_ETA_SCHEDULERqXQUEUESqXCELERYD_LOG_FORMATqXCELERYD_LISTENERqX CELERYD_POOLqX LOG_LEVELSqXCELERY_SEND_TASK_ERROR_EMAILSqXCELERYD_MEDIATORqX ACKS_LATEqXDEFAULT_EXCHANGE_TYPEqXBROKER_CONNECTION_RETRYqXSTORE_ERRORS_EVEN_IF_IGNOREDqXconfiguration - celery.confq NXBROADCAST_EXCHANGEq!X EVENT_QUEUEq"XBROADCAST_QUEUEq#XBROKER_CONNECTION_MAX_RETRIESq$XDEFAULT_DELIVERY_MODEq%X TRACK_STARTEDq&XCELERYMON_LOG_LEVELq'XCELERYBEAT_LOG_FILEq(XBROKER_CONNECTION_TIMEOUTq)XEVENT_EXCHANGE_TYPEq*XCELERYMON_LOG_FILEq+XDEFAULT_ROUTING_KEYq,XMAX_CACHED_RESULTSq-XDEFAULT_EXCHANGEq.XCELERYD_CONCURRENCYq/XDEFAULT_RATE_LIMITq0XEVENT_SERIALIZERq1XCELERYBEAT_LOG_LEVELq2X IGNORE_RESULTq3XCELERY_CACHE_BACKENDq4X SEND_EVENTSq5XDISABLE_RATE_LIMITSq6XCELERYD_TASK_LOG_FORMATq7uUsubstitution_defsq8}q9Uparse_messagesq:]q;Ucurrent_sourceqKUnameidsq?}q@(hhhhhhh h h h h h h h h h hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh Uconfiguration-celery-confqAh!h!h"h"h#h#h$h$h%h%h&h&h'h'h(h(h)h)h*h*h+h+h,h,h-h-h.h.h/h/h0h0h1h1h2h2h3h3h4h4h5h5h6h6h7h7uUchildrenqB]qCcdocutils.nodes section qD)qE}qF(U rawsourceqGUUparentqHhUsourceqIcdocutils.nodes reprunicode qJXS/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.conf.rstqKqL}qMbUtagnameqNUsectionqOU attributesqP}qQ(UdupnamesqR]UclassesqS]UbackrefsqT]UidsqU]qVhAaUnamesqW]qXh auUlineqYKUdocumentqZhhB]q[(cdocutils.nodes title q\)q]}q^(hGXConfiguration - celery.confq_hHhEhIhLhNUtitleq`hP}qa(hR]hS]hT]hU]hW]uhYKhZhhB]qbcdocutils.nodes Text qcXConfiguration - celery.confqdqe}qf(hGh_hHh]ubaubcsphinx.addnodes index qg)qh}qi(hGUhHhEhIhLhNUindexqjhP}qk(hU]hT]hR]hS]hW]Uentries]ql(UsingleqmXQUEUES (built-in variable)hUtqnauhYNhZhhB]ubcsphinx.addnodes desc qo)qp}qq(hGUhHhEhIhLhNUdescqrhP}qs(UnoindexqtUdomainquXpyhU]hT]hR]hS]hW]UobjtypeqvXdataqwUdesctypeqxhwuhYNhZhhB]qy(csphinx.addnodes desc_signature qz)q{}q|(hGhhHhphIhLhNUdesc_signatureq}hP}q~(hU]qhaUmoduleqNhT]hR]hS]hW]qhaUfullnameqhUclassqUUfirstquhYKhZhhB]qcsphinx.addnodes desc_name q)q}q(hGhhHh{hIhLhNU desc_nameqhP}q(hR]hS]hT]hU]hW]uhYKhZhhB]qhcXQUEUESqq}q(hGUhHhubaubaubcsphinx.addnodes desc_content q)q}q(hGUhHhphIhLhNU desc_contentqhP}q(hR]hS]hT]hU]hW]uhYKhZhhB]qcdocutils.nodes paragraph q)q}q(hGXQueue name/options mapping.qhHhhIhLhNU paragraphqhP}q(hR]hS]hT]hU]hW]uhYKhZhhB]qhcXQueue name/options mapping.qq}q(hGhhHhubaubaubeubhg)q}q(hGUhHhEhIhLhNhjhP}q(hU]hT]hR]hS]hW]Uentries]q(hmX!DEFAULT_QUEUE (built-in variable)hUtqauhYNhZhhB]ubho)q}q(hGUhHhEhIhLhNhrhP}q(hthuXpyhU]hT]hR]hS]hW]hvXdataqhxhuhYNhZhhB]q(hz)q}q(hGhhHhhIhLhNh}hP}q(hU]qhahNhT]hR]hS]hW]qhahhhUhuhYK hZhhB]qh)q}q(hGhhHhhIhLhNhhP}q(hR]hS]hT]hU]hW]uhYK hZhhB]qhcX DEFAULT_QUEUEqq}q(hGUhHhubaubaubh)q}q(hGUhHhhIhLhNhhP}q(hR]hS]hT]hU]hW]uhYK hZhhB]qh)q}q(hGXName of the default queue.qhHhhIhLhNhhP}q(hR]hS]hT]hU]hW]uhYK hZhhB]qhcXName of the default queue.qq}q(hGhhHhubaubaubeubhg)q}q(hGUhHhEhIhLhNhjhP}q(hU]hT]hR]hS]hW]Uentries]q(hmX$DEFAULT_EXCHANGE (built-in variable)h.UtqauhYNhZhhB]ubho)q}q(hGUhHhEhIhLhNhrhP}q(hthuXpyhU]hT]hR]hS]hW]hvXdataqhxhuhYNhZhhB]q(hz)q}q(hGh.hHhhIhLhNh}hP}q(hU]qh.ahNhT]hR]hS]hW]qh.ahh.hUhuhYKhZhhB]qh)q}q(hGh.hHhhIhLhNhhP}q(hR]hS]hT]hU]hW]uhYKhZhhB]qhcXDEFAULT_EXCHANGEqօq}q(hGUhHhubaubaubh)q}q(hGUhHhhIhLhNhhP}q(hR]hS]hT]hU]hW]uhYKhZhhB]qh)q}q(hGXDefault exchange.qhHhhIhLhNhhP}q(hR]hS]hT]hU]hW]uhYKhZhhB]qhcXDefault exchange.q⅁q}q(hGhhHhubaubaubeubhg)q}q(hGUhHhEhIhLhNhjhP}q(hU]hT]hR]hS]hW]Uentries]q(hmX)DEFAULT_EXCHANGE_TYPE (built-in variable)hUtqauhYNhZhhB]ubho)q}q(hGUhHhEhIhLhNhrhP}q(hthuXpyhU]hT]hR]hS]hW]hvXdataqhxhuhYNhZhhB]q(hz)q}q(hGhhHhhIhLhNh}hP}q(hU]qhahNhT]hR]hS]hW]qhahhhUhuhYKhZhhB]qh)q}q(hGhhHhhIhLhNhhP}q(hR]hS]hT]hU]hW]uhYKhZhhB]qhcXDEFAULT_EXCHANGE_TYPEqq}q(hGUhHhubaubaubh)q}q(hGUhHhhIhLhNhhP}q(hR]hS]hT]hU]hW]uhYKhZhhB]qh)r}r(hGXDefault exchange type.rhHhhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXDefault exchange type.rr}r(hGjhHjubaubaubeubhg)r}r (hGUhHhEhIhLhNhjhP}r (hU]hT]hR]hS]hW]Uentries]r (hmX)DEFAULT_DELIVERY_MODE (built-in variable)h%Utr auhYNhZhhB]ubho)r }r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh%hHj hIhLhNh}hP}r(hU]rh%ahNhT]hR]hS]hW]rh%ahh%hUhuhYKhZhhB]rh)r}r(hGh%hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXDEFAULT_DELIVERY_MODErr}r(hGUhHjubaubaubh)r}r (hGUhHj hIhLhNhhP}r!(hR]hS]hT]hU]hW]uhYKhZhhB]r"h)r#}r$(hGX^Default delivery mode (``"persistent"`` or ``"non-persistent"``). Default is ``"persistent"``.hHjhIhLhNhhP}r%(hR]hS]hT]hU]hW]uhYKhZhhB]r&(hcXDefault delivery mode (r'r(}r)(hGXDefault delivery mode (hHj#ubcdocutils.nodes literal r*)r+}r,(hGX``"persistent"``hP}r-(hR]hS]hT]hU]hW]uhHj#hB]r.hcX "persistent"r/r0}r1(hGUhHj+ubahNUliteralr2ubhcX or r3r4}r5(hGX or hHj#ubj*)r6}r7(hGX``"non-persistent"``hP}r8(hR]hS]hT]hU]hW]uhHj#hB]r9hcX"non-persistent"r:r;}r<(hGUhHj6ubahNj2ubhcX). Default is r=r>}r?(hGX). Default is hHj#ubj*)r@}rA(hGX``"persistent"``hP}rB(hR]hS]hT]hU]hW]uhHj#hB]rChcX "persistent"rDrE}rF(hGUhHj@ubahNj2ubhcX.rG}rH(hGX.hHj#ubeubaubeubhg)rI}rJ(hGUhHhEhIhLhNhjhP}rK(hU]hT]hR]hS]hW]Uentries]rL(hmX'DEFAULT_ROUTING_KEY (built-in variable)h,UtrMauhYNhZhhB]ubho)rN}rO(hGUhHhEhIhLhNhrhP}rP(hthuXpyhU]hT]hR]hS]hW]hvXdatarQhxjQuhYNhZhhB]rR(hz)rS}rT(hGh,hHjNhIhLhNh}hP}rU(hU]rVh,ahNhT]hR]hS]hW]rWh,ahh,hUhuhYKhZhhB]rXh)rY}rZ(hGh,hHjShIhLhNhhP}r[(hR]hS]hT]hU]hW]uhYKhZhhB]r\hcXDEFAULT_ROUTING_KEYr]r^}r_(hGUhHjYubaubaubh)r`}ra(hGUhHjNhIhLhNhhP}rb(hR]hS]hT]hU]hW]uhYKhZhhB]rch)rd}re(hGX,Default routing key used when sending tasks.rfhHj`hIhLhNhhP}rg(hR]hS]hT]hU]hW]uhYKhZhhB]rhhcX,Default routing key used when sending tasks.rirj}rk(hGjfhHjdubaubaubeubhg)rl}rm(hGUhHhEhIhLhNhjhP}rn(hU]hT]hR]hS]hW]Uentries]ro(hmX-BROKER_CONNECTION_TIMEOUT (built-in variable)h)UtrpauhYNhZhhB]ubho)rq}rr(hGUhHhEhIhLhNhrhP}rs(hthuXpyhU]hT]hR]hS]hW]hvXdatarthxjtuhYNhZhhB]ru(hz)rv}rw(hGh)hHjqhIhLhNh}hP}rx(hU]ryh)ahNhT]hR]hS]hW]rzh)ahh)hUhuhYK"hZhhB]r{h)r|}r}(hGh)hHjvhIhLhNhhP}r~(hR]hS]hT]hU]hW]uhYK"hZhhB]rhcXBROKER_CONNECTION_TIMEOUTrr}r(hGUhHj|ubaubaubh)r}r(hGUhHjqhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK"hZhhB]rh)r}r(hGXVThe timeout in seconds before we give up establishing a connection to the AMQP server.rhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK hZhhB]rhcXVThe timeout in seconds before we give up establishing a connection to the AMQP server.rr}r(hGjhHjubaubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX#BROADCAST_QUEUE (built-in variable)h#UtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh#hHjhIhLhNh}hP}r(hU]rh#ahNhT]hR]hS]hW]rh#ahh#hUhuhYK*hZhhB]rh)r}r(hGh#hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK*hZhhB]rhcXBROADCAST_QUEUErr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK*hZhhB]r(h)r}r(hGXName prefix for the queue used when listening for broadcast messages. The workers hostname will be appended to the prefix to create the final queue name.rhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK%hZhhB]rhcXName prefix for the queue used when listening for broadcast messages. The workers hostname will be appended to the prefix to create the final queue name.rr}r(hGjhHjubaubh)r}r(hGXDefault is ``"celeryctl"``.hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK)hZhhB]r(hcX Default is rr}r(hGX Default is hHjubj*)r}r(hGX``"celeryctl"``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcX "celeryctl"rr}r(hGUhHjubahNj2ubhcX.r}r(hGX.hHjubeubeubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX&BROADCAST_EXCHANGE (built-in variable)h!UtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh!hHjhIhLhNh}hP}r(hU]rh!ahNhT]hR]hS]hW]rh!ahh!hUhuhYK0hZhhB]rh)r}r(hGh!hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK0hZhhB]rhcXBROADCAST_EXCHANGErr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK0hZhhB]r(h)r}r(hGX1Name of the exchange used for broadcast messages.rhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK-hZhhB]rhcX1Name of the exchange used for broadcast messages.rr}r(hGjhHjubaubh)r}r(hGXDefault is ``"celeryctl"``.hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK/hZhhB]r(hcX Default is rr}r(hGX Default is hHjubj*)r}r(hGX``"celeryctl"``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcX "celeryctl"rr}r(hGUhHjubahNj2ubhcX.r}r(hGX.hHjubeubeubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX+BROADCAST_EXCHANGE_TYPE (built-in variable)h UtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh hHjhIhLhNh}hP}r(hU]rh ahNhT]hR]hS]hW]rh ahh hUhuhYK4hZhhB]rh)r}r(hGh hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK4hZhhB]rhcXBROADCAST_EXCHANGE_TYPEr r }r (hGUhHjubaubaubh)r }r (hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK4hZhhB]rh)r}r(hGXCExchange type used for broadcast messages. Default is ``"fanout"``.hHj hIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK3hZhhB]r(hcX6Exchange type used for broadcast messages. Default is rr}r(hGX6Exchange type used for broadcast messages. Default is hHjubj*)r}r(hGX ``"fanout"``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcX"fanout"rr}r(hGUhHjubahNj2ubhcX.r}r(hGX.hHjubeubaubeubhg)r }r!(hGUhHhEhIhLhNhjhP}r"(hU]hT]hR]hS]hW]Uentries]r#(hmXEVENT_QUEUE (built-in variable)h"Utr$auhYNhZhhB]ubho)r%}r&(hGUhHhEhIhLhNhrhP}r'(hthuXpyhU]hT]hR]hS]hW]hvXdatar(hxj(uhYNhZhhB]r)(hz)r*}r+(hGh"hHj%hIhLhNh}hP}r,(hU]r-h"ahNhT]hR]hS]hW]r.h"ahh"hUhuhYK9hZhhB]r/h)r0}r1(hGh"hHj*hIhLhNhhP}r2(hR]hS]hT]hU]hW]uhYK9hZhhB]r3hcX EVENT_QUEUEr4r5}r6(hGUhHj0ubaubaubh)r7}r8(hGUhHj%hIhLhNhhP}r9(hR]hS]hT]hU]hW]uhYK9hZhhB]r:h)r;}r<(hGXNName of queue used to listen for event messages. Default is ``"celeryevent"``.hHj7hIhLhNhhP}r=(hR]hS]hT]hU]hW]uhYK7hZhhB]r>(hcX<Name of queue used to listen for event messages. Default is r?r@}rA(hGX<Name of queue used to listen for event messages. Default is hHj;ubj*)rB}rC(hGX``"celeryevent"``hP}rD(hR]hS]hT]hU]hW]uhHj;hB]rEhcX "celeryevent"rFrG}rH(hGUhHjBubahNj2ubhcX.rI}rJ(hGX.hHj;ubeubaubeubhg)rK}rL(hGUhHhEhIhLhNhjhP}rM(hU]hT]hR]hS]hW]Uentries]rN(hmX"EVENT_EXCHANGE (built-in variable)hUtrOauhYNhZhhB]ubho)rP}rQ(hGUhHhEhIhLhNhrhP}rR(hthuXpyhU]hT]hR]hS]hW]hvXdatarShxjSuhYNhZhhB]rT(hz)rU}rV(hGhhHjPhIhLhNh}hP}rW(hU]rXhahNhT]hR]hS]hW]rYhahhhUhuhYK=hZhhB]rZh)r[}r\(hGhhHjUhIhLhNhhP}r](hR]hS]hT]hU]hW]uhYK=hZhhB]r^hcXEVENT_EXCHANGEr_r`}ra(hGUhHj[ubaubaubh)rb}rc(hGUhHjPhIhLhNhhP}rd(hR]hS]hT]hU]hW]uhYK=hZhhB]reh)rf}rg(hGXCExchange used to send event messages. Default is ``"celeryevent"``.hHjbhIhLhNhhP}rh(hR]hS]hT]hU]hW]uhYK(hGXIf set to ``True``, errors in tasks will be sent to admins by e-mail. If unset, it will send the e-mails if ``settings.DEBUG`` is ``True``.hHj9hIhLhNhhP}r?(hR]hS]hT]hU]hW]uhYKRhZhhB]r@(hcX If set to rArB}rC(hGX If set to hHj=ubj*)rD}rE(hGX``True``hP}rF(hR]hS]hT]hU]hW]uhHj=hB]rGhcXTruerHrI}rJ(hGUhHjDubahNj2ubhcXZ, errors in tasks will be sent to admins by e-mail. If unset, it will send the e-mails if rKrL}rM(hGXZ, errors in tasks will be sent to admins by e-mail. If unset, it will send the e-mails if hHj=ubj*)rN}rO(hGX``settings.DEBUG``hP}rP(hR]hS]hT]hU]hW]uhHj=hB]rQhcXsettings.DEBUGrRrS}rT(hGUhHjNubahNj2ubhcX is rUrV}rW(hGX is hHj=ubj*)rX}rY(hGX``True``hP}rZ(hR]hS]hT]hU]hW]uhHj=hB]r[hcXTruer\r]}r^(hGUhHjXubahNj2ubhcX.r_}r`(hGX.hHj=ubeubaubeubhg)ra}rb(hGUhHhEhIhLhNhjhP}rc(hU]hT]hR]hS]hW]Uentries]rd(hmX ALWAYS_EAGER (built-in variable)hUtreauhYNhZhhB]ubho)rf}rg(hGUhHhEhIhLhNhrhP}rh(hthuXpyhU]hT]hR]hS]hW]hvXdatarihxjiuhYNhZhhB]rj(hz)rk}rl(hGhhHjfhIhLhNh}hP}rm(hU]rnhahNhT]hR]hS]hW]rohahhhUhuhYKXhZhhB]rph)rq}rr(hGhhHjkhIhLhNhhP}rs(hR]hS]hT]hU]hW]uhYKXhZhhB]rthcX ALWAYS_EAGERrurv}rw(hGUhHjqubaubaubh)rx}ry(hGUhHjfhIhLhNhhP}rz(hR]hS]hT]hU]hW]uhYKXhZhhB]r{h)r|}r}(hGX6Always execute tasks locally, don't send to the queue.r~hHjxhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKWhZhhB]rhcX6Always execute tasks locally, don't send to the queue.rr}r(hGj~hHj|ubaubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX'TASK_RESULT_EXPIRES (built-in variable)h UtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh hHjhIhLhNh}hP}r(hU]rh ahNhT]hR]hS]hW]rh ahh hUhuhYK\hZhhB]rh)r}r(hGh hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK\hZhhB]rhcXTASK_RESULT_EXPIRESrr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK\hZhhB]rh)r}r(hGX&Task tombstone expire time in seconds.rhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK[hZhhB]rhcX&Task tombstone expire time in seconds.rr}r(hGjhHjubaubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX!IGNORE_RESULT (built-in variable)h3UtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh3hHjhIhLhNh}hP}r(hU]rh3ahNhT]hR]hS]hW]rh3ahh3hUhuhYK`hZhhB]rh)r}r(hGh3hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK`hZhhB]rhcX IGNORE_RESULTrr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK`hZhhB]rh)r}r(hGXCIf enabled, the default behavior will be to not store task results.rhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK_hZhhB]rhcXCIf enabled, the default behavior will be to not store task results.rr}r(hGjhHjubaubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX!TRACK_STARTED (built-in variable)h&UtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh&hHjhIhLhNh}hP}r(hU]rh&ahNhT]hR]hS]hW]rh&ahh&hUhuhYKehZhhB]rh)r}r(hGh&hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKehZhhB]rhcX TRACK_STARTEDrr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKehZhhB]rh)r}r(hGXjIf enabled, the default behavior will be to track when tasks starts by storing the :const:`STARTED` state.hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKchZhhB]r(hcXSIf enabled, the default behavior will be to track when tasks starts by storing the rr}r(hGXSIf enabled, the default behavior will be to track when tasks starts by storing the hHjubcsphinx.addnodes pending_xref r)r}r(hGX:const:`STARTED`rhHjhIhLhNU pending_xrefrhP}r(UreftypeXconstUrefwarnrU reftargetrXSTARTEDU refdomainXpyrhU]hT]U refexplicithR]hS]hW]UrefdocrXreference/celery.confrUpy:classrNU py:modulerNuhYKchB]rj*)r}r(hGjhP}r(hR]hS]r(UxrefrjXpy-constrehT]hU]hW]uhHjhB]rhcXSTARTEDrr}r(hGUhHjubahNj2ubaubhcX state.rr}r(hGX state.hHjubeubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r (hU]hT]hR]hS]hW]Uentries]r (hmXACKS_LATE (built-in variable)hUtr auhYNhZhhB]ubho)r }r (hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGhhHj hIhLhNh}hP}r(hU]rhahNhT]hR]hS]hW]rhahhhUhuhYKjhZhhB]rh)r}r(hGhhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKjhZhhB]rhcX ACKS_LATErr}r(hGUhHjubaubaubh)r}r(hGUhHj hIhLhNhhP}r (hR]hS]hT]hU]hW]uhYKjhZhhB]r!h)r"}r#(hGXaIf enabled, the default behavior will be to acknowledge task messages after the task is executed.r$hHjhIhLhNhhP}r%(hR]hS]hT]hU]hW]uhYKhhZhhB]r&hcXaIf enabled, the default behavior will be to acknowledge task messages after the task is executed.r'r(}r)(hGj$hHj"ubaubaubeubhg)r*}r+(hGUhHhEhIhLhNhjhP}r,(hU]hT]hR]hS]hW]Uentries]r-(hmX0STORE_ERRORS_EVEN_IF_IGNORED (built-in variable)hUtr.auhYNhZhhB]ubho)r/}r0(hGUhHhEhIhLhNhrhP}r1(hthuXpyhU]hT]hR]hS]hW]hvXdatar2hxj2uhYNhZhhB]r3(hz)r4}r5(hGhhHj/hIhLhNh}hP}r6(hU]r7hahNhT]hR]hS]hW]r8hahhhUhuhYKohZhhB]r9h)r:}r;(hGhhHj4hIhLhNhhP}r<(hR]hS]hT]hU]hW]uhYKohZhhB]r=hcXSTORE_ERRORS_EVEN_IF_IGNOREDr>r?}r@(hGUhHj:ubaubaubh)rA}rB(hGUhHj/hIhLhNhhP}rC(hR]hS]hT]hU]hW]uhYKohZhhB]rDh)rE}rF(hGXUIf enabled, task errors will be stored even though ``Task.ignore_result`` is enabled.hHjAhIhLhNhhP}rG(hR]hS]hT]hU]hW]uhYKmhZhhB]rH(hcX3If enabled, task errors will be stored even though rIrJ}rK(hGX3If enabled, task errors will be stored even though hHjEubj*)rL}rM(hGX``Task.ignore_result``hP}rN(hR]hS]hT]hU]hW]uhHjEhB]rOhcXTask.ignore_resultrPrQ}rR(hGUhHjLubahNj2ubhcX is enabled.rSrT}rU(hGX is enabled.hHjEubeubaubeubhg)rV}rW(hGUhHhEhIhLhNhjhP}rX(hU]hT]hR]hS]hW]Uentries]rY(hmX&MAX_CACHED_RESULTS (built-in variable)h-UtrZauhYNhZhhB]ubho)r[}r\(hGUhHhEhIhLhNhrhP}r](hthuXpyhU]hT]hR]hS]hW]hvXdatar^hxj^uhYNhZhhB]r_(hz)r`}ra(hGh-hHj[hIhLhNh}hP}rb(hU]rch-ahNhT]hR]hS]hW]rdh-ahh-hUhuhYKthZhhB]reh)rf}rg(hGh-hHj`hIhLhNhhP}rh(hR]hS]hT]hU]hW]uhYKthZhhB]rihcXMAX_CACHED_RESULTSrjrk}rl(hGUhHjfubaubaubh)rm}rn(hGUhHj[hIhLhNhhP}ro(hR]hS]hT]hU]hW]uhYKthZhhB]rph)rq}rr(hGXRTotal number of results to store before results are evicted from the result cache.rshHjmhIhLhNhhP}rt(hR]hS]hT]hU]hW]uhYKrhZhhB]ruhcXRTotal number of results to store before results are evicted from the result cache.rvrw}rx(hGjshHjqubaubaubeubhg)ry}rz(hGUhHhEhIhLhNhjhP}r{(hU]hT]hR]hS]hW]Uentries]r|(hmX+BROKER_CONNECTION_RETRY (built-in variable)hUtr}auhYNhZhhB]ubho)r~}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGhhHj~hIhLhNh}hP}r(hU]rhahNhT]hR]hS]hW]rhahhhUhuhYKyhZhhB]rh)r}r(hGhhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKyhZhhB]rhcXBROKER_CONNECTION_RETRYrr}r(hGUhHjubaubaubh)r}r(hGUhHj~hIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKyhZhhB]rh)r}r(hGXQAutomatically try to re-establish the connection to the AMQP broker if it's lost.rhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKwhZhhB]rhcXQAutomatically try to re-establish the connection to the AMQP broker if it's lost.rr}r(hGjhHjubaubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX1BROKER_CONNECTION_MAX_RETRIES (built-in variable)h$UtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh$hHjhIhLhNh}hP}r(hU]rh$ahNhT]hR]hS]hW]rh$ahh$hUhuhYKhZhhB]rh)r}r(hGh$hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXBROKER_CONNECTION_MAX_RETRIESrr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(h)r}r(hGXWMaximum number of retries before we give up re-establishing a connection to the broker.rhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYK|hZhhB]rhcXWMaximum number of retries before we give up re-establishing a connection to the broker.rr}r(hGjhHjubaubh)r}r(hGX;If this is set to ``0`` or ``None``, we will retry forever.hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(hcXIf this is set to rr}r(hGXIf this is set to hHjubj*)r}r(hGX``0``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcX0r}r(hGUhHjubahNj2ubhcX or rr}r(hGX or hHjubj*)r}r(hGX``None``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcXNonerr}r(hGUhHjubahNj2ubhcX, we will retry forever.rr}r(hGX, we will retry forever.hHjubeubh)r}r(hGXDefault is ``100`` retries.hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(hcX Default is rr}r(hGX Default is hHjubj*)r}r(hGX``100``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcX100rr}r(hGUhHjubahNj2ubhcX retries.rr}r(hGX retries.hHjubeubeubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX#TASK_SERIALIZER (built-in variable)hUtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGhhHjhIhLhNh}hP}r(hU]rhahNhT]hR]hS]hW]rhahhhUhuhYKhZhhB]rh)r}r(hGhhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXTASK_SERIALIZERrr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(h)r}r(hGXA string identifying the default serialization method to use. Can be ``pickle`` (default), ``json``, ``yaml``, or any custom serialization methods that have been registered with :mod:`carrot.serialization.registry`.hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(hcXEA string identifying the default serialization method to use. Can be r r }r (hGXEA string identifying the default serialization method to use. Can be hHjubj*)r }r (hGX ``pickle``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcXpicklerr}r(hGUhHj ubahNj2ubhcX (default), rr}r(hGX (default), hHjubj*)r}r(hGX``json``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcXjsonrr}r(hGUhHjubahNj2ubhcX, rr}r(hGX, hHjubj*)r }r!(hGX``yaml``hP}r"(hR]hS]hT]hU]hW]uhHjhB]r#hcXyamlr$r%}r&(hGUhHj ubahNj2ubhcXE, or any custom serialization methods that have been registered with r'r(}r)(hGXE, or any custom serialization methods that have been registered with hHjubj)r*}r+(hGX$:mod:`carrot.serialization.registry`r,hHjhIhLhNjhP}r-(UreftypeXmodjjXcarrot.serialization.registryU refdomainXpyr.hU]hT]U refexplicithR]hS]hW]jjjNjNuhYKhB]r/j*)r0}r1(hGj,hP}r2(hR]hS]r3(jj.Xpy-modr4ehT]hU]hW]uhHj*hB]r5hcXcarrot.serialization.registryr6r7}r8(hGUhHj0ubahNj2ubaubhcX.r9}r:(hGX.hHjubeubh)r;}r<(hGXDefault is ``pickle``.hHjhIhLhNhhP}r=(hR]hS]hT]hU]hW]uhYKhZhhB]r>(hcX Default is r?r@}rA(hGX Default is hHj;ubj*)rB}rC(hGX ``pickle``hP}rD(hR]hS]hT]hU]hW]uhHj;hB]rEhcXpicklerFrG}rH(hGUhHjBubahNj2ubhcX.rI}rJ(hGX.hHj;ubeubeubeubhg)rK}rL(hGUhHhEhIhLhNhjhP}rM(hU]hT]hR]hS]hW]Uentries]rN(hmX"RESULT_BACKEND (built-in variable)hUtrOauhYNhZhhB]ubho)rP}rQ(hGUhHhEhIhLhNhrhP}rR(hthuXpyhU]hT]hR]hS]hW]hvXdatarShxjSuhYNhZhhB]rT(hz)rU}rV(hGhhHjPhIhLhNh}hP}rW(hU]rXhahNhT]hR]hS]hW]rYhahhhUhuhYKhZhhB]rZh)r[}r\(hGhhHjUhIhLhNhhP}r](hR]hS]hT]hU]hW]uhYKhZhhB]r^hcXRESULT_BACKENDr_r`}ra(hGUhHj[ubaubaubh)rb}rc(hGUhHjPhIhLhNhhP}rd(hR]hS]hT]hU]hW]uhYKhZhhB]reh)rf}rg(hGX4The backend used to store task results (tombstones).rhhHjbhIhLhNhhP}ri(hR]hS]hT]hU]hW]uhYKhZhhB]rjhcX4The backend used to store task results (tombstones).rkrl}rm(hGjhhHjfubaubaubeubhg)rn}ro(hGUhHhEhIhLhNhjhP}rp(hU]hT]hR]hS]hW]Uentries]rq(hmX(CELERY_CACHE_BACKEND (built-in variable)h4UtrrauhYNhZhhB]ubho)rs}rt(hGUhHhEhIhLhNhrhP}ru(hthuXpyhU]hT]hR]hS]hW]hvXdatarvhxjvuhYNhZhhB]rw(hz)rx}ry(hGh4hHjshIhLhNh}hP}rz(hU]r{h4ahNhT]hR]hS]hW]r|h4ahh4hUhuhYKhZhhB]r}h)r~}r(hGh4hHjxhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXCELERY_CACHE_BACKENDrr}r(hGUhHj~ubaubaubh)r}r(hGUhHjshIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rh)r}r(hGXtUse a custom cache backend for celery. If not set the django-global cache backend in ``CACHE_BACKEND`` will be used.hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(hcXUUse a custom cache backend for celery. If not set the django-global cache backend in rr}r(hGXUUse a custom cache backend for celery. If not set the django-global cache backend in hHjubj*)r}r(hGX``CACHE_BACKEND``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcX CACHE_BACKENDrr}r(hGUhHjubahNj2ubhcX will be used.rr}r(hGX will be used.hHjubeubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmXSEND_EVENTS (built-in variable)h5UtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh5hHjhIhLhNh}hP}r(hU]rh5ahNhT]hR]hS]hW]rh5ahh5hUhuhYKhZhhB]rh)r}r(hGh5hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcX SEND_EVENTSrr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rh)r}r(hGXkIf set, celery will send events that can be captured by monitors like ``celerymon``. Default is: ``False``.hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(hcXFIf set, celery will send events that can be captured by monitors like rr}r(hGXFIf set, celery will send events that can be captured by monitors like hHjubj*)r}r(hGX ``celerymon``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcX celerymonrr}r(hGUhHjubahNj2ubhcX. Default is: rr}r(hGX. Default is: hHjubj*)r}r(hGX ``False``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcXFalserr}r(hGUhHjubahNj2ubhcX.r}r(hGX.hHjubeubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX&DEFAULT_RATE_LIMIT (built-in variable)h0UtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh0hHjhIhLhNh}hP}r(hU]rh0ahNhT]hR]hS]hW]rh0ahh0hUhuhYKhZhhB]rh)r}r(hGh0hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXDEFAULT_RATE_LIMITrr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rh)r}r(hGXkThe default rate limit applied to all tasks which doesn't have a custom rate limit defined. (Default: None)rhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXkThe default rate limit applied to all tasks which doesn't have a custom rate limit defined. (Default: None)rr}r(hGjhHjubaubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX'DISABLE_RATE_LIMITS (built-in variable)h6UtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh6hHjhIhLhNh}hP}r(hU]rh6ahNhT]hR]hS]hW]rh6ahh6hUhuhYKhZhhB]rh)r}r(hGh6hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXDISABLE_RATE_LIMITSrr}r(hGUhHjubaubaubh)r }r (hGUhHjhIhLhNhhP}r (hR]hS]hT]hU]hW]uhYKhZhhB]r h)r }r(hGX`If ``True`` all rate limits will be disabled and all tasks will be executed as soon as possible.hHj hIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(hcXIf rr}r(hGXIf hHj ubj*)r}r(hGX``True``hP}r(hR]hS]hT]hU]hW]uhHj hB]rhcXTruerr}r(hGUhHjubahNj2ubhcXU all rate limits will be disabled and all tasks will be executed as soon as possible.rr}r(hGXU all rate limits will be disabled and all tasks will be executed as soon as possible.hHj ubeubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r (hU]hT]hR]hS]hW]Uentries]r!(hmX(CELERYBEAT_LOG_LEVEL (built-in variable)h2Utr"auhYNhZhhB]ubho)r#}r$(hGUhHhEhIhLhNhrhP}r%(hthuXpyhU]hT]hR]hS]hW]hvXdatar&hxj&uhYNhZhhB]r'(hz)r(}r)(hGh2hHj#hIhLhNh}hP}r*(hU]r+h2ahNhT]hR]hS]hW]r,h2ahh2hUhuhYKhZhhB]r-h)r.}r/(hGh2hHj(hIhLhNhhP}r0(hR]hS]hT]hU]hW]uhYKhZhhB]r1hcXCELERYBEAT_LOG_LEVELr2r3}r4(hGUhHj.ubaubaubh)r5}r6(hGUhHj#hIhLhNhhP}r7(hR]hS]hT]hU]hW]uhYKhZhhB]r8h)r9}r:(hGX7Default log level for celerybeat. Default is: ``INFO``.hHj5hIhLhNhhP}r;(hR]hS]hT]hU]hW]uhYKhZhhB]r<(hcX.Default log level for celerybeat. Default is: r=r>}r?(hGX.Default log level for celerybeat. Default is: hHj9ubj*)r@}rA(hGX``INFO``hP}rB(hR]hS]hT]hU]hW]uhHj9hB]rChcXINFOrDrE}rF(hGUhHj@ubahNj2ubhcX.rG}rH(hGX.hHj9ubeubaubeubhg)rI}rJ(hGUhHhEhIhLhNhjhP}rK(hU]hT]hR]hS]hW]Uentries]rL(hmX'CELERYBEAT_LOG_FILE (built-in variable)h(UtrMauhYNhZhhB]ubho)rN}rO(hGUhHhEhIhLhNhrhP}rP(hthuXpyhU]hT]hR]hS]hW]hvXdatarQhxjQuhYNhZhhB]rR(hz)rS}rT(hGh(hHjNhIhLhNh}hP}rU(hU]rVh(ahNhT]hR]hS]hW]rWh(ahh(hUhuhYKhZhhB]rXh)rY}rZ(hGh(hHjShIhLhNhhP}r[(hR]hS]hT]hU]hW]uhYKhZhhB]r\hcXCELERYBEAT_LOG_FILEr]r^}r_(hGUhHjYubaubaubh)r`}ra(hGUhHjNhIhLhNhhP}rb(hR]hS]hT]hU]hW]uhYKhZhhB]rch)rd}re(hGX>Default log file for celerybeat. Default is: ``None`` (stderr)hHj`hIhLhNhhP}rf(hR]hS]hT]hU]hW]uhYKhZhhB]rg(hcX-Default log file for celerybeat. Default is: rhri}rj(hGX-Default log file for celerybeat. Default is: hHjdubj*)rk}rl(hGX``None``hP}rm(hR]hS]hT]hU]hW]uhHjdhB]rnhcXNonerorp}rq(hGUhHjkubahNj2ubhcX (stderr)rrrs}rt(hGX (stderr)hHjdubeubaubeubhg)ru}rv(hGUhHhEhIhLhNhjhP}rw(hU]hT]hR]hS]hW]Uentries]rx(hmX0CELERYBEAT_SCHEDULE_FILENAME (built-in variable)hUtryauhYNhZhhB]ubho)rz}r{(hGUhHhEhIhLhNhrhP}r|(hthuXpyhU]hT]hR]hS]hW]hvXdatar}hxj}uhYNhZhhB]r~(hz)r}r(hGhhHjzhIhLhNh}hP}r(hU]rhahNhT]hR]hS]hW]rhahhhUhuhYKhZhhB]rh)r}r(hGhhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXCELERYBEAT_SCHEDULE_FILENAMErr}r(hGUhHjubaubaubh)r}r(hGUhHjzhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rh)r}r(hGXSName of the persistent schedule database file. Default is: ``celerybeat-schedule``.hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(hcX;Name of the persistent schedule database file. Default is: rr}r(hGX;Name of the persistent schedule database file. Default is: hHjubj*)r}r(hGX``celerybeat-schedule``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcXcelerybeat-schedulerr}r(hGUhHjubahNj2ubhcX.r}r(hGX.hHjubeubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX0CELERYBEAT_MAX_LOOP_INTERVAL (built-in variable)h UtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh hHjhIhLhNh}hP}r(hU]rh ahNhT]hR]hS]hW]rh ahh hUhuhYKhZhhB]rh)r}r(hGh hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXCELERYBEAT_MAX_LOOP_INTERVALrr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rh)r}r(hGXThe maximum number of seconds celerybeat is allowed to sleep between checking the schedule. The default is 5 minutes, which means celerybeat can only sleep a maximum of 5 minutes after checking the schedule run-times for a periodic task to apply. If you change the run_times of periodic tasks at run-time, you may consider lowering this value for changes to take effect faster (A value of 5 minutes, means the changes will take effect in 5 minutes at maximum).rhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXThe maximum number of seconds celerybeat is allowed to sleep between checking the schedule. The default is 5 minutes, which means celerybeat can only sleep a maximum of 5 minutes after checking the schedule run-times for a periodic task to apply. If you change the run_times of periodic tasks at run-time, you may consider lowering this value for changes to take effect faster (A value of 5 minutes, means the changes will take effect in 5 minutes at maximum).rr}r(hGjhHjubaubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX'CELERYMON_LOG_LEVEL (built-in variable)h'UtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh'hHjhIhLhNh}hP}r(hU]rh'ahNhT]hR]hS]hW]rh'ahh'hUhuhYKhZhhB]rh)r}r(hGh'hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXCELERYMON_LOG_LEVELrr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rh)r}r(hGX6Default log level for celerymon. Default is: ``INFO``.hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(hcX-Default log level for celerymon. Default is: rr}r(hGX-Default log level for celerymon. Default is: hHjubj*)r}r(hGX``INFO``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcXINFOrr}r(hGUhHjubahNj2ubhcX.r}r(hGX.hHjubeubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX&CELERYMON_LOG_FILE (built-in variable)h+UtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh+hHjhIhLhNh}hP}r(hU]rh+ahNhT]hR]hS]hW]rh+ahh+hUhuhYKhZhhB]rh)r}r(hGh+hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXCELERYMON_LOG_FILErr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rh)r }r (hGX=Default log file for celerymon. Default is: ``None`` (stderr)hHjhIhLhNhhP}r (hR]hS]hT]hU]hW]uhYKhZhhB]r (hcX,Default log file for celerymon. Default is: r r}r(hGX,Default log file for celerymon. Default is: hHj ubj*)r}r(hGX``None``hP}r(hR]hS]hT]hU]hW]uhHj hB]rhcXNonerr}r(hGUhHjubahNj2ubhcX (stderr)rr}r(hGX (stderr)hHj ubeubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmXLOG_LEVELS (built-in variable)hUtrauhYNhZhhB]ubho)r}r (hGUhHhEhIhLhNhrhP}r!(hthuXpyhU]hT]hR]hS]hW]hvXdatar"hxj"uhYNhZhhB]r#(hz)r$}r%(hGhhHjhIhLhNh}hP}r&(hU]r'hahNhT]hR]hS]hW]r(hahhhUhuhYKhZhhB]r)h)r*}r+(hGhhHj$hIhLhNhhP}r,(hR]hS]hT]hU]hW]uhYKhZhhB]r-hcX LOG_LEVELSr.r/}r0(hGUhHj*ubaubaubh)r1}r2(hGUhHjhIhLhNhhP}r3(hR]hS]hT]hU]hW]uhYKhZhhB]r4h)r5}r6(hGX>Mapping of log level names to :mod:`logging` module constants.hHj1hIhLhNhhP}r7(hR]hS]hT]hU]hW]uhYKhZhhB]r8(hcXMapping of log level names to r9r:}r;(hGXMapping of log level names to hHj5ubj)r<}r=(hGX:mod:`logging`r>hHj5hIhLhNjhP}r?(UreftypeXmodjjXloggingU refdomainXpyr@hU]hT]U refexplicithR]hS]hW]jjjNjNuhYKhB]rAj*)rB}rC(hGj>hP}rD(hR]hS]rE(jj@Xpy-modrFehT]hU]hW]uhHj<hB]rGhcXloggingrHrI}rJ(hGUhHjBubahNj2ubaubhcX module constants.rKrL}rM(hGX module constants.hHj5ubeubaubeubhg)rN}rO(hGUhHhEhIhLhNhjhP}rP(hU]hT]hR]hS]hW]Uentries]rQ(hmX&CELERYD_LOG_FORMAT (built-in variable)hUtrRauhYNhZhhB]ubho)rS}rT(hGUhHhEhIhLhNhrhP}rU(hthuXpyhU]hT]hR]hS]hW]hvXdatarVhxjVuhYNhZhhB]rW(hz)rX}rY(hGhhHjShIhLhNh}hP}rZ(hU]r[hahNhT]hR]hS]hW]r\hahhhUhuhYKhZhhB]r]h)r^}r_(hGhhHjXhIhLhNhhP}r`(hR]hS]hT]hU]hW]uhYKhZhhB]rahcXCELERYD_LOG_FORMATrbrc}rd(hGUhHj^ubaubaubh)re}rf(hGUhHjShIhLhNhhP}rg(hR]hS]hT]hU]hW]uhYKhZhhB]rhh)ri}rj(hGX#The format to use for log messages.rkhHjehIhLhNhhP}rl(hR]hS]hT]hU]hW]uhYKhZhhB]rmhcX#The format to use for log messages.rnro}rp(hGjkhHjiubaubaubeubhg)rq}rr(hGUhHhEhIhLhNhjhP}rs(hU]hT]hR]hS]hW]Uentries]rt(hmX+CELERYD_TASK_LOG_FORMAT (built-in variable)h7UtruauhYNhZhhB]ubho)rv}rw(hGUhHhEhIhLhNhrhP}rx(hthuXpyhU]hT]hR]hS]hW]hvXdataryhxjyuhYNhZhhB]rz(hz)r{}r|(hGh7hHjvhIhLhNh}hP}r}(hU]r~h7ahNhT]hR]hS]hW]rh7ahh7hUhuhYKhZhhB]rh)r}r(hGh7hHj{hIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXCELERYD_TASK_LOG_FORMATrr}r(hGUhHjubaubaubh)r}r(hGUhHjvhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rh)r}r(hGX(The format to use for task log messages.rhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcX(The format to use for task log messages.rr}r(hGjhHjubaubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX$CELERYD_LOG_FILE (built-in variable)hUtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGhhHjhIhLhNh}hP}r(hU]rhahNhT]hR]hS]hW]rhahhhUhuhYKhZhhB]rh)r}r(hGhhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXCELERYD_LOG_FILErr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rh)r}r(hGX>Filename of the daemon log file. Default is: ``None`` (stderr)hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(hcX-Filename of the daemon log file. Default is: rr}r(hGX-Filename of the daemon log file. Default is: hHjubj*)r}r(hGX``None``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcXNonerr}r(hGUhHjubahNj2ubhcX (stderr)rr}r(hGX (stderr)hHjubeubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX%CELERYD_LOG_LEVEL (built-in variable)hUtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGhhHjhIhLhNh}hP}r(hU]rhahNhT]hR]hS]hW]rhahhhUhuhYKhZhhB]rh)r}r(hGhhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXCELERYD_LOG_LEVELrr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rh)r}r(hGX)Default log level for daemons. (``WARN``)hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(hcX Default log level for daemons. (rr}r(hGX Default log level for daemons. (hHjubj*)r}r(hGX``WARN``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcXWARNrr}r(hGUhHjubahNj2ubhcX)r}r(hGX)hHjubeubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX'CELERYD_CONCURRENCY (built-in variable)h/UtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGh/hHjhIhLhNh}hP}r(hU]rh/ahNhT]hR]hS]hW]rh/ahh/hUhuhYKhZhhB]rh)r}r(hGh/hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXCELERYD_CONCURRENCYrr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rh)r}r(hGXrThe number of concurrent worker processes. If set to ``0``, the total number of available CPUs/cores will be used.hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r (hcX5The number of concurrent worker processes. If set to r r }r (hGX5The number of concurrent worker processes. If set to hHjubj*)r }r(hGX``0``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcX0r}r(hGUhHj ubahNj2ubhcX8, the total number of available CPUs/cores will be used.rr}r(hGX8, the total number of available CPUs/cores will be used.hHjubeubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX/CELERYD_PREFETCH_MULTIPLIER (built-in variable)hUtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r }r!(hGhhHjhIhLhNh}hP}r"(hU]r#hahNhT]hR]hS]hW]r$hahhhUhuhYKhZhhB]r%h)r&}r'(hGhhHj hIhLhNhhP}r((hR]hS]hT]hU]hW]uhYKhZhhB]r)hcXCELERYD_PREFETCH_MULTIPLIERr*r+}r,(hGUhHj&ubaubaubh)r-}r.(hGUhHjhIhLhNhhP}r/(hR]hS]hT]hU]hW]uhYKhZhhB]r0h)r1}r2(hGXqThe number of concurrent workers is multipled by this number to yield the wanted AMQP QoS message prefetch count.r3hHj-hIhLhNhhP}r4(hR]hS]hT]hU]hW]uhYKhZhhB]r5hcXqThe number of concurrent workers is multipled by this number to yield the wanted AMQP QoS message prefetch count.r6r7}r8(hGj3hHj1ubaubaubeubhg)r9}r:(hGUhHhEhIhLhNhjhP}r;(hU]hT]hR]hS]hW]Uentries]r<(hmX CELERYD_POOL (built-in variable)hUtr=auhYNhZhhB]ubho)r>}r?(hGUhHhEhIhLhNhrhP}r@(hthuXpyhU]hT]hR]hS]hW]hvXdatarAhxjAuhYNhZhhB]rB(hz)rC}rD(hGhhHj>hIhLhNh}hP}rE(hU]rFhahNhT]hR]hS]hW]rGhahhhUhuhYKhZhhB]rHh)rI}rJ(hGhhHjChIhLhNhhP}rK(hR]hS]hT]hU]hW]uhYKhZhhB]rLhcX CELERYD_POOLrMrN}rO(hGUhHjIubaubaubh)rP}rQ(hGUhHj>hIhLhNhhP}rR(hR]hS]hT]hU]hW]uhYKhZhhB]rSh)rT}rU(hGX]Name of the task pool class used by the worker. Default is ``"celery.worker.pool.TaskPool"``.hHjPhIhLhNhhP}rV(hR]hS]hT]hU]hW]uhYKhZhhB]rW(hcX;Name of the task pool class used by the worker. Default is rXrY}rZ(hGX;Name of the task pool class used by the worker. Default is hHjTubj*)r[}r\(hGX!``"celery.worker.pool.TaskPool"``hP}r](hR]hS]hT]hU]hW]uhHjThB]r^hcX"celery.worker.pool.TaskPool"r_r`}ra(hGUhHj[ubahNj2ubhcX.rb}rc(hGX.hHjTubeubaubeubhg)rd}re(hGUhHhEhIhLhNhjhP}rf(hU]hT]hR]hS]hW]Uentries]rg(hmX$CELERYD_LISTENER (built-in variable)hUtrhauhYNhZhhB]ubho)ri}rj(hGUhHhEhIhLhNhrhP}rk(hthuXpyhU]hT]hR]hS]hW]hvXdatarlhxjluhYNhZhhB]rm(hz)rn}ro(hGhhHjihIhLhNh}hP}rp(hU]rqhahNhT]hR]hS]hW]rrhahhhUhuhYKhZhhB]rsh)rt}ru(hGhhHjnhIhLhNhhP}rv(hR]hS]hT]hU]hW]uhYKhZhhB]rwhcXCELERYD_LISTENERrxry}rz(hGUhHjtubaubaubh)r{}r|(hGUhHjihIhLhNhhP}r}(hR]hS]hT]hU]hW]uhYKhZhhB]r~h)r}r(hGXfName of the listener class used by the worker. Default is ``"celery.worker.listener.CarrotListener"``.hHj{hIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(hcX:Name of the listener class used by the worker. Default is rr}r(hGX:Name of the listener class used by the worker. Default is hHjubj*)r}r(hGX+``"celery.worker.listener.CarrotListener"``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcX'"celery.worker.listener.CarrotListener"rr}r(hGUhHjubahNj2ubhcX.r}r(hGX.hHjubeubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX$CELERYD_MEDIATOR (built-in variable)hUtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGhhHjhIhLhNh}hP}r(hU]rhahNhT]hR]hS]hW]rhahhhUhuhYKhZhhB]rh)r}r(hGhhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXCELERYD_MEDIATORrr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rh)r}r(hGXcName of the mediator class used by the worker. Default is ``"celery.worker.controllers.Mediator"``.hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(hcX:Name of the mediator class used by the worker. Default is rr}r(hGX:Name of the mediator class used by the worker. Default is hHjubj*)r}r(hGX(``"celery.worker.controllers.Mediator"``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcX$"celery.worker.controllers.Mediator"rr}r(hGUhHjubahNj2ubhcX.r}r(hGX.hHjubeubaubeubhg)r}r(hGUhHhEhIhLhNhjhP}r(hU]hT]hR]hS]hW]Uentries]r(hmX)CELERYD_ETA_SCHEDULER (built-in variable)hUtrauhYNhZhhB]ubho)r}r(hGUhHhEhIhLhNhrhP}r(hthuXpyhU]hT]hR]hS]hW]hvXdatarhxjuhYNhZhhB]r(hz)r}r(hGhhHjhIhLhNh}hP}r(hU]rhahNhT]hR]hS]hW]rhahhhUhuhYKhZhhB]rh)r}r(hGhhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rhcXCELERYD_ETA_SCHEDULERrr}r(hGUhHjubaubaubh)r}r(hGUhHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]rh)r}r(hGXrName of the ETA scheduler class used by the worker. Default is ``"celery.worker.controllers.ScheduleController"``.hHjhIhLhNhhP}r(hR]hS]hT]hU]hW]uhYKhZhhB]r(hcX?Name of the ETA scheduler class used by the worker. Default is rr}r(hGX?Name of the ETA scheduler class used by the worker. Default is hHjubj*)r}r(hGX2``"celery.worker.controllers.ScheduleController"``hP}r(hR]hS]hT]hU]hW]uhHjhB]rhcX."celery.worker.controllers.ScheduleController"rr}r(hGUhHjubahNj2ubhcX.r}r(hGX.hHjubeubaubeubeubahGUU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rhZhU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r (Ufootnote_backlinksr KUrecord_dependenciesr NU rfc_base_urlr Uhttp://tools.ietf.org/html/r U tracebackr Upep_referencesr NUstrip_commentsr NU toc_backlinksr Uentryr U language_coder Uenr U datestampr NU report_levelr KU _destinationr NU halt_levelr KU strip_classesr Nh`NUerror_encoding_error_handlerr Ubackslashreplacer Udebugr NUembed_stylesheetr Uoutput_encoding_error_handlerr Ustrictr U sectnum_xformr KUdump_transformsr NU docinfo_xformr KUwarning_streamr NUpep_file_url_templater Upep-%04dr Uexit_status_levelr KUconfigr NUstrict_visitorr NUcloak_email_addressesr Utrim_footnote_reference_spacer! Uenvr" NUdump_pseudo_xmlr# NUexpose_internalsr$ NUsectsubtitle_xformr% U source_linkr& NUrfc_referencesr' NUoutput_encodingr( Uutf-8r) U source_urlr* NUinput_encodingr+ U utf-8-sigr, U_disable_configr- NU id_prefixr. UU tab_widthr/ KUerror_encodingr0 UUTF-8r1 U_sourcer2 US/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.conf.rstr3 Ugettext_compactr4 U generatorr5 NUdump_internalsr6 NU smart_quotesr7 U pep_base_urlr8 Uhttp://www.python.org/dev/peps/r9 Usyntax_highlightr: Ulongr; Uinput_encoding_error_handlerr< j Uauto_id_prefixr= Uidr> Udoctitle_xformr? Ustrip_elements_with_classesr@ NU _config_filesrA ]Ufile_insertion_enabledrB U raw_enabledrC KU dump_settingsrD NubUsymbol_footnote_startrE KUidsrF }rG (hjhj hhh jhAhEh jh jh jh jhjhjUhjhjUhjkhjhh{hjXhjnhjChj$hj,hjhjhhhjhj4h#jh!jh"j*hjh$jh%jh&jh'jh(jSh)jvh*jh+jh,jSh-j`h.hh/jh0jh1jh2j(h3jh4jxh5jh6jh7j{uUsubstitution_namesrH }rI hNhZhP}rJ (hR]hU]hT]UsourcehLhS]hW]uU footnotesrK ]rL UrefidsrM }rN ub.PKXDDy6363Hcelery-1.0-archived/.doctrees/reference/celery.loaders.djangoapp.doctreecdocutils.nodes document q)q}q(U nametypesq}q(X(django loader - celery.loaders.djangoappqNX,celery.loaders.djangoapp.find_related_moduleqXcelery.loaders.djangoapp.LoaderqX2celery.loaders.djangoapp.Loader.read_configurationq X,celery.loaders.djangoapp.Loader.on_task_initq X.celery.loaders.djangoapp.Loader.on_worker_initq X%celery.loaders.djangoapp.autodiscoverq uUsubstitution_defsq }qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hU&django-loader-celery-loaders-djangoappqhhhhh h h h h h h h uUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qX`/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.loaders.djangoapp.rstq q!}q"bUtagnameq#Usectionq$U attributesq%}q&(Udupnamesq']Uclassesq(]Ubackrefsq)]Uidsq*]q+(Xmodule-celery.loaders.djangoappq,heUnamesq-]q.hauUlineq/KUdocumentq0hh]q1(cdocutils.nodes title q2)q3}q4(hX(Django Loader - celery.loaders.djangoappq5hhhh!h#Utitleq6h%}q7(h']h(]h)]h*]h-]uh/Kh0hh]q8cdocutils.nodes Text q9X(Django Loader - celery.loaders.djangoappq:q;}q<(hh5hh3ubaubcsphinx.addnodes index q=)q>}q?(hUhhhU q@h#UindexqAh%}qB(h*]h)]h']h(]h-]Uentries]qC(UsingleqDX!celery.loaders.djangoapp (module)Xmodule-celery.loaders.djangoappUtqEauh/Kh0hh]ubh=)qF}qG(hUhhhNh#hAh%}qH(h*]h)]h']h(]h-]Uentries]qI(hDX*Loader (class in celery.loaders.djangoapp)hUtqJauh/Nh0hh]ubcsphinx.addnodes desc qK)qL}qM(hUhhhNh#UdescqNh%}qO(UnoindexqPUdomainqQXpyh*]h)]h']h(]h-]UobjtypeqRXclassqSUdesctypeqThSuh/Nh0hh]qU(csphinx.addnodes desc_signature qV)qW}qX(hXLoaderqYhhLhU qZh#Udesc_signatureq[h%}q\(h*]q]haUmoduleq^hXcelery.loaders.djangoappq_q`}qabh)]h']h(]h-]qbhaUfullnameqchYUclassqdUUfirstqeuh/Nh0hh]qf(csphinx.addnodes desc_annotation qg)qh}qi(hXclass hhWhhZh#Udesc_annotationqjh%}qk(h']h(]h)]h*]h-]uh/Nh0hh]qlh9Xclass qmqn}qo(hUhhhubaubcsphinx.addnodes desc_addname qp)qq}qr(hXcelery.loaders.djangoapp.hhWhhZh#U desc_addnameqsh%}qt(h']h(]h)]h*]h-]uh/Nh0hh]quh9Xcelery.loaders.djangoapp.qvqw}qx(hUhhqubaubcsphinx.addnodes desc_name qy)qz}q{(hhYhhWhhZh#U desc_nameq|h%}q}(h']h(]h)]h*]h-]uh/Nh0hh]q~h9XLoaderqq}q(hUhhzubaubeubcsphinx.addnodes desc_content q)q}q(hUhhLhhZh#U desc_contentqh%}q(h']h(]h)]h*]h-]uh/Nh0hh]q(cdocutils.nodes paragraph q)q}q(hXThe Django loader.qhhhX}/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/djangoapp.py:docstring of celery.loaders.djangoapp.Loaderqh#U paragraphqh%}q(h']h(]h)]h*]h-]uh/Kh0hh]qh9XThe Django loader.qq}q(hhhhubaubh=)q}q(hUhhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/djangoapp.py:docstring of celery.loaders.djangoapp.Loader.on_task_initqh#hAh%}q(h*]h)]h']h(]h-]Uentries]q(hDX7on_task_init() (celery.loaders.djangoapp.Loader method)h Utqauh/Nh0hh]ubhK)q}q(hUhhhhh#hNh%}q(hPhQXpyh*]h)]h']h(]h-]hRXmethodqhThuh/Nh0hh]q(hV)q}q(hX"Loader.on_task_init(task_id, task)hhhhZh#h[h%}q(h*]qh ah^hXcelery.loaders.djangoappqq}qbh)]h']h(]h-]qh ahcXLoader.on_task_inithdhYheuh/Nh0hh]q(hy)q}q(hX on_task_inithhhhZh#h|h%}q(h']h(]h)]h*]h-]uh/Nh0hh]qh9X on_task_initqq}q(hUhhubaubcsphinx.addnodes desc_parameterlist q)q}q(hUhhhhZh#Udesc_parameterlistqh%}q(h']h(]h)]h*]h-]uh/Nh0hh]q(csphinx.addnodes desc_parameter q)q}q(hXtask_idh%}q(h']h(]h)]h*]h-]uhhh]qh9Xtask_idqq}q(hUhhubah#Udesc_parameterqubh)q}q(hXtaskh%}q(h']h(]h)]h*]h-]uhhh]qh9Xtaskqq}q(hUhhubah#hubeubeubh)q}q(hUhhhhZh#hh%}q(h']h(]h)]h*]h-]uh/Nh0hh]q(h)q}q(hX0This method is called before a task is executed.qhhhhh#hh%}q(h']h(]h)]h*]h-]uh/Kh0hh]qh9X0This method is called before a task is executed.qͅq}q(hhhhubaubh)q}q(hX[Does everything necessary for Django to work in a long-living, multiprocessing environment.qhhhhh#hh%}q(h']h(]h)]h*]h-]uh/Kh0hh]qh9X[Does everything necessary for Django to work in a long-living, multiprocessing environment.qՅq}q(hhhhubaubeubeubh=)q}q(hUhhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/djangoapp.py:docstring of celery.loaders.djangoapp.Loader.on_worker_initqh#hAh%}q(h*]h)]h']h(]h-]Uentries]q(hDX9on_worker_init() (celery.loaders.djangoapp.Loader method)h Utqauh/Nh0hh]ubhK)q}q(hUhhhhh#hNh%}q(hPhQXpyh*]h)]h']h(]h-]hRXmethodqhThuh/Nh0hh]q(hV)q}q(hXLoader.on_worker_init()hhhhZh#h[h%}q(h*]qh ah^hXcelery.loaders.djangoappq煁q}qbh)]h']h(]h-]qh ahcXLoader.on_worker_inithdhYheuh/Nh0hh]q(hy)q}q(hXon_worker_inithhhhZh#h|h%}q(h']h(]h)]h*]h-]uh/Nh0hh]qh9Xon_worker_initqq}q(hUhhubaubh)q}q(hUhhhhZh#hh%}q(h']h(]h)]h*]h-]uh/Nh0hh]ubeubh)q}q(hUhhhhZh#hh%}q(h']h(]h)]h*]h-]uh/Nh0hh]q(h)q}q(hXCalled when the worker starts.qhhhhh#hh%}q(h']h(]h)]h*]h-]uh/Kh0hh]qh9XCalled when the worker starts.qr}r(hhhhubaubh)r}r(hX`Automatically discovers any ``tasks.py`` files in the applications listed in ``INSTALLED_APPS``.hhhhh#hh%}r(h']h(]h)]h*]h-]uh/Kh0hh]r(h9XAutomatically discovers any rr}r(hXAutomatically discovers any hjubcdocutils.nodes literal r )r }r (hX ``tasks.py``h%}r (h']h(]h)]h*]h-]uhjh]r h9Xtasks.pyrr}r(hUhj ubah#Uliteralrubh9X% files in the applications listed in rr}r(hX% files in the applications listed in hjubj )r}r(hX``INSTALLED_APPS``h%}r(h']h(]h)]h*]h-]uhjh]rh9XINSTALLED_APPSrr}r(hUhjubah#jubh9X.r}r(hX.hjubeubeubeubh=)r}r(hUhhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/djangoapp.py:docstring of celery.loaders.djangoapp.Loader.read_configurationr h#hAh%}r!(h*]h)]h']h(]h-]Uentries]r"(hDX=read_configuration() (celery.loaders.djangoapp.Loader method)h Utr#auh/Nh0hh]ubhK)r$}r%(hUhhhj h#hNh%}r&(hPhQXpyh*]h)]h']h(]h-]hRXmethodr'hTj'uh/Nh0hh]r((hV)r)}r*(hXLoader.read_configuration()r+hj$hhZh#h[h%}r,(h*]r-h ah^hXcelery.loaders.djangoappr.r/}r0bh)]h']h(]h-]r1h ahcXLoader.read_configurationhdhYheuh/Nh0hh]r2(hy)r3}r4(hXread_configurationhj)hhZh#h|h%}r5(h']h(]h)]h*]h-]uh/Nh0hh]r6h9Xread_configurationr7r8}r9(hUhj3ubaubh)r:}r;(hUhj)hhZh#hh%}r<(h']h(]h)]h*]h-]uh/Nh0hh]ubeubh)r=}r>(hUhj$hhZh#hh%}r?(h']h(]h)]h*]h-]uh/Nh0hh]r@h)rA}rB(hX(Load configuration from Django settings.rChj=hj h#hh%}rD(h']h(]h)]h*]h-]uh/Kh0hh]rEh9X(Load configuration from Django settings.rFrG}rH(hjChjAubaubaubeubeubeubh=)rI}rJ(hUhhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/djangoapp.py:docstring of celery.loaders.djangoapp.autodiscoverrKh#hAh%}rL(h*]h)]h']h(]h-]Uentries]rM(hDX3autodiscover() (in module celery.loaders.djangoapp)h UtrNauh/Nh0hh]ubhK)rO}rP(hUhhhjKh#hNh%}rQ(hPhQXpyh*]h)]h']h(]h-]hRXfunctionrRhTjRuh/Nh0hh]rS(hV)rT}rU(hXautodiscover()hjOhhZh#h[h%}rV(h*]rWh ah^hXcelery.loaders.djangoapprXrY}rZbh)]h']h(]h-]r[h ahcX autodiscoverr\hdUheuh/Nh0hh]r](hp)r^}r_(hXcelery.loaders.djangoapp.hjThhZh#hsh%}r`(h']h(]h)]h*]h-]uh/Nh0hh]rah9Xcelery.loaders.djangoapp.rbrc}rd(hUhj^ubaubhy)re}rf(hj\hjThhZh#h|h%}rg(h']h(]h)]h*]h-]uh/Nh0hh]rhh9X autodiscoverrirj}rk(hUhjeubaubh)rl}rm(hUhjThhZh#hh%}rn(h']h(]h)]h*]h-]uh/Nh0hh]ubeubh)ro}rp(hUhjOhhZh#hh%}rq(h']h(]h)]h*]h-]uh/Nh0hh]rrh)rs}rt(hX@Include tasks for all applications in :setting:`INSTALLED_APPS`.hjohjKh#hh%}ru(h']h(]h)]h*]h-]uh/Kh0hh]rv(h9X&Include tasks for all applications in rwrx}ry(hX&Include tasks for all applications in hjsubcsphinx.addnodes pending_xref rz)r{}r|(hX:setting:`INSTALLED_APPS`r}hjshNh#U pending_xrefr~h%}r(UreftypeXsettingUrefwarnrU reftargetrXINSTALLED_APPSU refdomainXstdrh*]h)]U refexplicith']h(]h-]UrefdocrX"reference/celery.loaders.djangoappruh/Nh]rj )r}r(hj}h%}r(h']h(]r(UxrefrjX std-settingreh)]h*]h-]uhj{h]rh9XINSTALLED_APPSrr}r(hUhjubah#jubaubh9X.r}r(hX.hjsubeubaubeubh=)r}r(hUhhhX/var/build/user_builds/celery/checkouts/1.0-archived/celery/loaders/djangoapp.py:docstring of celery.loaders.djangoapp.find_related_modulerh#hAh%}r(h*]h)]h']h(]h-]Uentries]r(hDX:find_related_module() (in module celery.loaders.djangoapp)hUtrauh/Nh0hh]ubhK)r}r(hUhhhjh#hNh%}r(hPhQXpyh*]h)]h']h(]h-]hRXfunctionrhTjuh/Nh0hh]r(hV)r}r(hX&find_related_module(app, related_name)hjhhZh#h[h%}r(h*]rhah^hXcelery.loaders.djangoapprr}rbh)]h']h(]h-]rhahcXfind_related_modulerhdUheuh/Nh0hh]r(hp)r}r(hXcelery.loaders.djangoapp.hjhhZh#hsh%}r(h']h(]h)]h*]h-]uh/Nh0hh]rh9Xcelery.loaders.djangoapp.rr}r(hUhjubaubhy)r}r(hjhjhhZh#h|h%}r(h']h(]h)]h*]h-]uh/Nh0hh]rh9Xfind_related_modulerr}r(hUhjubaubh)r}r(hUhjhhZh#hh%}r(h']h(]h)]h*]h-]uh/Nh0hh]r(h)r}r(hXapph%}r(h']h(]h)]h*]h-]uhjh]rh9Xapprr}r(hUhjubah#hubh)r}r(hX related_nameh%}r(h']h(]h)]h*]h-]uhjh]rh9X related_namerr}r(hUhjubah#hubeubeubh)r}r(hUhjhhZh#hh%}r(h']h(]h)]h*]h-]uh/Nh0hh]rh)r}r(hXZGiven an application name and a module name, tries to find that module in the application.rhjhjh#hh%}r(h']h(]h)]h*]h-]uh/Kh0hh]rh9XZGiven an application name and a module name, tries to find that module in the application.rr}r(hjhjubaubaubeubeubahUU transformerrNU footnote_refsr}rUrefnamesr}rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh0hU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh6NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templater Upep-%04dr Uexit_status_levelr KUconfigr NUstrict_visitorr NUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcer U`/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.loaders.djangoapp.rstr!Ugettext_compactr"U generatorr#NUdump_internalsr$NU smart_quotesr%U pep_base_urlr&Uhttp://www.python.org/dev/peps/r'Usyntax_highlightr(Ulongr)Uinput_encoding_error_handlerr*jUauto_id_prefixr+Uidr,Udoctitle_xformr-Ustrip_elements_with_classesr.NU _config_filesr/]Ufile_insertion_enabledr0U raw_enabledr1KU dump_settingsr2NubUsymbol_footnote_startr3KUidsr4}r5(hhhjhhWh j)h hh,cdocutils.nodes target r6)r7}r8(hUhhhh@h#Utargetr9h%}r:(h']h*]r;h,ah)]Uismodh(]h-]uh/Kh0hh]ubh hh jTuUsubstitution_namesr<}r=h#h0h%}r>(h']h*]h)]Usourceh!h(]h-]uU footnotesr?]r@UrefidsrA}rBub.PKXDDVEcelery-1.0-archived/.doctrees/reference/celery.bin.celerybeat.doctreecdocutils.nodes document q)q}q(U nametypesq}qX3celery periodic task server - celery.bin.celerybeatqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qX]/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.bin.celerybeat.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U1celery-periodic-task-server-celery-bin-celerybeatq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX3Celery Periodic Task Server - celery.bin.celerybeatq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X3Celery Periodic Task Server - celery.bin.celerybeatq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/X>autodoc: failed to import module u'celery.bin.celerybeat'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/bin/celerybeat.py", line 26, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqU]/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.bin.celerybeat.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDXyyBcelery-1.0-archived/.doctrees/reference/celery.bin.camqadm.doctreecdocutils.nodes document q)q}q(U nametypesq}qX9caqmadm: amqp api command-line shell - celery.bin.camqadmqNsUsubstitution_defsq}qUparse_messagesq ]q cdocutils.nodes system_message q )q }q (U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXZ/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.bin.camqadm.rstqq}qbUtagnameqUsectionqU attributesq}q(Udupnamesq]Uclassesq]Ubackrefsq]Uidsq]q U6caqmadm-amqp-api-command-line-shell-celery-bin-camqadmq!aUnamesq"]q#hauUlineq$KUdocumentq%hUchildrenq&]q'cdocutils.nodes title q()q)}q*(hX9caqmadm: AMQP API Command-line Shell - celery.bin.camqadmq+hhhhhUtitleq,h}q-(h]h]h]h]h"]uh$Kh%hh&]q.cdocutils.nodes Text q/X9caqmadm: AMQP API Command-line Shell - celery.bin.camqadmq0q1}q2(hh+hh)ubaubaubhhhUsystem_messageq3h}q4(h]UlevelKh]h]Usourcehh]h"]UlineKUtypeUWARNINGq5uh$Nh%hh&]q6cdocutils.nodes paragraph q7)q8}q9(hUh}q:(h]h]h]h]h"]uhh h&]q;h/Xautodoc: failed to import module u'celery.bin.camqadm'; the following exception was raised: Traceback (most recent call last): File "/home/docs/checkouts/readthedocs.org/user_builds/celery/envs/1.0-archived/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object __import__(self.modname) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/bin/camqadm.py", line 17, in from celery.utils import info File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/utils/info.py", line 3, in from celery import conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/conf.py", line 20, in settings = load_settings() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 106, in load_settings _settings = current_loader().conf File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 98, in current_loader _loader = detect_loader()() File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 50, in detect_loader return get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 43, in get_loader_cls _loader_cache[loader] = _get_loader_cls(loader) File "/var/build/user_builds/celery/checkouts/1.0-archived/docs/../celery/loaders/__init__.py", line 36, in _get_loader_cls loader_module = importlib.import_module(loader_module_name) File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module __import__(name) ImportError: No module named djcelery.loaders q(hUhh8ubahU paragraphq?ubaubaUcurrent_sourceq@NU decorationqANUautofootnote_startqBKUnameidsqC}qDhh!sh&]qEhahUU transformerqFNU footnote_refsqG}qHUrefnamesqI}qJUsymbol_footnotesqK]qLUautofootnote_refsqM]qNUsymbol_footnote_refsqO]qPU citationsqQ]qRh%hU current_lineqSNUtransform_messagesqT]qUUreporterqVNUid_startqWKU autofootnotesqX]qYU citation_refsqZ}q[Uindirect_targetsq\]q]Usettingsq^(cdocutils.frontend Values q_oq`}qa(Ufootnote_backlinksqbKUrecord_dependenciesqcNU rfc_base_urlqdUhttp://tools.ietf.org/html/qeU tracebackqfUpep_referencesqgNUstrip_commentsqhNU toc_backlinksqiUentryqjU language_codeqkUenqlU datestampqmNU report_levelqnKU _destinationqoNU halt_levelqpKU strip_classesqqNh,NUerror_encoding_error_handlerqrUbackslashreplaceqsUdebugqtNUembed_stylesheetquUoutput_encoding_error_handlerqvUstrictqwU sectnum_xformqxKUdump_transformsqyNU docinfo_xformqzKUwarning_streamq{NUpep_file_url_templateq|Upep-%04dq}Uexit_status_levelq~KUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUZ/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.bin.camqadm.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhwUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qh!hsUsubstitution_namesq}qhh%h}q(h]h]h]Usourcehh]h"]uU footnotesq]qUrefidsq}qub.PKXDDW(4(4=celery-1.0-archived/.doctrees/reference/celery.states.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xcelery.states.FAILUREqXcelery.states.READY_STATESqXcelery.states.PENDINGqXcelery.states.ALL_STATESq Xtask states - celery.statesq NXcelery.states.EXCEPTION_STATESq Xcelery.states.SUCCESSq Xcelery.states.RETRYq Xcelery.states.STARTEDqXcelery.states.UNREADY_STATESquUsubstitution_defsq}qUparse_messagesq]qUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hhhhhhh h h Utask-states-celery-statesqh h h h h h hhhhuUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentq hUsourceq!cdocutils.nodes reprunicode q"XU/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.states.rstq#q$}q%bUtagnameq&Usectionq'U attributesq(}q)(Udupnamesq*]Uclassesq+]Ubackrefsq,]Uidsq-]q.(Xmodule-celery.statesq/heUnamesq0]q1h auUlineq2KUdocumentq3hh]q4(cdocutils.nodes title q5)q6}q7(hXTask States - celery.statesq8h hh!h$h&Utitleq9h(}q:(h*]h+]h,]h-]h0]uh2Kh3hh]q;cdocutils.nodes Text q}q?(hh8h h6ubaubcsphinx.addnodes index q@)qA}qB(hUh hh!U qCh&UindexqDh(}qE(h-]h,]h*]h+]h0]Uentries]qF(UsingleqGXcelery.states (module)Xmodule-celery.statesUtqHauh2Kh3hh]ubcdocutils.nodes paragraph qI)qJ}qK(hX Task StatesqLh hh!X`/var/build/user_builds/celery/checkouts/1.0-archived/celery/states.py:docstring of celery.statesqMh&U paragraphqNh(}qO(h*]h+]h,]h-]h0]uh2Kh3hh]qPh}r?(hUh hh!Nh&hDh(}r@(h-]h,]h*]h+]h0]Uentries]rA(hGXRETRY (in module celery.states)Xcelery.states.RETRYUtrBauh2Nh3hh]ubhY)rC}rD(hUh hh!Nh&h\h(}rE(h^h_Xpyh-]h,]h*]h+]h0]h`XdatarFhbjFuh2Nh3hh]rG(hd)rH}rI(hXRETRYrJh jCh!U rKh&hhh(}rL(h-]hkh"X celery.statesrMrN}rObh,]h*]h+]h0]hnjJhoUhpuh2Nh3hh]rP(hr)rQ}rR(hXcelery.states.h jHh!jKh&huh(}rS(h*]h+]h,]h-]h0]uh2Nh3hh]rThUenr?U datestampr@NU report_levelrAKU _destinationrBNU halt_levelrCKU strip_classesrDNh9NUerror_encoding_error_handlerrEUbackslashreplacerFUdebugrGNUembed_stylesheetrHUoutput_encoding_error_handlerrIUstrictrJU sectnum_xformrKKUdump_transformsrLNU docinfo_xformrMKUwarning_streamrNNUpep_file_url_templaterOUpep-%04drPUexit_status_levelrQKUconfigrRNUstrict_visitorrSNUcloak_email_addressesrTUtrim_footnote_reference_spacerUUenvrVNUdump_pseudo_xmlrWNUexpose_internalsrXNUsectsubtitle_xformrYU source_linkrZNUrfc_referencesr[NUoutput_encodingr\Uutf-8r]U source_urlr^NUinput_encodingr_U utf-8-sigr`U_disable_configraNU id_prefixrbUU tab_widthrcKUerror_encodingrdUUTF-8reU_sourcerfUU/var/build/user_builds/celery/checkouts/1.0-archived/docs/reference/celery.states.rstrgUgettext_compactrhU generatorriNUdump_internalsrjNU smart_quotesrkU pep_base_urlrlUhttp://www.python.org/dev/peps/rmUsyntax_highlightrnUlongroUinput_encoding_error_handlerrpjJUauto_id_prefixrqUidrrUdoctitle_xformrsUstrip_elements_with_classesrtNU _config_filesru]rvUfile_insertion_enabledrwU raw_enabledrxKU dump_settingsryNubUsymbol_footnote_startrzKUidsr{}r|(hhhjwhheh jh jh hhhh jhhhjh/cdocutils.nodes target r})r~}r(hUh hh!hCh&Utargetrh(}r(h*]h-]rh/ah,]Uismodh+]h0]uh2Kh3hh]ubuUsubstitution_namesr}rh&h3h(}r(h*]h-]h,]Usourceh$h+]h0]uU footnotesr]rUrefidsr}rub.PKXDDsN:celery-1.0-archived/.doctrees/cookbook/daemonizing.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xlaunchd (os x)qNX supervisordqXrunning celeryd as a daemonqNXcontrib/debian/init.d/q Xcontrib/supervisord/q Xstart-stop-daemonq NX contrib/mac/q uUsubstitution_defsq }qUparse_messagesq]qcdocutils.nodes system_message q)q}q(U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUU referencedqKhh)q}q(hUhhUsourceqcdocutils.nodes reprunicode qXR/var/build/user_builds/celery/checkouts/1.0-archived/docs/cookbook/daemonizing.rstqq}q bUtagnameq!Usectionq"U attributesq#}q$(Udupnamesq%]Uclassesq&]Ubackrefsq']Uidsq(]q)Urunning-celeryd-as-a-daemonq*aUnamesq+]q,hauUlineq-KUdocumentq.hUchildrenq/]q0(cdocutils.nodes title q1)q2}q3(hXRunning celeryd as a daemonq4hhhhh!Utitleq5h#}q6(h%]h&]h']h(]h+]uh-Kh.hh/]q7cdocutils.nodes Text q8XRunning celeryd as a daemonq9q:}q;(hh4hh2ubaubcdocutils.nodes paragraph q<)q=}q>(hXVCelery does not daemonize itself, please use one of the following daemonization tools.q?hhhhh!U paragraphq@h#}qA(h%]h&]h']h(]h+]uh-Kh.hh/]qBh8XVCelery does not daemonize itself, please use one of the following daemonization tools.qCqD}qE(hh?hh=ubaubh)qF}qG(hUhhhhh!h"h#}qH(h%]h&]h']h(]qIUstart-stop-daemonqJah+]qKh auh-K h.hh/]qL(h1)qM}qN(hXstart-stop-daemonqOhhFhhh!h5h#}qP(h%]h&]h']h(]h+]uh-K h.hh/]qQh8Xstart-stop-daemonqRqS}qT(hhOhhMubaubcdocutils.nodes bullet_list qU)qV}qW(hUhhFhhh!U bullet_listqXh#}qY(UbulletqZX*h(]h']h%]h&]h+]uh-K h.hh/]q[cdocutils.nodes list_item q\)q]}q^(hX`contrib/debian/init.d/`_ hhVhhh!U list_itemq_h#}q`(h%]h&]h']h(]h+]uh-Nh.hh/]qah<)qb}qc(hX`contrib/debian/init.d/`_qdhh]hhh!h@h#}qe(h%]h&]h']h(]h+]uh-K h/]qfcdocutils.nodes reference qg)qh}qi(hhdUresolvedqjKhhbh!U referenceqkh#}ql(UnameXcontrib/debian/init.d/qmUrefuriqnX8http://github.com/ask/celery/tree/master/contrib/debian/qoh(]h']h%]h&]h+]uh/]qph8Xcontrib/debian/init.d/qqqr}qs(hUhhhubaubaubaubaubcdocutils.nodes target qt)qu}qv(hXZ.. _`contrib/debian/init.d/`: http://github.com/ask/celery/tree/master/contrib/debian/hKhhFhhh!Utargetqwh#}qx(hnhoh(]qyUcontrib-debian-init-dqzah']h%]h&]h+]q{h auh-Kh.hh/]ubeubhh)q|}q}(hUhhhhh!h"h#}q~(h%]h&]h']h(]qU launchd-os-xqah+]qhauh-Kh.hh/]q(h1)q}q(hXlaunchd (OS X)qhh|hhh!h5h#}q(h%]h&]h']h(]h+]uh-Kh.hh/]qh8Xlaunchd (OS X)qq}q(hhhhubaubhU)q}q(hUhh|hhh!hXh#}q(hZX*h(]h']h%]h&]h+]uh-Kh.hh/]qh\)q}q(hX`contrib/mac/`_ hhhhh!h_h#}q(h%]h&]h']h(]h+]uh-Nh.hh/]qh<)q}q(hX`contrib/mac/`_qhhhhh!h@h#}q(h%]h&]h']h(]h+]uh-Kh/]qhg)q}q(hhhjKhhh!hkh#}q(UnameX contrib/mac/qhnX5http://github.com/ask/celery/tree/master/contrib/mac/qh(]h']h%]h&]h+]uh/]qh8X contrib/mac/qq}q(hUhhubaubaubaubaubht)q}q(hXM.. _`contrib/mac/`: http://github.com/ask/celery/tree/master/contrib/mac/hKhh|hhh!hwh#}q(hnhh(]qU contrib-macqah']h%]h&]h+]qh auh-K h.hh/]ubeubeubhhh!h"h#}q(h%]qX supervisordqah&]h']h(]qU supervisordqah+]uh-Kh.hh/]q(h1)q}q(hX`supervisord`_qhhhhh!h5h#}q(h%]h&]h']h(]h+]uh-Kh.hh/]qhg)q}q(hhhjKhhh!hkh#}q(UnameX supervisordqhnXhttp://supervisord.org/qh(]h']h%]h&]h+]uh/]qh8X supervisordqq}q(hUhhubaubaubhU)q}q(hUhhhhh!hXh#}q(hZX*h(]h']h%]h&]h+]uh-Kh.hh/]qh\)q}q(hX`contrib/supervisord/`_ hhhhh!h_h#}q(h%]h&]h']h(]h+]uh-Nh.hh/]qh<)q}q(hX`contrib/supervisord/`_qhhhhh!h@h#}q(h%]h&]h']h(]h+]uh-Kh/]qhg)q}q(hhhjKhhh!hkh#}q(UnameXcontrib/supervisord/qhnX=http://github.com/ask/celery/tree/master/contrib/supervisord/qh(]h']h%]h&]h+]uh/]qh8Xcontrib/supervisord/q΅q}q(hUhhubaubaubaubaubht)q}q(hX].. _`contrib/supervisord/`: http://github.com/ask/celery/tree/master/contrib/supervisord/hKhhhhh!hwh#}q(hnhh(]qUcontrib-supervisordqah']h%]h&]h+]qh auh-Kh.hh/]ubht)q}q(hX*.. _`supervisord`: http://supervisord.org/hKhhhhh!hwh#}q(hnhh(]qUid1qah']h%]h&]h+]qhauh-Kh.hh/]ubeubhhh!Usystem_messageqh#}q(h%]UlevelKh(]h']qhaUsourcehh&]h+]UlineKUtypeUINFOquh-Kh.hh/]qh<)q}q(hUh#}q(h%]h&]h']h(]h+]uhhh/]qh8X.Duplicate implicit target name: "supervisord".q慁q}q(hUhhubah!h@ubaubaUcurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hhhhhh*h hzh hh hJh huh/]qhahUU transformerqNU footnote_refsq}qUrefnamesq}q(hm]qhhah]qhah]qhah]qhauUsymbol_footnotesq]qUautofootnote_refsq]qUsymbol_footnote_refsq]qU citationsq]qh.hU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr ]r Usettingsr (cdocutils.frontend Values r or }r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh5NUerror_encoding_error_handlerrUbackslashreplacer Udebugr!NUembed_stylesheetr"Uoutput_encoding_error_handlerr#Ustrictr$U sectnum_xformr%KUdump_transformsr&NU docinfo_xformr'KUwarning_streamr(NUpep_file_url_templater)Upep-%04dr*Uexit_status_levelr+KUconfigr,NUstrict_visitorr-NUcloak_email_addressesr.Utrim_footnote_reference_spacer/Uenvr0NUdump_pseudo_xmlr1NUexpose_internalsr2NUsectsubtitle_xformr3U source_linkr4NUrfc_referencesr5NUoutput_encodingr6Uutf-8r7U source_urlr8NUinput_encodingr9U utf-8-sigr:U_disable_configr;NU id_prefixr<UU tab_widthr=KUerror_encodingr>UUTF-8r?U_sourcer@UR/var/build/user_builds/celery/checkouts/1.0-archived/docs/cookbook/daemonizing.rstrAUgettext_compactrBU generatorrCNUdump_internalsrDNU smart_quotesrEU pep_base_urlrFUhttp://www.python.org/dev/peps/rGUsyntax_highlightrHUlongrIUinput_encoding_error_handlerrJj$Uauto_id_prefixrKUidrLUdoctitle_xformrMUstrip_elements_with_classesrNNU _config_filesrO]Ufile_insertion_enabledrPU raw_enabledrQKU dump_settingsrRNubUsymbol_footnote_startrSKUidsrT}rU(hhhh|hhhhhhhzhuhJhFh*huUsubstitution_namesrV}rWh!h.h#}rX(h%]h(]h']Usourcehh&]h+]uU footnotesrY]rZUrefidsr[}r\ub.PKXDD**4celery-1.0-archived/.doctrees/cookbook/index.doctreecdocutils.nodes document q)q}q(U nametypesq}qXcookbookqNsUsubstitution_defsq}qUparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startq KUnameidsq}qhUcookbookqsUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXL/var/build/user_builds/celery/checkouts/1.0-archived/docs/cookbook/index.rstqq}qbUtagnameqUsectionqU attributesq}q (Udupnamesq!]Uclassesq"]Ubackrefsq#]Uidsq$]q%haUnamesq&]q'hauUlineq(KUdocumentq)hh]q*(cdocutils.nodes title q+)q,}q-(hXCookbookq.hhhhhUtitleq/h}q0(h!]h"]h#]h$]h&]uh(Kh)hh]q1cdocutils.nodes Text q2XCookbookq3q4}q5(hh.hh,ubaubcdocutils.nodes compound q6)q7}q8(hUhhhhhUcompoundq9h}q:(h!]h"]q;Utoctree-wrapperq)q?}q@(hUhh7hhhUtoctreeqAh}qB(UnumberedqCKU includehiddenqDhXcookbook/indexqEU titlesonlyqFUglobqGh$]h#]h!]h"]h&]UentriesqH]qI(NXcookbook/tasksqJqKNXcookbook/daemonizingqLqMNXcookbook/unit-testingqNqOeUhiddenqPU includefilesqQ]qR(hJhLhNeUmaxdepthqSKuh(Kh]ubaubcdocutils.nodes paragraph qT)qU}qV(hXThis page contains common recipes and techniques. Whenever a setting is mentioned, you should use ``celeryconf.py`` if using regular Python, or ``settings.py`` if running under Django.hhhhhU paragraphqWh}qX(h!]h"]h#]h$]h&]uh(K h)hh]qY(h2XbThis page contains common recipes and techniques. Whenever a setting is mentioned, you should use qZq[}q\(hXbThis page contains common recipes and techniques. Whenever a setting is mentioned, you should use hhUubcdocutils.nodes literal q])q^}q_(hX``celeryconf.py``h}q`(h!]h"]h#]h$]h&]uhhUh]qah2X celeryconf.pyqbqc}qd(hUhh^ubahUliteralqeubh2X if using regular Python, or qfqg}qh(hX if using regular Python, or hhUubh])qi}qj(hX``settings.py``h}qk(h!]h"]h#]h$]h&]uhhUh]qlh2X settings.pyqmqn}qo(hUhhiubahheubh2X if running under Django.qpqq}qr(hX if running under Django.hhUubeubeubahUU transformerqsNU footnote_refsqt}quUrefnamesqv}qwUsymbol_footnotesqx]qyUautofootnote_refsqz]q{Usymbol_footnote_refsq|]q}U citationsq~]qh)hU current_lineqNUtransform_messagesq]qUreporterqNUid_startqKU autofootnotesq]qU citation_refsq}qUindirect_targetsq]qUsettingsq(cdocutils.frontend Values qoq}q(Ufootnote_backlinksqKUrecord_dependenciesqNU rfc_base_urlqUhttp://tools.ietf.org/html/qU tracebackqUpep_referencesqNUstrip_commentsqNU toc_backlinksqUentryqU language_codeqUenqU datestampqNU report_levelqKU _destinationqNU halt_levelqKU strip_classesqNh/NUerror_encoding_error_handlerqUbackslashreplaceqUdebugqNUembed_stylesheetqUoutput_encoding_error_handlerqUstrictqU sectnum_xformqKUdump_transformsqNU docinfo_xformqKUwarning_streamqNUpep_file_url_templateqUpep-%04dqUexit_status_levelqKUconfigqNUstrict_visitorqNUcloak_email_addressesqUtrim_footnote_reference_spaceqUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUL/var/build/user_builds/celery/checkouts/1.0-archived/docs/cookbook/index.rstqUgettext_compactqˆU generatorqNUdump_internalsqNU smart_quotesqʼnU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhUauto_id_prefixqUidqUdoctitle_xformq͉Ustrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqЈU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qhhsUsubstitution_namesq}qhh)h}q(h!]h$]h#]Usourcehh"]h&]uU footnotesq]qUrefidsq}qub.PKXDDר004celery-1.0-archived/.doctrees/cookbook/tasks.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xcreating tasksqNX.ensuring a task is only executed one at a timeqNuUsubstitution_defsq}q Uparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startqKUnameidsq}q(hUcreating-tasksqhU.ensuring-a-task-is-only-executed-one-at-a-timequUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXL/var/build/user_builds/celery/checkouts/1.0-archived/docs/cookbook/tasks.rstqq}qbUtagnameqUsectionq U attributesq!}q"(Udupnamesq#]Uclassesq$]Ubackrefsq%]Uidsq&]q'haUnamesq(]q)hauUlineq*KUdocumentq+hh]q,(cdocutils.nodes title q-)q.}q/(hXCreating Tasksq0hhhhhUtitleq1h!}q2(h#]h$]h%]h&]h(]uh*Kh+hh]q3cdocutils.nodes Text q4XCreating Tasksq5q6}q7(hh0hh.ubaubh)q8}q9(hUhhhhhh h!}q:(h#]h$]h%]h&]q;hah(]q}q?(hX.Ensuring a task is only executed one at a timeq@hh8hhhh1h!}qA(h#]h$]h%]h&]h(]uh*Kh+hh]qBh4X.Ensuring a task is only executed one at a timeqCqD}qE(hh@hh>ubaubcdocutils.nodes paragraph qF)qG}qH(hX(You can accomplish this by using a lock.qIhh8hhhU paragraphqJh!}qK(h#]h$]h%]h&]h(]uh*K h+hh]qLh4X(You can accomplish this by using a lock.qMqN}qO(hhIhhGubaubhF)qP}qQ(hXdIn this example we'll be using the cache framework to set a lock that is accessible for all workers.qRhh8hhhhJh!}qS(h#]h$]h%]h&]h(]uh*K h+hh]qTh4XdIn this example we'll be using the cache framework to set a lock that is accessible for all workers.qUqV}qW(hhRhhPubaubhF)qX}qY(hXQIt's part of an imaginary RSS feed importer called ``djangofeeds``. The task takes a feed URL as a single argument, and imports that feed into a Django model called ``Feed``. We ensure that it's not possible for two or more workers to import the same feed at the same time by setting a cache key consisting of the md5sum of the feed URL.hh8hhhhJh!}qZ(h#]h$]h%]h&]h(]uh*Kh+hh]q[(h4X3It's part of an imaginary RSS feed importer called q\q]}q^(hX3It's part of an imaginary RSS feed importer called hhXubcdocutils.nodes literal q_)q`}qa(hX``djangofeeds``h!}qb(h#]h$]h%]h&]h(]uhhXh]qch4X djangofeedsqdqe}qf(hUhh`ubahUliteralqgubh4Xc. The task takes a feed URL as a single argument, and imports that feed into a Django model called qhqi}qj(hXc. The task takes a feed URL as a single argument, and imports that feed into a Django model called hhXubh_)qk}ql(hX``Feed``h!}qm(h#]h$]h%]h&]h(]uhhXh]qnh4XFeedqoqp}qq(hUhhkubahhgubh4X. We ensure that it's not possible for two or more workers to import the same feed at the same time by setting a cache key consisting of the md5sum of the feed URL.qrqs}qt(hX. We ensure that it's not possible for two or more workers to import the same feed at the same time by setting a cache key consisting of the md5sum of the feed URL.hhXubeubhF)qu}qv(hXcThe cache key expires after some time in case something unexpected happens (you never know, right?)qwhh8hhhhJh!}qx(h#]h$]h%]h&]h(]uh*Kh+hh]qyh4XcThe cache key expires after some time in case something unexpected happens (you never know, right?)qzq{}q|(hhwhhuubaubcdocutils.nodes literal_block q})q~}q(hXfrom celery.task import Task from django.core.cache import cache from django.utils.hashcompat import md5_constructor as md5 from djangofeeds.models import Feed LOCK_EXPIRE = 60 * 5 # Lock expires in 5 minutes class FeedImporter(Task): name = "feed.import" def run(self, feed_url, **kwargs): logger = self.get_logger(**kwargs) # The cache key consists of the task name and the MD5 digest # of the feed URL. feed_url_digest = md5(feed_url).hexdigest() lock_id = "%s-lock-%s" % (self.name, feed_url_hexdigest) # cache.add fails if if the key already exists acquire_lock = lambda: cache.add(lock_id, "true", LOCK_EXPIRE) # memcache delete is very slow, but we have to use it to take # advantage of using add() for atomic locking release_lock = lambda: cache.delete(lock_id) logger.debug("Importing feed: %s" % feed_url) if aquire_lock(): try: feed = Feed.objects.import_feed(feed_url) finally: release_lock() return feed.url logger.debug( "Feed %s is already being imported by another worker" % ( feed_url)) returnhh8hhhU literal_blockqh!}q(UlinenosqUlanguageqXpythonU xml:spaceqUpreserveqh&]h%]h#]h$]h(]uh*Kh+hh]qh4Xfrom celery.task import Task from django.core.cache import cache from django.utils.hashcompat import md5_constructor as md5 from djangofeeds.models import Feed LOCK_EXPIRE = 60 * 5 # Lock expires in 5 minutes class FeedImporter(Task): name = "feed.import" def run(self, feed_url, **kwargs): logger = self.get_logger(**kwargs) # The cache key consists of the task name and the MD5 digest # of the feed URL. feed_url_digest = md5(feed_url).hexdigest() lock_id = "%s-lock-%s" % (self.name, feed_url_hexdigest) # cache.add fails if if the key already exists acquire_lock = lambda: cache.add(lock_id, "true", LOCK_EXPIRE) # memcache delete is very slow, but we have to use it to take # advantage of using add() for atomic locking release_lock = lambda: cache.delete(lock_id) logger.debug("Importing feed: %s" % feed_url) if aquire_lock(): try: feed = Feed.objects.import_feed(feed_url) finally: release_lock() return feed.url logger.debug( "Feed %s is already being imported by another worker" % ( feed_url)) returnqq}q(hUhh~ubaubeubeubahUU transformerqNU footnote_refsq}qUrefnamesq}qUsymbol_footnotesq]qUautofootnote_refsq]qUsymbol_footnote_refsq]qU citationsq]qh+hU current_lineqNUtransform_messagesq]qUreporterqNUid_startqKU autofootnotesq]qU citation_refsq}qUindirect_targetsq]qUsettingsq(cdocutils.frontend Values qoq}q(Ufootnote_backlinksqKUrecord_dependenciesqNU rfc_base_urlqUhttp://tools.ietf.org/html/qU tracebackqUpep_referencesqNUstrip_commentsqNU toc_backlinksqUentryqU language_codeqUenqU datestampqNU report_levelqKU _destinationqNU halt_levelqKU strip_classesqNh1NUerror_encoding_error_handlerqUbackslashreplaceqUdebugqNUembed_stylesheetqUoutput_encoding_error_handlerqUstrictqU sectnum_xformqKUdump_transformsqNU docinfo_xformqKUwarning_streamqNUpep_file_url_templateqUpep-%04dqUexit_status_levelqKUconfigqNUstrict_visitorqNUcloak_email_addressesqňUtrim_footnote_reference_spaceqƉUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqʉU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUL/var/build/user_builds/celery/checkouts/1.0-archived/docs/cookbook/tasks.rstqUgettext_compactqوU generatorqNUdump_internalsqNU smart_quotesq܉U pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]qUfile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}q(hh8hhuUsubstitution_namesq}qhh+h!}q(h#]h&]h%]Usourcehh$]h(]uU footnotesq]qUrefidsq}qub.PKXDD+E!(!(;celery-1.0-archived/.doctrees/cookbook/unit-testing.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xtesting with djangoqNX unit testingqNX.using a custom test runner to test with celeryqNuUsubstitution_defsq }q Uparse_messagesq ]q Ucurrent_sourceq NU decorationqNUautofootnote_startqKUnameidsq}q(hUtesting-with-djangoqhU unit-testingqhU.using-a-custom-test-runner-to-test-with-celeryquUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXS/var/build/user_builds/celery/checkouts/1.0-archived/docs/cookbook/unit-testing.rstqq}q bUtagnameq!Usectionq"U attributesq#}q$(Udupnamesq%]Uclassesq&]Ubackrefsq']Uidsq(]q)haUnamesq*]q+hauUlineq,KUdocumentq-hh]q.(cdocutils.nodes title q/)q0}q1(hX Unit Testingq2hhhhh!Utitleq3h#}q4(h%]h&]h']h(]h*]uh,Kh-hh]q5cdocutils.nodes Text q6X Unit Testingq7q8}q9(hh2hh0ubaubh)q:}q;(hUhhhhh!h"h#}q<(h%]h&]h']h(]q=hah*]q>hauh,Kh-hh]q?(h/)q@}qA(hXTesting with DjangoqBhh:hhh!h3h#}qC(h%]h&]h']h(]h*]uh,Kh-hh]qDh6XTesting with DjangoqEqF}qG(hhBhh@ubaubcdocutils.nodes paragraph qH)qI}qJ(hXuThe problem that you'll first run in to when trying to write a test that runs a task is that Django's test runner doesn't use the same database that your celery daemon is using. If you're using the database backend, this means that your tombstones won't show up in your test database and you won't be able to check on your tasks to get the return value or check the status.qKhh:hhh!U paragraphqLh#}qM(h%]h&]h']h(]h*]uh,Kh-hh]qNh6XuThe problem that you'll first run in to when trying to write a test that runs a task is that Django's test runner doesn't use the same database that your celery daemon is using. If you're using the database backend, this means that your tombstones won't show up in your test database and you won't be able to check on your tasks to get the return value or check the status.qOqP}qQ(hhKhhIubaubhH)qR}qS(hXThere are two ways to get around this. You can either take advantage of ``CELERY_ALWAYS_EAGER = True`` to skip the daemon, or you can avoid testing anything that needs to check the status or result of a task.hh:hhh!hLh#}qT(h%]h&]h']h(]h*]uh,Kh-hh]qU(h6XHThere are two ways to get around this. You can either take advantage of qVqW}qX(hXHThere are two ways to get around this. You can either take advantage of hhRubcdocutils.nodes literal qY)qZ}q[(hX``CELERY_ALWAYS_EAGER = True``h#}q\(h%]h&]h']h(]h*]uhhRh]q]h6XCELERY_ALWAYS_EAGER = Trueq^q_}q`(hUhhZubah!Uliteralqaubh6Xj to skip the daemon, or you can avoid testing anything that needs to check the status or result of a task.qbqc}qd(hXj to skip the daemon, or you can avoid testing anything that needs to check the status or result of a task.hhRubeubeubh)qe}qf(hUhhhhh!h"h#}qg(h%]h&]h']h(]qhhah*]qihauh,Kh-hh]qj(h/)qk}ql(hX.Using a custom test runner to test with celeryqmhhehhh!h3h#}qn(h%]h&]h']h(]h*]uh,Kh-hh]qoh6X.Using a custom test runner to test with celeryqpqq}qr(hhmhhkubaubhH)qs}qt(hXnIf you're going the ``CELERY_ALWAYS_EAGER`` route, which is probably better than just never testing some parts of your app, a custom Django test runner does the trick. Celery provides a simple test runner, but it's easy enough to roll your own if you have other things that need to be done. http://docs.djangoproject.com/en/dev/topics/testing/#defining-a-test-runnerhhehhh!hLh#}qu(h%]h&]h']h(]h*]uh,Kh-hh]qv(h6XIf you're going the qwqx}qy(hXIf you're going the hhsubhY)qz}q{(hX``CELERY_ALWAYS_EAGER``h#}q|(h%]h&]h']h(]h*]uhhsh]q}h6XCELERY_ALWAYS_EAGERq~q}q(hUhhzubah!haubh6X route, which is probably better than just never testing some parts of your app, a custom Django test runner does the trick. Celery provides a simple test runner, but it's easy enough to roll your own if you have other things that need to be done. qq}q(hX route, which is probably better than just never testing some parts of your app, a custom Django test runner does the trick. Celery provides a simple test runner, but it's easy enough to roll your own if you have other things that need to be done. hhsubcdocutils.nodes reference q)q}q(hXKhttp://docs.djangoproject.com/en/dev/topics/testing/#defining-a-test-runnerqh#}q(Urefurihh(]h']h%]h&]h*]uhhsh]qh6XKhttp://docs.djangoproject.com/en/dev/topics/testing/#defining-a-test-runnerqq}q(hUhhubah!U referencequbeubhH)q}q(hXFor this example, we'll use the ``celery.contrib.test_runner`` to test the ``add`` task from the :doc:`User Guide: Tasks<../userguide/tasks>` examples.hhehhh!hLh#}q(h%]h&]h']h(]h*]uh,Kh-hh]q(h6X For this example, we'll use the qq}q(hX For this example, we'll use the hhubhY)q}q(hX``celery.contrib.test_runner``h#}q(h%]h&]h']h(]h*]uhhh]qh6Xcelery.contrib.test_runnerqq}q(hUhhubah!haubh6X to test the qq}q(hX to test the hhubhY)q}q(hX``add``h#}q(h%]h&]h']h(]h*]uhhh]qh6Xaddqq}q(hUhhubah!haubh6X task from the qq}q(hX task from the hhubcsphinx.addnodes pending_xref q)q}q(hX,:doc:`User Guide: Tasks<../userguide/tasks>`qhhhhh!U pending_xrefqh#}q(UreftypeXdocqUrefwarnqU reftargetqX../userguide/tasksU refdomainUh(]h']U refexplicith%]h&]h*]UrefdocqXcookbook/unit-testingquh,Kh]qhY)q}q(hhh#}q(h%]h&]q(Uxrefqheh']h(]h*]uhhh]qh6XUser Guide: Tasksqq}q(hUhhubah!haubaubh6X examples.qq}q(hX examples.hhubeubhH)q}q(hX6To enable the test runner, set the following settings:qhhehhh!hLh#}q(h%]h&]h']h(]h*]uh,Kh-hh]qh6X6To enable the test runner, set the following settings:qƅq}q(hhhhubaubcdocutils.nodes literal_block q)q}q(hX4TEST_RUNNER = 'celery.contrib.test_runner.run_tests'hhehhh!U literal_blockqh#}q(UlinenosqΉUlanguageqXpythonU xml:spaceqUpreserveqh(]h']h%]h&]h*]uh,K h-hh]qh6X4TEST_RUNNER = 'celery.contrib.test_runner.run_tests'qӅq}q(hUhhubaubhH)q}q(hX@Then we can write our actually test in a ``tests.py`` somewhere:qhhehhh!hLh#}q(h%]h&]h']h(]h*]uh,K%h-hh]q(h6X)Then we can write our actually test in a qۅq}q(hX)Then we can write our actually test in a hhubhY)q}q(hX ``tests.py``h#}q(h%]h&]h']h(]h*]uhhh]qh6Xtests.pyq⅁q}q(hUhhubah!haubh6X somewhere:q允q}q(hX somewhere:hhubeubh)q}q(hXWfrom django.test import TestCase from myapp.tasks import add class AddTestCase(TestCase): def testNoError(self): """Test that the ``add`` task runs with no errors, and returns the correct result.""" result = add.delay(8, 8) self.assertEquals(result.get(), 16) self.assertTrue(result.successful())hhehhh!hh#}q(hΉhXpythonhhh(]h']h%]h&]h*]uh,K'h-hh]qh6XWfrom django.test import TestCase from myapp.tasks import add class AddTestCase(TestCase): def testNoError(self): """Test that the ``add`` task runs with no errors, and returns the correct result.""" result = add.delay(8, 8) self.assertEquals(result.get(), 16) self.assertTrue(result.successful())q셁q}q(hUhhubaubhH)q}q(hXThis test assumes that you put your example ``add`` task in ``maypp.tasks`` so of course adjust the import for wherever you actually put the class.hhehhh!hLh#}q(h%]h&]h']h(]h*]uh,K7h-hh]q(h6X,This test assumes that you put your example qq}q(hX,This test assumes that you put your example hhubhY)q}q(hX``add``h#}q(h%]h&]h']h(]h*]uhhh]qh6Xaddqq}q(hUhhubah!haubh6X task in qq}q(hX task in hhubhY)r}r(hX``maypp.tasks``h#}r(h%]h&]h']h(]h*]uhhh]rh6X maypp.tasksrr}r(hUhjubah!haubh6XH so of course adjust the import for wherever you actually put the class.rr}r (hXH so of course adjust the import for wherever you actually put the class.hhubeubeubeubahUU transformerr NU footnote_refsr }r Urefnamesr }rUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh-hU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr ]r!Usettingsr"(cdocutils.frontend Values r#or$}r%(Ufootnote_backlinksr&KUrecord_dependenciesr'NU rfc_base_urlr(Uhttp://tools.ietf.org/html/r)U tracebackr*Upep_referencesr+NUstrip_commentsr,NU toc_backlinksr-Uentryr.U language_coder/Uenr0U datestampr1NU report_levelr2KU _destinationr3NU halt_levelr4KU strip_classesr5Nh3NUerror_encoding_error_handlerr6Ubackslashreplacer7Udebugr8NUembed_stylesheetr9Uoutput_encoding_error_handlerr:Ustrictr;U sectnum_xformr<KUdump_transformsr=NU docinfo_xformr>KUwarning_streamr?NUpep_file_url_templater@Upep-%04drAUexit_status_levelrBKUconfigrCNUstrict_visitorrDNUcloak_email_addressesrEUtrim_footnote_reference_spacerFUenvrGNUdump_pseudo_xmlrHNUexpose_internalsrINUsectsubtitle_xformrJU source_linkrKNUrfc_referencesrLNUoutput_encodingrMUutf-8rNU source_urlrONUinput_encodingrPU utf-8-sigrQU_disable_configrRNU id_prefixrSUU tab_widthrTKUerror_encodingrUUUTF-8rVU_sourcerWUS/var/build/user_builds/celery/checkouts/1.0-archived/docs/cookbook/unit-testing.rstrXUgettext_compactrYU generatorrZNUdump_internalsr[NU smart_quotesr\U pep_base_urlr]Uhttp://www.python.org/dev/peps/r^Usyntax_highlightr_Ulongr`Uinput_encoding_error_handlerraj;Uauto_id_prefixrbUidrcUdoctitle_xformrdUstrip_elements_with_classesreNU _config_filesrf]rgUfile_insertion_enabledrhU raw_enabledriKU dump_settingsrjNubUsymbol_footnote_startrkKUidsrl}rm(hhhh:hheuUsubstitution_namesrn}roh!h-h#}rp(h%]h(]h']Usourcehh&]h*]uU footnotesrq]rrUrefidsrs}rtub.PKXDD#;Y;YMcelery-1.0-archived/.doctrees/getting-started/first-steps-with-django.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xfirst steps with djangoqNX-configuring your django project to use celeryqNXdefining and executing tasksqNX running the celery worker serverq NuUsubstitution_defsq }q Uparse_messagesq ]q Ucurrent_sourceqNU decorationqNUautofootnote_startqKUnameidsq}q(hUfirst-steps-with-djangoqhU-configuring-your-django-project-to-use-celeryqhUdefining-and-executing-tasksqh U running-the-celery-worker-serverquUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXe/var/build/user_builds/celery/checkouts/1.0-archived/docs/getting-started/first-steps-with-django.rstq q!}q"bUtagnameq#Usectionq$U attributesq%}q&(Udupnamesq']Uclassesq(]Ubackrefsq)]Uidsq*]q+haUnamesq,]q-hauUlineq.KUdocumentq/hh]q0(cdocutils.nodes title q1)q2}q3(hXFirst steps with Djangoq4hhhh!h#Utitleq5h%}q6(h']h(]h)]h*]h,]uh.Kh/hh]q7cdocutils.nodes Text q8XFirst steps with Djangoq9q:}q;(hh4hh2ubaubh)q<}q=(hUhhhh!h#h$h%}q>(h']h(]h)]h*]q?hah,]q@hauh.Kh/hh]qA(h1)qB}qC(hX-Configuring your Django project to use CeleryqDhh`.hh`qhhhh!h#U pending_xrefqh%}q(UreftypeXdocqUrefwarnqU reftargetqX../configurationU refdomainUh*]h)]U refexplicith']h(]h,]UrefdocqX'getting-started/first-steps-with-djangoquh.Kh]qhj)q}q(hhh%}q(h']h(]q(Uxrefqheh)]h*]h,]uhhh]qh8X!configuration directive referenceqq}q(hUhhubah#hrubaubh8X.q}q(hX.hhubeubhJ)q}q(hX**Note:** If you're using SQLite as the Django database back-end, ``celeryd`` will only be able to process one task at a time, this is because SQLite doesn't allow concurrent writes.hh`.hjhh!h#hNh%}r6(h']h(]h)]h*]h,]uh.K0h/hh]r7(h8XHowever, in production you probably want to run the worker in the background as a daemon. To do this you need to use to tools provided by your platform. See r8r9}r:(hXHowever, in production you probably want to run the worker in the background as a daemon. To do this you need to use to tools provided by your platform. See hj4ubh)r;}r<(hX5:doc:`daemon mode reference<../cookbook/daemonizing>`r=hj4hh!h#hh%}r>(UreftypeXdocr?hhX../cookbook/daemonizingU refdomainUh*]h)]U refexplicith']h(]h,]hhuh.K0h]r@hj)rA}rB(hj=h%}rC(h']h(]rD(hj?eh)]h*]h,]uhj;h]rEh8Xdaemon mode referencerFrG}rH(hUhjAubah#hrubaubh8X.rI}rJ(hX.hj4ubeubhJ)rK}rL(hXTFor a complete listing of the command line options available, use the help command::rMhjhh!h#hNh%}rN(h']h(]h)]h*]h,]uh.K4h/hh]rOh8XSFor a complete listing of the command line options available, use the help command:rPrQ}rR(hXSFor a complete listing of the command line options available, use the help command:hjKubaubh)rS}rT(hX$ python manage.py help celerydhjhh!h#hh%}rU(hhh*]h)]h']h(]h,]uh.K6h/hh]rVh8X$ python manage.py help celerydrWrX}rY(hUhjSubaubeubh)rZ}r[(hUhhhh!h#h$h%}r\(h']h(]h)]h*]r]hah,]r^hauh.K:h/hh]r_(h1)r`}ra(hXDefining and executing tasksrbhjZhh!h#h5h%}rc(h']h(]h)]h*]h,]uh.K:h/hh]rdh8XDefining and executing tasksrerf}rg(hjbhj`ubaubhJ)rh}ri(hXg**Please note:** All the tasks have to be stored in a real module, they can't be defined in the python shell or ipython/bpython. This is because the celery worker server needs access to the task function to be able to run it. Put them in the ``tasks`` module of your Django application. The worker server will automatically load any ``tasks.py`` file for all of the applications listed in ``settings.INSTALLED_APPS``. Executing tasks using ``delay`` and ``apply_async`` can be done from the python shell, but keep in mind that since arguments are pickled, you can't use custom classes defined in the shell session.hjZhh!h#hNh%}rj(h']h(]h)]h*]h,]uh.K` for more information.hjZhh!h#hNh%}r(h']h(]h)]h*]h,]uh.KPh/hh]r(h8X%To execute this task, we can use the rr}r(hX%To execute this task, we can use the hjubhj)r}r(hX ``delay``h%}r(h']h(]h)]h*]h,]uhjh]rh8Xdelayrr}r(hUhjubah#hrubh8X; method of the task class. This is a handy shortcut to the rr}r(hX; method of the task class. This is a handy shortcut to the hjubhj)r}r(hX``apply_async``h%}r(h']h(]h)]h*]h,]uhjh]rh8X apply_asyncrr}r(hUhjubah#hrubh8X? method which gives greater control of the task execution. See rr}r(hX? method which gives greater control of the task execution. See hjubh)r}r(hX.:doc:`Executing Tasks<../userguide/executing>`rhjhh!h#hh%}r(UreftypeXdocrhhX../userguide/executingU refdomainUh*]h)]U refexplicith']h(]h,]hhuh.KPh]rhj)r}r(hjh%}r(h']h(]r(hjeh)]h*]h,]uhjh]rh8XExecuting Tasksrr}r(hUhjubah#hrubaubh8X for more information.rr}r(hX for more information.hjubeubcdocutils.nodes doctest_block r)r}r(hXC>>> from myapp.tasks import MyTask >>> MyTask.delay(some_arg="foo")hjZhNh#U doctest_blockrh%}r(hhh*]h)]h']h(]h,]uh.Nh/hh]rh8XC>>> from myapp.tasks import MyTask >>> MyTask.delay(some_arg="foo")rr}r(hUhjubaubhJ)r}r(hXAt this point, the task has been sent to the message broker. The message broker will hold on to the task until a celery worker server has successfully picked it up.rhjZhh!h#hNh%}r(h']h(]h)]h*]h,]uh.KXh/hh]rh8XAt this point, the task has been sent to the message broker. The message broker will hold on to the task until a celery worker server has successfully picked it up.rr}r(hjhjubaubhJ)r}r(hX*Note:* If everything is just hanging when you execute ``delay``, please check that RabbitMQ is running, and that the user/password has access to the virtual host you configured earlier.hjZhh!h#hNh%}r(h']h(]h)]h*]h,]uh.K\h/hh]r(cdocutils.nodes emphasis r)r}r(hX*Note:*h%}r(h']h(]h)]h*]h,]uhjh]rh8XNote:rr}r(hUhjubah#Uemphasisrubh8X0 If everything is just hanging when you execute rr}r(hX0 If everything is just hanging when you execute hjubhj)r}r(hX ``delay``h%}r(h']h(]h)]h*]h,]uhjh]r h8Xdelayr r }r (hUhjubah#hrubh8Xz, please check that RabbitMQ is running, and that the user/password has access to the virtual host you configured earlier.r r}r(hXz, please check that RabbitMQ is running, and that the user/password has access to the virtual host you configured earlier.hjubeubhJ)r}r(hXRight now we have to check the celery worker log files to know what happened with the task. This is because we didn't keep the ``AsyncResult`` object returned by ``delay``.hjZhh!h#hNh%}r(h']h(]h)]h*]h,]uh.K`h/hh]r(h8XRight now we have to check the celery worker log files to know what happened with the task. This is because we didn't keep the rr}r(hXRight now we have to check the celery worker log files to know what happened with the task. This is because we didn't keep the hjubhj)r}r(hX``AsyncResult``h%}r(h']h(]h)]h*]h,]uhjh]rh8X AsyncResultrr}r(hUhjubah#hrubh8X object returned by rr}r (hX object returned by hjubhj)r!}r"(hX ``delay``h%}r#(h']h(]h)]h*]h,]uhjh]r$h8Xdelayr%r&}r'(hUhj!ubah#hrubh8X.r(}r)(hX.hjubeubhJ)r*}r+(hXThe ``AsyncResult`` lets us find the state of the task, wait for the task to finish and get its return value (or exception if the task failed).hjZhh!h#hNh%}r,(h']h(]h)]h*]h,]uh.Kdh/hh]r-(h8XThe r.r/}r0(hXThe hj*ubhj)r1}r2(hX``AsyncResult``h%}r3(h']h(]h)]h*]h,]uhj*h]r4h8X AsyncResultr5r6}r7(hUhj1ubah#hrubh8X| lets us find the state of the task, wait for the task to finish and get its return value (or exception if the task failed).r8r9}r:(hX| lets us find the state of the task, wait for the task to finish and get its return value (or exception if the task failed).hj*ubeubhJ)r;}r<(hXMSo, let's execute the task again, but this time we'll keep track of the task:r=hjZhh!h#hNh%}r>(h']h(]h)]h*]h,]uh.Kgh/hh]r?h8XMSo, let's execute the task again, but this time we'll keep track of the task:r@rA}rB(hj=hj;ubaubj)rC}rD(hX>>> result = add.delay(4, 4) >>> result.ready() # returns True if the task has finished processing. False >>> result.result # task is not ready, so no return value yet. None >>> result.get() # Waits until the task is done and returns the retval. 8 >>> result.result # direct access to result, doesn't re-raise errors. 8 >>> result.successful() # returns True if the task didn't end in failure. TruehjZhNh#jh%}rE(hhh*]h)]h']h(]h,]uh.Nh/hh]rFh8X>>> result = add.delay(4, 4) >>> result.ready() # returns True if the task has finished processing. False >>> result.result # task is not ready, so no return value yet. None >>> result.get() # Waits until the task is done and returns the retval. 8 >>> result.result # direct access to result, doesn't re-raise errors. 8 >>> result.successful() # returns True if the task didn't end in failure. TruerGrH}rI(hUhjCubaubhJ)rJ}rK(hXIf the task raises an exception, the return value of ``result.successful()`` will be ``False``, and ``result.result`` will contain the exception instance raised by the task.hjZhh!h#hNh%}rL(h']h(]h)]h*]h,]uh.Kuh/hh]rM(h8X5If the task raises an exception, the return value of rNrO}rP(hX5If the task raises an exception, the return value of hjJubhj)rQ}rR(hX``result.successful()``h%}rS(h']h(]h)]h*]h,]uhjJh]rTh8Xresult.successful()rUrV}rW(hUhjQubah#hrubh8X will be rXrY}rZ(hX will be hjJubhj)r[}r\(hX ``False``h%}r](h']h(]h)]h*]h,]uhjJh]r^h8XFalser_r`}ra(hUhj[ubah#hrubh8X, and rbrc}rd(hX, and hjJubhj)re}rf(hX``result.result``h%}rg(h']h(]h)]h*]h,]uhjJh]rhh8X result.resultrirj}rk(hUhjeubah#hrubh8X8 will contain the exception instance raised by the task.rlrm}rn(hX8 will contain the exception instance raised by the task.hjJubeubeubeubahUU transformerroNU footnote_refsrp}rqUrefnamesrr}rsUsymbol_footnotesrt]ruUautofootnote_refsrv]rwUsymbol_footnote_refsrx]ryU citationsrz]r{h/hU current_liner|NUtransform_messagesr}]r~UreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh5NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUe/var/build/user_builds/celery/checkouts/1.0-archived/docs/getting-started/first-steps-with-django.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(hh}q?(h h8h!h6ubaubh)q@}qA(h Uh!hh"h%h'h(h)}qB(h+]h,]h-]h.]qChah0]qDh auh2Kh3hh]qE(h5)qF}qG(h XCreating a simple taskqHh!h@h"h%h'h9h)}qI(h+]h,]h-]h.]h0]uh2Kh3hh]qJh`.h!h@h"h%h'hQh)}q(h+]h,]h-]h.]h0]uh2Kh3hh]q(h`qh!hh"h%h'U pending_xrefqh)}q(UreftypeXdocqUrefwarnqU reftargetqX../userguide/tasksU refdomainUh.]h-]U refexplicith+]h,]h0]UrefdocqX'getting-started/first-steps-with-celeryquh2Kh]qhW)q}q(h hh)}q(h+]h,]q(Uxrefqheh-]h.]h0]uh!hh]qhh`.h!hh"h%h'hQh)}rD(h+]h,]h-]h.]h0]uh2KFh3hh]rE(h`rUh!jBh"h%h'hh)}rV(UreftypeXdocrWhhX../configurationU refdomainUh.]h-]U refexplicith+]h,]h0]hhuh2KFh]rXhW)rY}rZ(h jUh)}r[(h+]h,]r\(hjWeh-]h.]h0]uh!jSh]r]h`h!jch"h%h'hQh)}r(h+]h,]h-]h.]h0]uh2K]h3hh]r(h`rh!jh"h%h'hh)}r(UreftypeXdocrhhX../cookbook/daemonizingU refdomainUh.]h-]U refexplicith+]h,]h0]hhuh2K]h]rhW)r}r(h jh)}r(h+]h,]r(hjeh-]h.]h0]uh!jh]rh` for more information.h!jh"h%h'hQh)}r(h+]h,]h-]h.]h0]uh2Khh3hh]r(h`rh!jh"h%h'hh)}r(UreftypeXdocrhhX../userguide/executingU refdomainUh.]h-]U refexplicith+]h,]h0]hhuh2Khh]rhW)r}r(h jh)}r(h+]h,]r(hjeh-]h.]h0]uh!jh]rh>> from tasks import add >>> add.delay(4, 4) h!jh"Nh'U doctest_blockrh)}r(hhh.]h-]h+]h,]h0]uh2Nh3hh]rh>> from tasks import add >>> add.delay(4, 4) rr}r (h Uh!jubaubhN)r }r (h XAt this point, the task has been sent to the message broker. The message broker will hold on to the task until a celery worker server has successfully picked it up.r h!jh"h%h'hQh)}r (h+]h,]h-]h.]h0]uh2Kph3hh]rh(h X ``delay``h)}r?(h+]h,]h-]h.]h0]uh!j,h]r@h>> result = add.delay(4, 4) >>> result.ready() # returns True if the task has finished processing. False >>> result.result # task is not ready, so no return value yet. None >>> result.get() # Waits until the task is done and returns the retval. 8 >>> result.result # direct access to result, doesn't re-raise errors. 8 >>> result.successful() # returns True if the task didn't end in failure. Trueh!jh"Nh'jh)}ra(hhh.]h-]h+]h,]h0]uh2Nh3hh]rbh>> result = add.delay(4, 4) >>> result.ready() # returns True if the task has finished processing. False >>> result.result # task is not ready, so no return value yet. None >>> result.get() # Waits until the task is done and returns the retval. 8 >>> result.result # direct access to result, doesn't re-raise errors. 8 >>> result.successful() # returns True if the task didn't end in failure. Truercrd}re(h Uh!j_ubaubhN)rf}rg(h XIf the task raises an exception, the return value of ``result.successful()`` will be ``False``, and ``result.result`` will contain the exception instance raised by the task.h!jh"h%h'hQh)}rh(h+]h,]h-]h.]h0]uh2Kh3hh]ri(h`.h!jh"h%h'hQh)}r(h+]h,]h-]h.]h0]uh2Kh3hh]r(h`rh!jh"h%h'hh)}r(UreftypeXdocrhhX../userguide/indexU refdomainUh.]h-]U refexplicith+]h,]h0]hhuh2Kh]rhW)r}r(h jh)}r(h+]h,]r(hjeh-]h.]h0]uh!jh]rh(cdocutils.nodes title q?)q@}qA(h*X ResourcesqBh+h(h,h/h1UtitleqCh3}qD(h5]h6]h7]h8]h:]uh}r?(h*j:h+j8ubaubhi)r@}rA(h*XThis software is licensed under the ``New BSD License``. See the ``LICENSE`` file in the top distribution directory for the full license text.h+j2h,hMh1hlh3}rB(h5]h6]h7]h8]h:]uhU attributesq?}q@(UdupnamesqA]UclassesqB]UbackrefsqC]UidsqD]qEh#aUnamesqF]qGh auUlineqHKUdocumentqIhh1]qJ(cdocutils.nodes title qK)qL}qM(h6X IntroductionqNh7h4h8h;h=UtitleqOh?}qP(hA]hB]hC]hD]hF]uhHKhIhh1]qQcdocutils.nodes Text qRX IntroductionqSqT}qU(h6hNh7hLubaubcdocutils.nodes image qV)qW}qX(h6XO.. image:: http://cloud.github.com/downloads/ask/celery/celery_favicon_128.png h7h4h8h9Xincludes/introduction.txtqYqZ}q[bh=Uimageq\h?}q](UuriXChttp://cloud.github.com/downloads/ask/celery/celery_favicon_128.pngq^hD]hC]hA]hB]U candidatesq_}q`U?h^shF]uhHKhIhh1]ubcdocutils.nodes field_list qa)qb}qc(h6Uh7h4h8hZh=U field_listqdh?}qe(hA]hB]hC]hD]hF]uhHKhIhh1]qf(cdocutils.nodes field qg)qh}qi(h6Uh7hbh8hZh=Ufieldqjh?}qk(hA]hB]hC]hD]hF]uhHKhIhh1]ql(cdocutils.nodes field_name qm)qn}qo(h6XVersionqph?}qq(hA]hB]hC]hD]hF]uh7hhh1]qrhRXVersionqsqt}qu(h6hph7hnubah=U field_nameqvubcdocutils.nodes field_body qw)qx}qy(h6X1.0.6qzh?}q{(hA]hB]hC]hD]hF]uh7hhh1]q|cdocutils.nodes paragraph q})q~}q(h6hzh7hxh8hZh=U paragraphqh?}q(hA]hB]hC]hD]hF]uhHKh1]qhRX1.0.6qq}q(h6hzh7h~ubaubah=U field_bodyqubeubhg)q}q(h6Uh7hbh8hZh=hjh?}q(hA]hB]hC]hD]hF]uhHKhIhh1]q(hm)q}q(h6XWebqh?}q(hA]hB]hC]hD]hF]uh7hh1]qhRXWebqq}q(h6hh7hubah=hvubhw)q}q(h6Xhttp://celeryproject.org/qh?}q(hA]hB]hC]hD]hF]uh7hh1]qh})q}q(h6hh7hh8hZh=hh?}q(hA]hB]hC]hD]hF]uhHKh1]qcdocutils.nodes reference q)q}q(h6hh?}q(UrefurihhD]hC]hA]hB]hF]uh7hh1]qhRXhttp://celeryproject.org/qq}q(h6Uh7hubah=U referencequbaubah=hubeubhg)q}q(h6Uh7hbh8hZh=hjh?}q(hA]hB]hC]hD]hF]uhHKhIhh1]q(hm)q}q(h6XDownloadqh?}q(hA]hB]hC]hD]hF]uh7hh1]qhRXDownloadqq}q(h6hh7hubah=hvubhw)q}q(h6X#http://pypi.python.org/pypi/celery/qh?}q(hA]hB]hC]hD]hF]uh7hh1]qh})q}q(h6hh7hh8hZh=hh?}q(hA]hB]hC]hD]hF]uhHKh1]qh)q}q(h6hh?}q(UrefurihhD]hC]hA]hB]hF]uh7hh1]qhRX#http://pypi.python.org/pypi/celery/qq}q(h6Uh7hubah=hubaubah=hubeubhg)q}q(h6Uh7hbh8hZh=hjh?}q(hA]hB]hC]hD]hF]uhHKhIhh1]q(hm)q}q(h6XSourceqh?}q(hA]hB]hC]hD]hF]uh7hh1]qhRXSourceqʅq}q(h6hh7hubah=hvubhw)q}q(h6Xhttp://github.com/ask/celery/qh?}q(hA]hB]hC]hD]hF]uh7hh1]qh})q}q(h6hh7hh8hZh=hh?}q(hA]hB]hC]hD]hF]uhHKh1]qh)q}q(h6hh?}q(UrefurihhD]hC]hA]hB]hF]uh7hh1]qhRXhttp://github.com/ask/celery/qڅq}q(h6Uh7hubah=hubaubah=hubeubhg)q}q(h6Uh7hbh8hZh=hjh?}q(hA]hB]hC]hD]hF]uhHKhIhh1]q(hm)q}q(h6XKeywordsqh?}q(hA]hB]hC]hD]hF]uh7hh1]qhRXKeywordsq慁q}q(h6hh7hubah=hvubhw)q}q(h6Xitask queue, job queue, asynchronous, rabbitmq, amqp, redis, django, python, webhooks, queue, distributed h?}q(hA]hB]hC]hD]hF]uh7hh1]qh})q}q(h6Xhtask queue, job queue, asynchronous, rabbitmq, amqp, redis, django, python, webhooks, queue, distributedqh7hh8hZh=hh?}q(hA]hB]hC]hD]hF]uhHKh1]qhRXhtask queue, job queue, asynchronous, rabbitmq, amqp, redis, django, python, webhooks, queue, distributedqq}q(h6hh7hubaubah=hubeubeubh})q}q(h6X--qh7h4h8hZh=hh?}q(hA]hB]hC]hD]hF]uhHK hIhh1]qhRX--qq}q(h6hh7hubaubh})q}q(h6XCelery is a task queue/job queue based on distributed message passing. It is focused on real-time operation, but supports scheduling as well.qh7h4h8hZh=hh?}r(hA]hB]hC]hD]hF]uhHK hIhh1]rhRXCelery is a task queue/job queue based on distributed message passing. It is focused on real-time operation, but supports scheduling as well.rr}r(h6hh7hubaubh})r}r(h6XThe execution units, called tasks, are executed concurrently on a single or more worker servers. Tasks can execute asynchronously (in the background) or synchronously (wait until ready).rh7h4h8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]r hRXThe execution units, called tasks, are executed concurrently on a single or more worker servers. Tasks can execute asynchronously (in the background) or synchronously (wait until ready).r r }r (h6jh7jubaubh})r }r(h6XHCelery is already used in production to process millions of tasks a day.rh7h4h8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]rhRXHCelery is already used in production to process millions of tasks a day.rr}r(h6jh7j ubaubh})r}r(h6XCelery was originally created for use with Django, but is now usable from any Python project. It can also `operate with other languages via webhooks`_.h7h4h8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]r(hRXjCelery was originally created for use with Django, but is now usable from any Python project. It can also rr}r(h6XjCelery was originally created for use with Django, but is now usable from any Python project. It can also h7jubh)r}r(h6X,`operate with other languages via webhooks`_UresolvedrKh7jh=hh?}r(UnameX)operate with other languages via webhooksUrefurir X8http://ask.github.com/celery/userguide/remote-tasks.htmlr!hD]hC]hA]hB]hF]uh1]r"hRX)operate with other languages via webhooksr#r$}r%(h6Uh7jubaubhRX.r&}r'(h6X.h7jubeubh})r(}r)(h6XeThe recommended message broker is `RabbitMQ`_, but support for Redis and databases is also available.h7h4h8hZh=hh?}r*(hA]hB]hC]hD]hF]uhHKhIhh1]r+(hRX"The recommended message broker is r,r-}r.(h6X"The recommended message broker is h7j(ubh)r/}r0(h6X `RabbitMQ`_jKh7j(h=hh?}r1(UnameXRabbitMQj Xhttp://www.rabbitmq.com/r2hD]hC]hA]hB]hF]uh1]r3hRXRabbitMQr4r5}r6(h6Uh7j/ubaubhRX8, but support for Redis and databases is also available.r7r8}r9(h6X8, but support for Redis and databases is also available.h7j(ubeubcdocutils.nodes target r:)r;}r<(h6Xm.. _`operate with other languages via webhooks`: http://ask.github.com/celery/userguide/remote-tasks.htmlU referencedr=Kh7h4h8hZh=Utargetr>h?}r?(j j!hD]r@h,ahC]hA]hB]hF]rAhauhHK"hIhh1]ubh3)rB}rC(h6Uh7h4h8hZh=h>h?}rD(hA]hB]hC]hD]rEh$ahF]rFh auhHK hIhh1]rG(hK)rH}rI(h6XOverviewrJh7jBh8hZh=hOh?}rK(hA]hB]hC]hD]hF]uhHK hIhh1]rLhRXOverviewrMrN}rO(h6jJh7jHubaubh})rP}rQ(h6X2This is a high level overview of the architecture.rRh7jBh8hZh=hh?}rS(hA]hB]hC]hD]hF]uhHK"hIhh1]rThRX2This is a high level overview of the architecture.rUrV}rW(h6jRh7jPubaubhV)rX}rY(h6XO.. image:: http://cloud.github.com/downloads/ask/celery/Celery-Overview-v4.jpg h7jBh8hZh=h\h?}rZ(UuriXChttp://cloud.github.com/downloads/ask/celery/Celery-Overview-v4.jpgr[hD]hC]hA]hB]h_}r\U?j[shF]uhHK%hIhh1]ubh})r]}r^(h6XThe broker pushes tasks to the worker servers. A worker server is a networked machine running ``celeryd``. This can be one or more machines, depending on the workload.h7jBh8hZh=hh?}r_(hA]hB]hC]hD]hF]uhHK&hIhh1]r`(hRX^The broker pushes tasks to the worker servers. A worker server is a networked machine running rarb}rc(h6X^The broker pushes tasks to the worker servers. A worker server is a networked machine running h7j]ubcdocutils.nodes literal rd)re}rf(h6X ``celeryd``h?}rg(hA]hB]hC]hD]hF]uh7j]h1]rhhRXcelerydrirj}rk(h6Uh7jeubah=UliteralrlubhRX>. This can be one or more machines, depending on the workload.rmrn}ro(h6X>. This can be one or more machines, depending on the workload.h7j]ubeubh})rp}rq(h6XRThe result of the task can be stored for later retrieval (called its "tombstone").rrh7jBh8hZh=hh?}rs(hA]hB]hC]hD]hF]uhHK*hIhh1]rthRXRThe result of the task can be stored for later retrieval (called its "tombstone").rurv}rw(h6jrh7jpubaubeubh3)rx}ry(h6Uh7h4h8hZh=h>h?}rz(hA]hB]hC]hD]r{h/ahF]r|hauhHK.hIhh1]r}(hK)r~}r(h6XExamplerh7jxh8hZh=hOh?}r(hA]hB]hC]hD]hF]uhHK.hIhh1]rhRXExamplerr}r(h6jh7j~ubaubh})r}r(h6XXYou probably want to see some code by now, so here's an example task adding two numbers:rh7jxh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHK0hIhh1]rhRXXYou probably want to see some code by now, so here's an example task adding two numbers:rr}r(h6jh7jubaubcdocutils.nodes literal_block r)r}r(h6XIfrom celery.decorators import task @task def add(x, y): return x + yh7jxh8hZh=U literal_blockrh?}r(UlinenosrUlanguagerXpythonU xml:spacerUpreserverhD]hC]hA]hB]hF]uhHK3hIhh1]rhRXIfrom celery.decorators import task @task def add(x, y): return x + yrr}r(h6Uh7jubaubh})r}r(h6XFYou can execute the task in the background, or wait for it to finish::rh7jxh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHK;hIhh1]rhRXEYou can execute the task in the background, or wait for it to finish:rr}r(h6XEYou can execute the task in the background, or wait for it to finish:h7jubaubj)r}r(h6XQ>>> result = add.delay(4, 4) >>> result.wait() # wait for and return the result 8h7jxh8hZh=jh?}r(jjhD]hC]hA]hB]hF]uhHKChIhh1]rhRXQ>>> result = add.delay(4, 4) >>> result.wait() # wait for and return the result 8rr}r(h6Uh7jubaubh})r}r(h6XSimple!rh7jxh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKAhIhh1]rhRXSimple!rr}r(h6jh7jubaubeubh3)r}r(h6Uh7h4h8hZh=h>h?}r(hA]hB]hC]hD]rh"ahF]rhauhHKDhIhh1]r(hK)r}r(h6XFeaturesrh7jh8hZh=hOh?}r(hA]hB]hC]hD]hF]uhHKDhIhh1]rhRXFeaturesrr}r(h6jh7jubaubcdocutils.nodes table r)r}r(h6Uh7jh8Nh=Utablerh?}r(hA]hB]hC]hD]hF]uhHNhIhh1]rcdocutils.nodes tgroup r)r}r(h6Uh?}r(hD]hC]hA]hB]hF]UcolsKuh7jh1]r(cdocutils.nodes colspec r)r}r(h6Uh?}r(hD]hC]hA]hB]hF]UcolwidthKuh7jh1]h=Ucolspecrubj)r}r(h6Uh?}r(hD]hC]hA]hB]hF]UcolwidthK4uh7jh1]h=jubcdocutils.nodes tbody r)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]r(cdocutils.nodes row r)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]r(cdocutils.nodes entry r)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6X Messagingrh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKGh1]rhRX Messagingrr}r(h6jh7jubaubah=Uentryrubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6XYSupported brokers include `RabbitMQ`_, `Stomp`_, `Redis`_, and most common SQL databases.h7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKGh1]r(hRXSupported brokers include rr}r(h6XSupported brokers include h7jubh)r}r(h6X `RabbitMQ`_jKh7jh=hh?}r(UnameXRabbitMQj j2hD]hC]hA]hB]hF]uh1]rhRXRabbitMQrr}r(h6Uh7jubaubhRX, rr}r(h6X, h7jubh)r}r(h6X`Stomp`_jKh7jh=hh?}r(UnameXStompj Xhttp://stomp.codehaus.org/rhD]hC]hA]hB]hF]uh1]rhRXStomprr}r(h6Uh7jubaubhRX, rr }r (h6X, h7jubh)r }r (h6X`Redis`_jKh7jh=hh?}r (UnameXRedisj Xhttp://code.google.com/p/redis/rhD]hC]hA]hB]hF]uh1]rhRXRedisrr}r(h6Uh7j ubaubhRX , and most common SQL databases.rr}r(h6X , and most common SQL databases.h7jubeubah=jubeh=Urowrubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]r(j)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r (h6XRobustr!h7jh8hZh=hh?}r"(hA]hB]hC]hD]hF]uhHKJh1]r#hRXRobustr$r%}r&(h6j!h7jubaubah=jubj)r'}r((h6Uh?}r)(hA]hB]hC]hD]hF]uh7jh1]r*h})r+}r,(h6XZUsing `RabbitMQ`, celery survives most error scenarios, and your tasks will never be lost.h7j'h8hZh=hh?}r-(hA]hB]hC]hD]hF]uhHKJh1]r.(hRXUsing r/r0}r1(h6XUsing h7j+ubcdocutils.nodes title_reference r2)r3}r4(h6X `RabbitMQ`h?}r5(hA]hB]hC]hD]hF]uh7j+h1]r6hRXRabbitMQr7r8}r9(h6Uh7j3ubah=Utitle_referencer:ubhRXJ, celery survives most error scenarios, and your tasks will never be lost.r;r<}r=(h6XJ, celery survives most error scenarios, and your tasks will never be lost.h7j+ubeubah=jubeh=jubj)r>}r?(h6Uh?}r@(hA]hB]hC]hD]hF]uh7jh1]rA(j)rB}rC(h6Uh?}rD(hA]hB]hC]hD]hF]uh7j>h1]rEh})rF}rG(h6X DistributedrHh7jBh8hZh=hh?}rI(hA]hB]hC]hD]hF]uhHKMh1]rJhRX DistributedrKrL}rM(h6jHh7jFubaubah=jubj)rN}rO(h6Uh?}rP(hA]hB]hC]hD]hF]uh7j>h1]rQh})rR}rS(h6XRuns on one or more machines. Supports `clustering`_ when used in combination with `RabbitMQ`_. You can set up new workers without central configuration (e.g. use your dads laptop while the queue is temporarily overloaded).h7jNh8hZh=hh?}rT(hA]hB]hC]hD]hF]uhHKMh1]rU(hRX'Runs on one or more machines. Supports rVrW}rX(h6X'Runs on one or more machines. Supports h7jRubh)rY}rZ(h6X `clustering`_jKh7jRh=hh?}r[(UnameX clusteringr\j X'http://www.rabbitmq.com/clustering.htmlr]hD]hC]hA]hB]hF]uh1]r^hRX clusteringr_r`}ra(h6Uh7jYubaubhRX when used in combination with rbrc}rd(h6X when used in combination with h7jRubh)re}rf(h6X `RabbitMQ`_jKh7jRh=hh?}rg(UnameXRabbitMQj j2hD]hC]hA]hB]hF]uh1]rhhRXRabbitMQrirj}rk(h6Uh7jeubaubhRX. You can set up new workers without central configuration (e.g. use your dads laptop while the queue is temporarily overloaded).rlrm}rn(h6X. You can set up new workers without central configuration (e.g. use your dads laptop while the queue is temporarily overloaded).h7jRubeubah=jubeh=jubj)ro}rp(h6Uh?}rq(hA]hB]hC]hD]hF]uh7jh1]rr(j)rs}rt(h6Uh?}ru(hA]hB]hC]hD]hF]uh7joh1]rvh})rw}rx(h6X Concurrencyryh7jsh8hZh=hh?}rz(hA]hB]hC]hD]hF]uhHKSh1]r{hRX Concurrencyr|r}}r~(h6jyh7jwubaubah=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7joh1]rh})r}r(h6XDTasks are executed in parallel using the ``multiprocessing`` module.h7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKSh1]r(hRX)Tasks are executed in parallel using the rr}r(h6X)Tasks are executed in parallel using the h7jubjd)r}r(h6X``multiprocessing``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRXmultiprocessingrr}r(h6Uh7jubah=jlubhRX module.rr}r(h6X module.h7jubeubah=jubeh=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]r(j)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6X Schedulingrh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKVh1]rhRX Schedulingrr}r(h6jh7jubaubah=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6XxSupports recurring tasks like cron, or specifying an exact date or countdown for when after the task should be executed.rh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKVh1]rhRXxSupports recurring tasks like cron, or specifying an exact date or countdown for when after the task should be executed.rr}r(h6jh7jubaubah=jubeh=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]r(j)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6X Performancerh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKZh1]rhRX Performancerr}r(h6jh7jubaubah=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6X+Able to execute tasks while the user waits.rh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKZh1]rhRX+Able to execute tasks while the user waits.rr}r(h6jh7jubaubah=jubeh=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]r(j)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6X Return Valuesrh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHK\h1]rhRX Return Valuesrr}r(h6jh7jubaubah=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6XTask return values can be saved to the selected result store backend. You can wait for the result, retrieve it later, or ignore it.rh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHK\h1]rhRXTask return values can be saved to the selected result store backend. You can wait for the result, retrieve it later, or ignore it.rr}r(h6jh7jubaubah=jubeh=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]r(j)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6X Result Storesrh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHK`h1]rhRX Result Storesrr}r(h6jh7jubaubah=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6XKDatabase, `MongoDB`_, `Redis`_, `Tokyo Tyrant`, `AMQP`_ (high performance).h7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHK`h1]r(hRX Database, rr}r(h6X Database, h7jubh)r}r(h6X `MongoDB`_jKh7jh=hh?}r(UnameXMongoDBj Xhttp://www.mongodb.org/rhD]hC]hA]hB]hF]uh1]rhRXMongoDBrr }r (h6Uh7jubaubhRX, r r }r (h6X, h7jubh)r}r(h6X`Redis`_jKh7jh=hh?}r(UnameXRedisj jhD]hC]hA]hB]hF]uh1]rhRXRedisrr}r(h6Uh7jubaubhRX, rr}r(h6X, h7jubj2)r}r(h6X`Tokyo Tyrant`h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRX Tokyo Tyrantrr}r(h6Uh7jubah=j:ubhRX, rr }r!(h6X, h7jubh)r"}r#(h6X`AMQP`_jKh7jh=hh?}r$(UnameXAMQPj Xhttp://www.amqp.org/r%hD]hC]hA]hB]hF]uh1]r&hRXAMQPr'r(}r)(h6Uh7j"ubaubhRX (high performance).r*r+}r,(h6X (high performance).h7jubeubah=jubeh=jubj)r-}r.(h6Uh?}r/(hA]hB]hC]hD]hF]uh7jh1]r0(j)r1}r2(h6Uh?}r3(hA]hB]hC]hD]hF]uh7j-h1]r4h})r5}r6(h6XWebhooksr7h7j1h8hZh=hh?}r8(hA]hB]hC]hD]hF]uhHKch1]r9hRXWebhooksr:r;}r<(h6j7h7j5ubaubah=jubj)r=}r>(h6Uh?}r?(hA]hB]hC]hD]hF]uh7j-h1]r@h})rA}rB(h6XMYour tasks can also be HTTP callbacks, enabling cross-language communication.rCh7j=h8hZh=hh?}rD(hA]hB]hC]hD]hF]uhHKch1]rEhRXMYour tasks can also be HTTP callbacks, enabling cross-language communication.rFrG}rH(h6jCh7jAubaubah=jubeh=jubj)rI}rJ(h6Uh?}rK(hA]hB]hC]hD]hF]uh7jh1]rL(j)rM}rN(h6Uh?}rO(hA]hB]hC]hD]hF]uh7jIh1]rPh})rQ}rR(h6X Rate limitingrSh7jMh8hZh=hh?}rT(hA]hB]hC]hD]hF]uhHKfh1]rUhRX Rate limitingrVrW}rX(h6jSh7jQubaubah=jubj)rY}rZ(h6Uh?}r[(hA]hB]hC]hD]hF]uh7jIh1]r\h})r]}r^(h6XSupports rate limiting by using the token bucket algorithm, which accounts for bursts of traffic. Rate limits can be set for each task type, or globally for all.r_h7jYh8hZh=hh?}r`(hA]hB]hC]hD]hF]uhHKfh1]rahRXSupports rate limiting by using the token bucket algorithm, which accounts for bursts of traffic. Rate limits can be set for each task type, or globally for all.rbrc}rd(h6j_h7j]ubaubah=jubeh=jubj)re}rf(h6Uh?}rg(hA]hB]hC]hD]hF]uh7jh1]rh(j)ri}rj(h6Uh?}rk(hA]hB]hC]hD]hF]uh7jeh1]rlh})rm}rn(h6XRoutingroh7jih8hZh=hh?}rp(hA]hB]hC]hD]hF]uhHKkh1]rqhRXRoutingrrrs}rt(h6joh7jmubaubah=jubj)ru}rv(h6Uh?}rw(hA]hB]hC]hD]hF]uh7jeh1]rxh})ry}rz(h6X@Using AMQP you can route tasks arbitrarily to different workers.r{h7juh8hZh=hh?}r|(hA]hB]hC]hD]hF]uhHKkh1]r}hRX@Using AMQP you can route tasks arbitrarily to different workers.r~r}r(h6j{h7jyubaubah=jubeh=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]r(j)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6XRemote-controlrh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKnh1]rhRXRemote-controlrr}r(h6jh7jubaubah=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6X6You can rate limit and delete (revoke) tasks remotely.rh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKnh1]rhRX6You can rate limit and delete (revoke) tasks remotely.rr}r(h6jh7jubaubah=jubeh=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]r(j)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6X Monitoringrh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKqh1]rhRX Monitoringrr}r(h6jh7jubaubah=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6XYou can capture everything happening with the workers in real-time by subscribing to events. A real-time web monitor is in development.rh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKqh1]rhRXYou can capture everything happening with the workers in real-time by subscribing to events. A real-time web monitor is in development.rr}r(h6jh7jubaubah=jubeh=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]r(j)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6X Serializationrh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKuh1]rhRX Serializationrr}r(h6jh7jubaubah=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6X|Supports Pickle, JSON, YAML, or easily defined custom schemes. One task invocation can have a different scheme than another.rh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKuh1]rhRX|Supports Pickle, JSON, YAML, or easily defined custom schemes. One task invocation can have a different scheme than another.rr}r(h6jh7jubaubah=jubeh=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]r(j)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6X Tracebacksrh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKyh1]rhRX Tracebacksrr}r(h6jh7jubaubah=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6XHErrors and tracebacks are stored and can be investigated after the fact.rh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKyh1]rhRXHErrors and tracebacks are stored and can be investigated after the fact.rr}r(h6jh7jubaubah=jubeh=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]r(j)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6XUUIDrh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHK|h1]rhRXUUIDrr}r(h6jh7jubaubah=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rh})r}r(h6XxEvery task has an UUID (Universally Unique Identifier), which is the task id used to query task status and return value.rh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHK|h1]r hRXxEvery task has an UUID (Universally Unique Identifier), which is the task id used to query task status and return value.r r }r (h6jh7jubaubah=jubeh=jubj)r }r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]r(j)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7j h1]rh})r}r(h6XRetriesrh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKh1]rhRXRetriesrr}r(h6jh7jubaubah=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7j h1]r h})r!}r"(h6XnTasks can be retried if they fail, with configurable maximum number of retries, and delays between each retry.r#h7jh8hZh=hh?}r$(hA]hB]hC]hD]hF]uhHKh1]r%hRXnTasks can be retried if they fail, with configurable maximum number of retries, and delays between each retry.r&r'}r((h6j#h7j!ubaubah=jubeh=jubj)r)}r*(h6Uh?}r+(hA]hB]hC]hD]hF]uh7jh1]r,(j)r-}r.(h6Uh?}r/(hA]hB]hC]hD]hF]uh7j)h1]r0h})r1}r2(h6X Task Setsr3h7j-h8hZh=hh?}r4(hA]hB]hC]hD]hF]uhHKh1]r5hRX Task Setsr6r7}r8(h6j3h7j1ubaubah=jubj)r9}r:(h6Uh?}r;(hA]hB]hC]hD]hF]uh7j)h1]r<h})r=}r>(h6XA Task set is a task consisting of several sub-tasks. You can find out how many, or if all of the sub-tasks has been executed, and even retrieve the results in order. Progress bars, anyone?r?h7j9h8hZh=hh?}r@(hA]hB]hC]hD]hF]uhHKh1]rAhRXA Task set is a task consisting of several sub-tasks. You can find out how many, or if all of the sub-tasks has been executed, and even retrieve the results in order. Progress bars, anyone?rBrC}rD(h6j?h7j=ubaubah=jubeh=jubj)rE}rF(h6Uh?}rG(hA]hB]hC]hD]hF]uh7jh1]rH(j)rI}rJ(h6Uh?}rK(hA]hB]hC]hD]hF]uh7jEh1]rLh})rM}rN(h6X Made for WebrOh7jIh8hZh=hh?}rP(hA]hB]hC]hD]hF]uhHKh1]rQhRX Made for WebrRrS}rT(h6jOh7jMubaubah=jubj)rU}rV(h6Uh?}rW(hA]hB]hC]hD]hF]uh7jEh1]rXh})rY}rZ(h6X_You can query status and results via URLs, enabling the ability to poll task status using Ajax.r[h7jUh8hZh=hh?}r\(hA]hB]hC]hD]hF]uhHKh1]r]hRX_You can query status and results via URLs, enabling the ability to poll task status using Ajax.r^r_}r`(h6j[h7jYubaubah=jubeh=jubj)ra}rb(h6Uh?}rc(hA]hB]hC]hD]hF]uh7jh1]rd(j)re}rf(h6Uh?}rg(hA]hB]hC]hD]hF]uh7jah1]rhh})ri}rj(h6X Error e-mailsrkh7jeh8hZh=hh?}rl(hA]hB]hC]hD]hF]uhHKh1]rmhRX Error e-mailsrnro}rp(h6jkh7jiubaubah=jubj)rq}rr(h6Uh?}rs(hA]hB]hC]hD]hF]uh7jah1]rth})ru}rv(h6XICan be configured to send e-mails to the administrators when tasks fails.rwh7jqh8hZh=hh?}rx(hA]hB]hC]hD]hF]uhHKh1]ryhRXICan be configured to send e-mails to the administrators when tasks fails.rzr{}r|(h6jwh7juubaubah=jubeh=jubj)r}}r~(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]r(j)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7j}h1]rh})r}r(h6X Supervisedrh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKh1]rhRX Supervisedrr}r(h6jh7jubaubah=jubj)r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7j}h1]rh})r}r(h6XEPool workers are supervised and automatically replaced if they crash.rh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKh1]rhRXEPool workers are supervised and automatically replaced if they crash.rr}r(h6jh7jubaubah=jubeh=jubeh=Utbodyrubeh=Utgrouprubaubj:)r}r(h6X(.. _`RabbitMQ`: http://www.rabbitmq.com/j=Kh7jh8hZh=j>h?}r(j j2hD]rh(ahC]hA]hB]hF]rhauhHKhIhh1]ubj:)r}r(h6X9.. _`clustering`: http://www.rabbitmq.com/clustering.htmlj=Kh7jh8hZh=j>h?}r(j j]hD]rh ahC]hA]hB]hF]rhauhHKhIhh1]ubj:)r}r(h6X .. _`AMQP`: http://www.amqp.org/j=Kh7jh8hZh=j>h?}r(j j%hD]rh0ahC]hA]hB]hF]rhauhHKhIhh1]ubj:)r}r(h6X'.. _`Stomp`: http://stomp.codehaus.org/j=Kh7jh8hZh=j>h?}r(j jhD]rh%ahC]hA]hB]hF]rh auhHKhIhh1]ubj:)r}r(h6X&.. _`MongoDB`: http://www.mongodb.org/j=Kh7jh8hZh=j>h?}r(j jhD]rh-ahC]hA]hB]hF]rhauhHKhIhh1]ubj:)r}r(h6X,.. _`Redis`: http://code.google.com/p/redis/j=Kh7jh8hZh=j>h?}r(j jhD]rh'ahC]hA]hB]hF]rh auhHKhIhh1]ubj:)r}r(h6X8.. _`Tokyo Tyrant`: http://tokyocabinet.sourceforge.net/h7jh8hZh=j>h?}r(j X$http://tokyocabinet.sourceforge.net/hD]rh*ahC]hA]hB]hF]rhauhHKhIhh1]ubeubh3)r}r(h6Uh7h4h8hZh=h>h?}r(hA]hB]hC]hD]rh&ahF]rh auhHKhIhh1]r(hK)r}r(h6X Documentationrh7jh8hZh=hOh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]rhRX Documentationrr}r(h6jh7jubaubh})r}r(h6X^The `latest documentation`_ with user guides, tutorials and API reference is hosted at Github.h7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]r(hRXThe rr}r(h6XThe h7jubh)r}r(h6X`latest documentation`_jKh7jh=hh?}r(UnameXlatest documentationj Xhttp://ask.github.com/celery/rhD]hC]hA]hB]hF]uh1]rhRXlatest documentationrr}r(h6Uh7jubaubhRXC with user guides, tutorials and API reference is hosted at Github.rr}r(h6XC with user guides, tutorials and API reference is hosted at Github.h7jubeubj:)r}r(h6X9.. _`latest documentation`: http://ask.github.com/celery/j=Kh7jh8hZh=j>h?}r(j jhD]rh+ahC]hA]hB]hF]rhauhHKhIhh1]ubeubh3)r}r(h6Uh7h4h8hZh=h>h?}r(hA]hB]hC]hD]rh!ahF]rhauhHKhIhh1]r(hK)r}r(h6X Installationrh7jh8hZh=hOh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]rhRX Installationrr}r(h6jh7jubaubh})r}r(h6XUYou can install ``celery`` either via the Python Package Index (PyPI) or from source.h7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]r(hRXYou can install rr}r(h6XYou can install h7jubjd)r}r(h6X ``celery``h?}r(hA]hB]hC]hD]hF]uh7jh1]rhRXceleryrr}r(h6Uh7jubah=jlubhRX; either via the Python Package Index (PyPI) or from source.rr}r(h6X; either via the Python Package Index (PyPI) or from source.h7jubeubh})r}r(h6XTo install using ``pip``,::rh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]r(hRXTo install using rr}r (h6XTo install using h7jubjd)r }r (h6X``pip``h?}r (hA]hB]hC]hD]hF]uh7jh1]r hRXpiprr}r(h6Uh7j ubah=jlubhRX,:rr}r(h6X,:h7jubeubj)r}r(h6X$ pip install celeryh7jh8hZh=jh?}r(jjhD]hC]hA]hB]hF]uhHKhIhh1]rhRX$ pip install celeryrr}r(h6Uh7jubaubh})r}r(h6X$To install using ``easy_install``,::rh7jh8hZh=hh?}r(hA]hB]hC]hD]hF]uhHKhIhh1]r(hRXTo install using r r!}r"(h6XTo install using h7jubjd)r#}r$(h6X``easy_install``h?}r%(hA]hB]hC]hD]hF]uh7jh1]r&hRX easy_installr'r(}r)(h6Uh7j#ubah=jlubhRX,:r*r+}r,(h6X,:h7jubeubj)r-}r.(h6X$ easy_install celeryh7jh8hZh=jh?}r/(jjhD]hC]hA]hB]hF]uhHKhIhh1]r0hRX$ easy_install celeryr1r2}r3(h6Uh7j-ubaubh3)r4}r5(h6Uh7jh8hZh=h>h?}r6(hA]hB]hC]hD]r7h.ahF]r8hauhHKhIhh1]r9(hK)r:}r;(h6X&Downloading and installing from sourcer<h7j4h8hZh=hOh?}r=(hA]hB]hC]hD]hF]uhHKhIhh1]r>hRX&Downloading and installing from sourcer?r@}rA(h6j<h7j:ubaubh})rB}rC(h6XRDownload the latest version of ``celery`` from http://pypi.python.org/pypi/celery/h7j4h8hZh=hh?}rD(hA]hB]hC]hD]hF]uhHKhIhh1]rE(hRXDownload the latest version of rFrG}rH(h6XDownload the latest version of h7jBubjd)rI}rJ(h6X ``celery``h?}rK(hA]hB]hC]hD]hF]uh7jBh1]rLhRXceleryrMrN}rO(h6Uh7jIubah=jlubhRX from rPrQ}rR(h6X from h7jBubh)rS}rT(h6X#http://pypi.python.org/pypi/celery/rUh?}rV(UrefurijUhD]hC]hA]hB]hF]uh7jBh1]rWhRX#http://pypi.python.org/pypi/celery/rXrY}rZ(h6Uh7jSubah=hubeubh})r[}r\(h6X,You can install it by doing the following,::r]h7j4h8hZh=hh?}r^(hA]hB]hC]hD]hF]uhHKhIhh1]r_hRX+You can install it by doing the following,:r`ra}rb(h6X+You can install it by doing the following,:h7j[ubaubj)rc}rd(h6Xl$ tar xvfz celery-0.0.0.tar.gz $ cd celery-0.0.0 $ python setup.py build # python setup.py install # as rooth7j4h8hZh=jh?}re(jjhD]hC]hA]hB]hF]uhHKhIhh1]rfhRXl$ tar xvfz celery-0.0.0.tar.gz $ cd celery-0.0.0 $ python setup.py build # python setup.py install # as rootrgrh}ri(h6Uh7jcubaubeubh3)rj}rk(h6Uh7jh8hZh=h>h?}rl(hA]hB]hC]hD]rmh)ahF]rnhauhHKhIhh1]ro(hK)rp}rq(h6XUsing the development versionrrh7jjh8hZh=hOh?}rs(hA]hB]hC]hD]hF]uhHKhIhh1]rthRXUsing the development versionrurv}rw(h6jrh7jpubaubh})rx}ry(h6X5You can clone the repository by doing the following::rzh7jjh8hZh=hh?}r{(hA]hB]hC]hD]hF]uhHKhIhh1]r|hRX4You can clone the repository by doing the following:r}r~}r(h6X4You can clone the repository by doing the following:h7jxubaubj)r}r(h6X+$ git clone git://github.com/ask/celery.gith7jjh8X0internal padding after includes/introduction.txtrh=jh?}r(jjhD]hC]hA]hB]hF]uhHKhIhh1]rhRX+$ git clone git://github.com/ask/celery.gitrr}r(h6Uh7jubaubeubeubeubah6UU transformerrNU footnote_refsr}rUrefnamesr}r(j\]rjYaXamqp]rj"aXmongodb]rjaXstomp]rjaXredis]r(j jeXrabbitmq]r(j/jjeeXlatest documentation]rjaX)operate with other languages via webhooks]rjauUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rhIhU current_linerNUtransform_messagesr]rcdocutils.nodes system_message r)r}r(h6Uh?}r(hA]UlevelKhD]hC]UsourcehZhB]hF]UlineKUtypeUINFOruh1]rh})r}r(h6Uh?}r(hA]hB]hC]hD]hF]uh7jh1]rhRX2Hyperlink target "tokyo tyrant" is not referenced.rr}r(h6Uh7jubah=hubah=Usystem_messagerubaUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrjU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNhONUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUZ/var/build/user_builds/celery/checkouts/1.0-archived/docs/getting-started/introduction.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(h jh!jh"jh#h4h$jBh%jh&jh'jh(jh)jjh+jh.j4h-jh0jh*jh/jxh,j;uUsubstitution_namesr}rh=hIh?}r(hA]hD]hC]Usourceh;hB]hF]uU footnotesr]rUrefidsr}rub.PKXDD [4;celery-1.0-archived/.doctrees/getting-started/index.doctreecdocutils.nodes document q)q}q(U nametypesq}qXgetting startedqNsUsubstitution_defsq}qUparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startq KUnameidsq}qhUgetting-startedqsUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qXS/var/build/user_builds/celery/checkouts/1.0-archived/docs/getting-started/index.rstqq}qbUtagnameqUsectionqU attributesq}q (Udupnamesq!]Uclassesq"]Ubackrefsq#]Uidsq$]q%haUnamesq&]q'hauUlineq(KUdocumentq)hh]q*(cdocutils.nodes title q+)q,}q-(hXGetting Startedq.hhhhhUtitleq/h}q0(h!]h"]h#]h$]h&]uh(Kh)hh]q1cdocutils.nodes Text q2XGetting Startedq3q4}q5(hh.hh,ubaubcdocutils.nodes field_list q6)q7}q8(hUhhhhhU field_listq9h}q:(h!]h"]h#]h$]h&]uh(Kh)hh]q;(cdocutils.nodes field q<)q=}q>(hUhh7hhhUfieldq?h}q@(h!]h"]h#]h$]h&]uh(Kh)hh]qA(cdocutils.nodes field_name qB)qC}qD(hXReleaseqEh}qF(h!]h"]h#]h$]h&]uhh=h]qGh2XReleaseqHqI}qJ(hhEhhCubahU field_nameqKubcdocutils.nodes field_body qL)qM}qN(hX |version|qOh}qP(h!]h"]h#]h$]h&]uhh=h]qQcdocutils.nodes paragraph qR)qS}qT(hhOhhMhhhU paragraphqUh}qV(h!]h"]h#]h$]h&]uh(Kh]qWh2X1.0qXqY}qZ(hU1.0q[hhSubaubahU field_bodyq\ubeubh<)q]}q^(hUhh7hhhh?h}q_(h!]h"]h#]h$]h&]uh(Kh)hh]q`(hB)qa}qb(hXDateqch}qd(h!]h"]h#]h$]h&]uhh]h]qeh2XDateqfqg}qh(hhchhaubahhKubhL)qi}qj(hX|today| h}qk(h!]h"]h#]h$]h&]uhh]h]qlhR)qm}qn(hX|today|qohhihhhhUh}qp(h!]h"]h#]h$]h&]uh(Kh]qqh2XFebruary 04, 2014qrqs}qt(hXFebruary 04, 2014hhmubaubahh\ubeubeubcdocutils.nodes compound qu)qv}qw(hUhhhhhUcompoundqxh}qy(h!]h"]qzUtoctree-wrapperq{ah#]h$]h&]uh(Nh)hh]q|csphinx.addnodes toctree q})q~}q(hUhhvhhhUtoctreeqh}q(UnumberedqKU includehiddenqhXgetting-started/indexqU titlesonlyqUglobqh$]h#]h!]h"]h&]Uentriesq]q(NXgetting-started/introductionqqNX#getting-started/broker-installationqqNX'getting-started/first-steps-with-celeryqqNX'getting-started/first-steps-with-djangoqqNXgetting-started/periodic-tasksqqNXgetting-started/resourcesqqeUhiddenqU includefilesq]q(hhhhhheUmaxdepthqKuh(Kh]ubaubeubahUU transformerqNU footnote_refsq}qUrefnamesq}qUsymbol_footnotesq]qUautofootnote_refsq]qUsymbol_footnote_refsq]qU citationsq]qh)hU current_lineqNUtransform_messagesq]qUreporterqNUid_startqKU autofootnotesq]qU citation_refsq}qUindirect_targetsq]qUsettingsq(cdocutils.frontend Values qoq}q(Ufootnote_backlinksqKUrecord_dependenciesqNU rfc_base_urlqUhttp://tools.ietf.org/html/qU tracebackqUpep_referencesqNUstrip_commentsqNU toc_backlinksqUentryqU language_codeqUenqU datestampqNU report_levelqKU _destinationqNU halt_levelqKU strip_classesqNh/NUerror_encoding_error_handlerqUbackslashreplaceqUdebugqNUembed_stylesheetqȉUoutput_encoding_error_handlerqUstrictqU sectnum_xformqKUdump_transformsqNU docinfo_xformqKUwarning_streamqNUpep_file_url_templateqUpep-%04dqUexit_status_levelqKUconfigqNUstrict_visitorqNUcloak_email_addressesqԈUtrim_footnote_reference_spaceqՉUenvqNUdump_pseudo_xmlqNUexpose_internalsqNUsectsubtitle_xformqىU source_linkqNUrfc_referencesqNUoutput_encodingqUutf-8qU source_urlqNUinput_encodingqU utf-8-sigqU_disable_configqNU id_prefixqUU tab_widthqKUerror_encodingqUUTF-8qU_sourceqUS/var/build/user_builds/celery/checkouts/1.0-archived/docs/getting-started/index.rstqUgettext_compactqU generatorqNUdump_internalsqNU smart_quotesqU pep_base_urlqUhttp://www.python.org/dev/peps/qUsyntax_highlightqUlongqUinput_encoding_error_handlerqhUauto_id_prefixqUidqUdoctitle_xformqUstrip_elements_with_classesqNU _config_filesq]Ufile_insertion_enabledqU raw_enabledqKU dump_settingsqNubUsymbol_footnote_startqKUidsq}qhhsUsubstitution_namesq}qhh)h}q(h!]h$]h#]Usourcehh"]h&]uU footnotesq]rUrefidsr}rub.PKXDDXSSIcelery-1.0-archived/.doctrees/getting-started/broker-installation.doctreecdocutils.nodes document q)q}q(U nametypesq}q(Xinstalling rabbitmqqX admin guideqXgitqXinstalling rabbitmq on os xq NX%starting/stopping the rabbitmq serverq NXaccess controlq Xconfiguring the system hostnameq NXbroker installationq NXsetting up rabbitmqqNXhomebrewquUsubstitution_defsq}qUparse_messagesq]qcdocutils.nodes system_message q)q}q(U rawsourceqUUparentqcdocutils.nodes section q)q}q(hUU referencedqKhh)q}q(hUhhUsourceqcdocutils.nodes reprunicode q Xa/var/build/user_builds/celery/checkouts/1.0-archived/docs/getting-started/broker-installation.rstq!q"}q#bUtagnameq$Usectionq%U attributesq&}q'(Udupnamesq(]Uclassesq)]Ubackrefsq*]Uidsq+]q,Ubroker-installationq-aUnamesq.]q/h auUlineq0KUdocumentq1hUchildrenq2]q3(cdocutils.nodes title q4)q5}q6(hXBroker Installationq7hhhh"h$Utitleq8h&}q9(h(]h)]h*]h+]h.]uh0Kh1hh2]q:cdocutils.nodes Text q;XBroker Installationq(hh7hh5ubaubhh)q?}q@(hUhKhhhh"h$h%h&}qA(h(]h)]h*]h+]qBUsetting-up-rabbitmqqCah.]qDhauh0Kh1hh2]qE(h4)qF}qG(hXSetting up RabbitMQqHhh?hh"h$h8h&}qI(h(]h)]h*]h+]h.]uh0Kh1hh2]qJh;XSetting up RabbitMQqKqL}qM(hhHhhFubaubcdocutils.nodes paragraph qN)qO}qP(hXqTo use celery we need to create a RabbitMQ user, a virtual host and allow that user access to that virtual host::hh?hh"h$U paragraphqQh&}qR(h(]h)]h*]h+]h.]uh0Kh1hh2]qSh;XpTo use celery we need to create a RabbitMQ user, a virtual host and allow that user access to that virtual host:qTqU}qV(hXpTo use celery we need to create a RabbitMQ user, a virtual host and allow that user access to that virtual host:hhOubaubcdocutils.nodes literal_block qW)qX}qY(hX$ rabbitmqctl add_user myuser mypassword $ rabbitmqctl add_vhost myvhost $ rabbitmqctl set_permissions -p myvhost myuser "" ".*" ".*"hh?hh"h$U literal_blockqZh&}q[(U xml:spaceq\Upreserveq]h+]h*]h(]h)]h.]uh0Kh1hh2]q^h;X$ rabbitmqctl add_user myuser mypassword $ rabbitmqctl add_vhost myvhost $ rabbitmqctl set_permissions -p myvhost myuser "" ".*" ".*"q_q`}qa(hUhhXubaubhN)qb}qc(hXMSee the RabbitMQ `Admin Guide`_ for more information about `access control`_.qdhh?hh"h$hQh&}qe(h(]h)]h*]h+]h.]uh0Kh1hh2]qf(h;XSee the RabbitMQ qgqh}qi(hXSee the RabbitMQ hhbubcdocutils.nodes reference qj)qk}ql(hX`Admin Guide`_UresolvedqmKhhbh$U referenceqnh&}qo(UnameX Admin GuideUrefuriqpX(http://www.rabbitmq.com/admin-guide.htmlqqh+]h*]h(]h)]h.]uh2]qrh;X Admin Guideqsqt}qu(hUhhkubaubh;X for more information about qvqw}qx(hX for more information about hhbubhj)qy}qz(hX`access control`_hmKhhbh$hnh&}q{(UnameXaccess controlhpX7http://www.rabbitmq.com/admin-guide.html#access-controlq|h+]h*]h(]h)]h.]uh2]q}h;Xaccess controlq~q}q(hUhhyubaubh;X.q}q(hX.hhbubeubcdocutils.nodes target q)q}q(hX;.. _`Admin Guide`: http://www.rabbitmq.com/admin-guide.htmlhKhh?hh"h$Utargetqh&}q(hphqh+]qU admin-guideqah*]h(]h)]h.]qhauh0Kh1hh2]ubh)q}q(hXM.. _`access control`: http://www.rabbitmq.com/admin-guide.html#access-controlhKhh?hh"h$hh&}q(hph|h+]qUaccess-controlqah*]h(]h)]h.]qh auh0Kh1hh2]ubeubh)q}q(hUhKhhhh"h$h%h&}q(h(]h)]h*]h+]qUinstalling-rabbitmq-on-os-xqah.]qh auh0K!h1hh2]q(h4)q}q(hXInstalling RabbitMQ on OS Xqhhhh"h$h8h&}q(h(]h)]h*]h+]h.]uh0K!h1hh2]qh;XInstalling RabbitMQ on OS Xqq}q(hhhhubaubhN)q}q(hXThe easiest way to install RabbitMQ on Snow Leopard is using `Homebrew`_; the new and shiny package management system for OS X.hhhh"h$hQh&}q(h(]h)]h*]h+]h.]uh0K#h1hh2]q(h;X=The easiest way to install RabbitMQ on Snow Leopard is using qq}q(hX=The easiest way to install RabbitMQ on Snow Leopard is using hhubhj)q}q(hX `Homebrew`_hmKhhh$hnh&}q(UnameXHomebrewhpX http://github.com/mxcl/homebrew/qh+]h*]h(]h)]h.]uh2]qh;XHomebrewqq}q(hUhhubaubh;X7; the new and shiny package management system for OS X.qq}q(hX7; the new and shiny package management system for OS X.hhubeubhN)q}q(hXIn this example we'll install homebrew into ``/lol``, but you can choose whichever destination, even in your home directory if you want, as one of the strengths of homebrew is that it's relocateable.hhhh"h$hQh&}q(h(]h)]h*]h+]h.]uh0K&h1hh2]q(h;X,In this example we'll install homebrew into qq}q(hX,In this example we'll install homebrew into hhubcdocutils.nodes literal q)q}q(hX``/lol``h&}q(h(]h)]h*]h+]h.]uhhh2]qh;X/lolqq}q(hUhhubah$Uliteralqubh;X, but you can choose whichever destination, even in your home directory if you want, as one of the strengths of homebrew is that it's relocateable.q…q}q(hX, but you can choose whichever destination, even in your home directory if you want, as one of the strengths of homebrew is that it's relocateable.hhubeubhN)q}q(hXHomebrew is actually a `git`_ repository, so to install homebrew, you first need to install git. Download and install from the disk image at http://code.google.com/p/git-osx-installer/downloads/list?can=3hhhh"h$hQh&}q(h(]h)]h*]h+]h.]uh0K*h1hh2]q(h;XHomebrew is actually a qɅq}q(hXHomebrew is actually a hhubhj)q}q(hX`git`_hmKhhh$hnh&}q(UnameXgitqhpXhttp://git-scm.orgqh+]h*]h(]h)]h.]uh2]qh;Xgitq҅q}q(hUhhubaubh;Xp repository, so to install homebrew, you first need to install git. Download and install from the disk image at qՅq}q(hXp repository, so to install homebrew, you first need to install git. Download and install from the disk image at hhubhj)q}q(hX?http://code.google.com/p/git-osx-installer/downloads/list?can=3qh&}q(Urefurihh+]h*]h(]h)]h.]uhhh2]qh;X?http://code.google.com/p/git-osx-installer/downloads/list?can=3q݅q}q(hUhhubah$hnubeubhN)q}q(hX[When git is installed you can finally clone the repo, storing it at the ``/lol`` location::hhhh"h$hQh&}q(h(]h)]h*]h+]h.]uh0K.h1hh2]q(h;XHWhen git is installed you can finally clone the repo, storing it at the q䅁q}q(hXHWhen git is installed you can finally clone the repo, storing it at the hhubh)q}q(hX``/lol``h&}q(h(]h)]h*]h+]h.]uhhh2]qh;X/lolq녁q}q(hUhhubah$hubh;X location:qq}q(hX location:hhubeubhW)q}q(hX/$ git clone git://github.com/mxcl/homebrew /lolhhhh"h$hZh&}q(h\h]h+]h*]h(]h)]h.]uh0K1h1hh2]qh;X/$ git clone git://github.com/mxcl/homebrew /lolqq}q(hUhhubaubhN)q}q(hXBrew comes with a simple utility called ``brew``, used to install, remove and query packages. To use it you first have to add it to ``PATH``, by adding the following line to the end of your ``~/.profile``::hhhh"h$hQh&}q(h(]h)]h*]h+]h.]uh0K4h1hh2]q(h;X(Brew comes with a simple utility called qq}q(hX(Brew comes with a simple utility called hhubh)q}r(hX``brew``h&}r(h(]h)]h*]h+]h.]uhhh2]rh;Xbrewrr}r(hUhhubah$hubh;XT, used to install, remove and query packages. To use it you first have to add it to rr}r(hXT, used to install, remove and query packages. To use it you first have to add it to hhubh)r }r (hX``PATH``h&}r (h(]h)]h*]h+]h.]uhhh2]r h;XPATHr r}r(hUhj ubah$hubh;X2, by adding the following line to the end of your rr}r(hX2, by adding the following line to the end of your hhubh)r}r(hX``~/.profile``h&}r(h(]h)]h*]h+]h.]uhhh2]rh;X ~/.profilerr}r(hUhjubah$hubh;X:r}r(hX:hhubeubhW)r}r(hX&export PATH="/lol/bin:/lol/sbin:$PATH"hhhh"h$hZh&}r(h\h]h+]h*]h(]h)]h.]uh0K8h1hh2]rh;X&export PATH="/lol/bin:/lol/sbin:$PATH"r r!}r"(hUhjubaubhN)r#}r$(hX!Save your profile and reload it::r%hhhh"h$hQh&}r&(h(]h)]h*]h+]h.]uh0K:h1hh2]r'h;X Save your profile and reload it:r(r)}r*(hX Save your profile and reload it:hj#ubaubhW)r+}r,(hX$ source ~/.profilehhhh"h$hZh&}r-(h\h]h+]h*]h(]h)]h.]uh0Kr?}r@(hUhj:ubah$hubh;X:rA}rB(hX:hj2ubeubhW)rC}rD(hX$ brew install rabbitmqhhhh"h$hZh&}rE(h\h]h+]h*]h(]h)]h.]uh0KAh1hh2]rFh;X$ brew install rabbitmqrGrH}rI(hUhjCubaubh)rJ}rK(hX0.. _`Homebrew`: http://github.com/mxcl/homebrew/hKhhhh"h$hh&}rL(hphh+]rMUhomebrewrNah*]h(]h)]h.]rOhauh0KDh1hh2]ubh)rP}rQ(hX.. _`git`: http://git-scm.orghKhhhh"h$hh&}rR(hphh+]rSUgitrTah*]h(]h)]h.]rUhauh0KEh1hh2]ubh)rV}rW(hUhhhh"h$h%h&}rX(h(]h)]h*]h+]rYUconfiguring-the-system-hostnamerZah.]r[h auh0KHh1hh2]r\(h4)r]}r^(hXConfiguring the system hostnamer_hjVhh"h$h8h&}r`(h(]h)]h*]h+]h.]uh0KHh1hh2]rah;XConfiguring the system hostnamerbrc}rd(hj_hj]ubaubhN)re}rf(hXIf you're using a DHCP server that is giving you a random hostname, you need to permanently configure the hostname. This is because RabbitMQ uses the hostname to communicate with nodes.rghjVhh"h$hQh&}rh(h(]h)]h*]h+]h.]uh0KJh1hh2]rih;XIf you're using a DHCP server that is giving you a random hostname, you need to permanently configure the hostname. This is because RabbitMQ uses the hostname to communicate with nodes.rjrk}rl(hjghjeubaubhN)rm}rn(hX=Use the ``scutil`` command to permanently set your hostname::rohjVhh"h$hQh&}rp(h(]h)]h*]h+]h.]uh0KNh1hh2]rq(h;XUse the rrrs}rt(hXUse the hjmubh)ru}rv(hX ``scutil``h&}rw(h(]h)]h*]h+]h.]uhjmh2]rxh;Xscutilryrz}r{(hUhjuubah$hubh;X* command to permanently set your hostname:r|r}}r~(hX* command to permanently set your hostname:hjmubeubhW)r}r(hX'sudo scutil --set HostName myhost.localhjVhh"h$hZh&}r(h\h]h+]h*]h(]h)]h.]uh0KPh1hh2]rh;X'sudo scutil --set HostName myhost.localrr}r(hUhjubaubhN)r}r(hXaThen add that hostname to ``/etc/hosts`` so it's possible to resolve it back into an IP address::hjVhh"h$hQh&}r(h(]h)]h*]h+]h.]uh0KRh1hh2]r(h;XThen add that hostname to rr}r(hXThen add that hostname to hjubh)r}r(hX``/etc/hosts``h&}r(h(]h)]h*]h+]h.]uhjh2]rh;X /etc/hostsrr}r(hUhjubah$hubh;X8 so it's possible to resolve it back into an IP address:rr}r(hX8 so it's possible to resolve it back into an IP address:hjubeubhW)r}r(hX-127.0.0.1 localhost myhost myhost.localhjVhh"h$hZh&}r(h\h]h+]h*]h(]h)]h.]uh0KUh1hh2]rh;X-127.0.0.1 localhost myhost myhost.localrr}r(hUhjubaubhN)r}r(hXtIf you start the rabbitmq server, your rabbit node should now be ``rabbit@myhost``, as verified by ``rabbitmqctl``::hjVhh"h$hQh&}r(h(]h)]h*]h+]h.]uh0KWh1hh2]r(h;XAIf you start the rabbitmq server, your rabbit node should now be rr}r(hXAIf you start the rabbitmq server, your rabbit node should now be hjubh)r}r(hX``rabbit@myhost``h&}r(h(]h)]h*]h+]h.]uhjh2]rh;X rabbit@myhostrr}r(hUhjubah$hubh;X, as verified by rr}r(hX, as verified by hjubh)r}r(hX``rabbitmqctl``h&}r(h(]h)]h*]h+]h.]uhjh2]rh;X rabbitmqctlrr}r(hUhjubah$hubh;X:r}r(hX:hjubeubhW)r}r(hX$ sudo rabbitmqctl status Status of node rabbit@myhost ... [{running_applications,[{rabbit,"RabbitMQ","1.7.1"}, {mnesia,"MNESIA CXC 138 12","4.4.12"}, {os_mon,"CPO CXC 138 46","2.2.4"}, {sasl,"SASL CXC 138 11","2.1.8"}, {stdlib,"ERTS CXC 138 10","1.16.4"}, {kernel,"ERTS CXC 138 10","2.13.4"}]}, {nodes,[rabbit@myhost]}, {running_nodes,[rabbit@myhost]}] ...done.hjVhh"h$hZh&}r(h\h]h+]h*]h(]h)]h.]uh0KZh1hh2]rh;X$ sudo rabbitmqctl status Status of node rabbit@myhost ... [{running_applications,[{rabbit,"RabbitMQ","1.7.1"}, {mnesia,"MNESIA CXC 138 12","4.4.12"}, {os_mon,"CPO CXC 138 46","2.2.4"}, {sasl,"SASL CXC 138 11","2.1.8"}, {stdlib,"ERTS CXC 138 10","1.16.4"}, {kernel,"ERTS CXC 138 10","2.13.4"}]}, {nodes,[rabbit@myhost]}, {running_nodes,[rabbit@myhost]}] ...done.rr}r(hUhjubaubhN)r}r(hXThis is especially important if your DHCP server gives you a hostname starting with an IP address, (e.g. ``23.10.112.31.comcast.net``), because then RabbitMQ will try to use ``rabbit@23``, which is an illegal hostname.hjVhh"h$hQh&}r(h(]h)]h*]h+]h.]uh0Kfh1hh2]r(h;XiThis is especially important if your DHCP server gives you a hostname starting with an IP address, (e.g. rr}r(hXiThis is especially important if your DHCP server gives you a hostname starting with an IP address, (e.g. hjubh)r}r(hX``23.10.112.31.comcast.net``h&}r(h(]h)]h*]h+]h.]uhjh2]rh;X23.10.112.31.comcast.netrr}r(hUhjubah$hubh;X)), because then RabbitMQ will try to use rr}r(hX)), because then RabbitMQ will try to use hjubh)r}r(hX ``rabbit@23``h&}r(h(]h)]h*]h+]h.]uhjh2]rh;X rabbit@23rr}r(hUhjubah$hubh;X, which is an illegal hostname.rr}r(hX, which is an illegal hostname.hjubeubeubh)r}r(hUhhhh"h$h%h&}r(h(]h)]h*]h+]rU%starting-stopping-the-rabbitmq-serverrah.]rh auh0Kkh1hh2]r(h4)r}r(hX%Starting/Stopping the RabbitMQ serverrhjhh"h$h8h&}r(h(]h)]h*]h+]h.]uh0Kkh1hh2]rh;X%Starting/Stopping the RabbitMQ serverrr}r(hjhjubaubhN)r}r(hXTo start the server::rhjhh"h$hQh&}r(h(]h)]h*]h+]h.]uh0Kmh1hh2]rh;XTo start the server:rr}r(hXTo start the server:hjubaubhW)r}r(hX$ sudo rabbitmq-serverhjhh"h$hZh&}r(h\h]h+]h*]h(]h)]h.]uh0Koh1hh2]rh;X$ sudo rabbitmq-serverrr}r(hUhjubaubhN)r}r(hX`you can also run it in the background by adding the ``-detached`` option (note: only one dash)::hjhh"h$hQh&}r(h(]h)]h*]h+]h.]uh0Kqh1hh2]r(h;X4you can also run it in the background by adding the rr}r(hX4you can also run it in the background by adding the hjubh)r}r(hX ``-detached``h&}r(h(]h)]h*]h+]h.]uhjh2]rh;X -detachedrr}r(hUhjubah$hubh;X option (note: only one dash):rr}r(hX option (note: only one dash):hjubeubhW)r }r (hX $ sudo rabbitmq-server -detachedhjhh"h$hZh&}r (h\h]h+]h*]h(]h)]h.]uh0Kth1hh2]r h;X $ sudo rabbitmq-server -detachedr r}r(hUhj ubaubhN)r}r(hX\Never use ``kill`` to stop the RabbitMQ server, but rather use the ``rabbitmqctl`` command::hjhh"h$hQh&}r(h(]h)]h*]h+]h.]uh0Kvh1hh2]r(h;X Never use rr}r(hX Never use hjubh)r}r(hX``kill``h&}r(h(]h)]h*]h+]h.]uhjh2]rh;Xkillrr}r(hUhjubah$hubh;X1 to stop the RabbitMQ server, but rather use the rr}r (hX1 to stop the RabbitMQ server, but rather use the hjubh)r!}r"(hX``rabbitmqctl``h&}r#(h(]h)]h*]h+]h.]uhjh2]r$h;X rabbitmqctlr%r&}r'(hUhj!ubah$hubh;X command:r(r)}r*(hX command:hjubeubhW)r+}r,(hX$ sudo rabbitmqctl stophjhh"h$hZh&}r-(h\h]h+]h*]h(]h)]h.]uh0Kyh1hh2]r.h;X$ sudo rabbitmqctl stopr/r0}r1(hUhj+ubaubhN)r2}r3(hXLWhen the server is running, you can continue reading `Setting up RabbitMQ`_.r4hjhh"h$hQh&}r5(h(]h)]h*]h+]h.]uh0K{h1hh2]r6(h;X5When the server is running, you can continue reading r7r8}r9(hX5When the server is running, you can continue reading hj2ubhj)r:}r;(hX`Setting up RabbitMQ`_hmKhj2h$hnh&}r<(UnameXSetting up RabbitMQh+]h*]h(]h)]h.]Urefidr=hCuh2]r>h;XSetting up RabbitMQr?r@}rA(hUhj:ubaubh;X.rB}rC(hX.hj2ubeubeubeubeubhh"h$h%h&}rD(h(]rEXinstalling rabbitmqrFah)]h*]h+]rGUinstalling-rabbitmqrHah.]uh0Kh1hh2]rI(h4)rJ}rK(hXInstalling RabbitMQrLhhhh"h$h8h&}rM(h(]h)]h*]h+]h.]uh0Kh1hh2]rNh;XInstalling RabbitMQrOrP}rQ(hjLhjJubaubhN)rR}rS(hXgSee `Installing RabbitMQ`_ over at RabbitMQ's website. For Mac OS X see `Installing RabbitMQ on OS X`_.hhhh"h$hQh&}rT(h(]h)]h*]h+]h.]uh0Kh1hh2]rU(h;XSee rVrW}rX(hXSee hjRubhj)rY}rZ(hX`Installing RabbitMQ`_hmKhjRh$hnh&}r[(UnameXInstalling RabbitMQhpX$http://www.rabbitmq.com/install.htmlr\h+]h*]h(]h)]h.]uh2]r]h;XInstalling RabbitMQr^r_}r`(hUhjYubaubh;X. over at RabbitMQ's website. For Mac OS X see rarb}rc(hX. over at RabbitMQ's website. For Mac OS X see hjRubhj)rd}re(hX`Installing RabbitMQ on OS X`_hmKhjRh$hnh&}rf(UnameXInstalling RabbitMQ on OS Xh+]h*]h(]h)]h.]j=huh2]rgh;XInstalling RabbitMQ on OS Xrhri}rj(hUhjdubaubh;X.rk}rl(hX.hjRubeubh)rm}rn(hX?.. _`Installing RabbitMQ`: http://www.rabbitmq.com/install.htmlhKhhhh"h$hh&}ro(hpj\h+]rpUid1rqah*]h(]h)]h.]rrjFauh0K h1hh2]ubeubhh"h$Usystem_messagersh&}rt(h(]UlevelKh+]h*]rujqaUsourceh"h)]h.]UlineK UtypeUINFOrvuh0K h1hh2]rwhN)rx}ry(hUh&}rz(h(]h)]h*]h+]h.]uhhh2]r{h;X6Duplicate implicit target name: "installing rabbitmq".r|r}}r~(hUhjxubah$hQubaubaUcurrent_sourcerNU decorationrNUautofootnote_startrKUnameidsr}r(hjqhhhjTh hh jh hh jZh h-hhChjNuh2]rhahUU transformerrNU footnote_refsr}rUrefnamesr}r(Xinstalling rabbitmq]rjYaX admin guide]rhkah]rhaXaccess control]rhyaXinstalling rabbitmq on os x]rjdaXsetting up rabbitmq]rj:aXhomebrew]rhauUsymbol_footnotesr]rUautofootnote_refsr]rUsymbol_footnote_refsr]rU citationsr]rh1hU current_linerNUtransform_messagesr]rUreporterrNUid_startrKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r(Ufootnote_backlinksrKUrecord_dependenciesrNU rfc_base_urlrUhttp://tools.ietf.org/html/rU tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh8NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformrKUdump_transformsrNU docinfo_xformrKUwarning_streamrNUpep_file_url_templaterUpep-%04drUexit_status_levelrKUconfigrNUstrict_visitorrNUcloak_email_addressesrUtrim_footnote_reference_spacerUenvrNUdump_pseudo_xmlrNUexpose_internalsrNUsectsubtitle_xformrU source_linkrNUrfc_referencesrNUoutput_encodingrUutf-8rU source_urlrNUinput_encodingrU utf-8-sigrU_disable_configrNU id_prefixrUU tab_widthrKUerror_encodingrUUTF-8rU_sourcerUa/var/build/user_builds/celery/checkouts/1.0-archived/docs/getting-started/broker-installation.rstrUgettext_compactrU generatorrNUdump_internalsrNU smart_quotesrU pep_base_urlrUhttp://www.python.org/dev/peps/rUsyntax_highlightrUlongrUinput_encoding_error_handlerrjUauto_id_prefixrUidrUdoctitle_xformrUstrip_elements_with_classesrNU _config_filesr]Ufile_insertion_enabledrU raw_enabledrKU dump_settingsrNubUsymbol_footnote_startrKUidsr}r(jTjPjjjHhhCh?jqjmjZjVhhhhjNjJhhh-huUsubstitution_namesr}rh$h1h&}r(h(]h+]h*]Usourceh"h)]h.]uU footnotesr]rUrefidsr}rub.PKXDD޷""Dcelery-1.0-archived/.doctrees/getting-started/periodic-tasks.doctreecdocutils.nodes document q)q}q(U nametypesq}qXperiodic tasksqNsUsubstitution_defsq}qUparse_messagesq ]q Ucurrent_sourceq NU decorationq NUautofootnote_startq KUnameidsq}qhUperiodic-tasksqsUchildrenq]qcdocutils.nodes section q)q}q(U rawsourceqUUparentqhUsourceqcdocutils.nodes reprunicode qX\/var/build/user_builds/celery/checkouts/1.0-archived/docs/getting-started/periodic-tasks.rstqq}qbUtagnameqUsectionqU attributesq}q (Udupnamesq!]Uclassesq"]Ubackrefsq#]Uidsq$]q%haUnamesq&]q'hauUlineq(KUdocumentq)hh]q*(cdocutils.nodes title q+)q,}q-(hXPeriodic Tasksq.hhhhhUtitleq/h}q0(h!]h"]h#]h$]h&]uh(Kh)hh]q1cdocutils.nodes Text q2XPeriodic Tasksq3q4}q5(hh.hh,ubaubcdocutils.nodes paragraph q6)q7}q8(hX_You can schedule tasks to run at intervals like ``cron``. Here's an example of a periodic task:hhhhhU paragraphq9h}q:(h!]h"]h#]h$]h&]uh(Kh)hh]q;(h2X0You can schedule tasks to run at intervals like q(hX0You can schedule tasks to run at intervals like hh7ubcdocutils.nodes literal q?)q@}qA(hX``cron``h}qB(h!]h"]h#]h$]h&]uhh7h]qCh2XcronqDqE}qF(hUhh@ubahUliteralqGubh2X'. Here's an example of a periodic task:qHqI}qJ(hX'. Here's an example of a periodic task:hh7ubeubcdocutils.nodes literal_block qK)qL}qM(hXJfrom celery.task import PeriodicTask from celery.registry import tasks from datetime import timedelta class MyPeriodicTask(PeriodicTask): run_every = timedelta(seconds=30) def run(self, **kwargs): logger = self.get_logger(**kwargs) logger.info("Running periodic task!") >>> tasks.register(MyPeriodicTask)hhhhhU literal_blockqNh}qO(UlinenosqPUlanguageqQXpythonU xml:spaceqRUpreserveqSh$]h#]h!]h"]h&]uh(Kh)hh]qTh2XJfrom celery.task import PeriodicTask from celery.registry import tasks from datetime import timedelta class MyPeriodicTask(PeriodicTask): run_every = timedelta(seconds=30) def run(self, **kwargs): logger = self.get_logger(**kwargs) logger.info("Running periodic task!") >>> tasks.register(MyPeriodicTask)qUqV}qW(hUhhLubaubh6)qX}qY(hXIf you want a little more control over when the task is executed, for example, a particular time of day or day of the week, you can use ``crontab`` to set the ``run_every`` property:hhhhhh9h}qZ(h!]h"]h#]h$]h&]uh(Kh)hh]q[(h2XIf you want a little more control over when the task is executed, for example, a particular time of day or day of the week, you can use q\q]}q^(hXIf you want a little more control over when the task is executed, for example, a particular time of day or day of the week, you can use hhXubh?)q_}q`(hX ``crontab``h}qa(h!]h"]h#]h$]h&]uhhXh]qbh2Xcrontabqcqd}qe(hUhh_ubahhGubh2X to set the qfqg}qh(hX to set the hhXubh?)qi}qj(hX ``run_every``h}qk(h!]h"]h#]h$]h&]uhhXh]qlh2X run_everyqmqn}qo(hUhhiubahhGubh2X property:qpqq}qr(hX property:hhXubeubhK)qs}qt(hX5from celery.task import PeriodicTask from celery.task.schedules import crontab class EveryMondayMorningTask(PeriodicTask): run_every = crontab(hour=7, minute=30, day_of_week=1) def run(self, **kwargs): logger = self.get_logger(**kwargs) logger.info("Execute every Monday at 7:30AM.")hhhhhhNh}qu(hPhQXpythonhRhSh$]h#]h!]h"]h&]uh(Kh)hh]qvh2X5from celery.task import PeriodicTask from celery.task.schedules import crontab class EveryMondayMorningTask(PeriodicTask): run_every = crontab(hour=7, minute=30, day_of_week=1) def run(self, **kwargs): logger = self.get_logger(**kwargs) logger.info("Execute every Monday at 7:30AM.")qwqx}qy(hUhhsubaubh6)qz}q{(hXIf you want to use periodic tasks you need to start the ``celerybeat`` service. You have to make sure only one instance of this server is running at any time, or else you will end up with multiple executions of the same task.hhhhhh9h}q|(h!]h"]h#]h$]h&]uh(K&h)hh]q}(h2X8If you want to use periodic tasks you need to start the q~q}q(hX8If you want to use periodic tasks you need to start the hhzubh?)q}q(hX``celerybeat``h}q(h!]h"]h#]h$]h&]uhhzh]qh2X celerybeatqq}q(hUhhubahhGubh2X service. You have to make sure only one instance of this server is running at any time, or else you will end up with multiple executions of the same task.qq}q(hX service. You have to make sure only one instance of this server is running at any time, or else you will end up with multiple executions of the same task.hhzubeubh6)q}q(hX%To start the ``celerybeat`` service::qhhhhhh9h}q(h!]h"]h#]h$]h&]uh(K*h)hh]q(h2X To start the qq}q(hX To start the hhubh?)q}q(hX``celerybeat``h}q(h!]h"]h#]h$]h&]uhhh]qh2X celerybeatqq}q(hUhhubahhGubh2X service:qq}q(hX service:hhubeubhK)q}q(hX $ celerybeathhhhhhNh}q(hRhSh$]h#]h!]h"]h&]uh(K,h)hh]qh2X $ celerybeatqq}q(hUhhubaubh6)q}q(hXor if using Django::qhhhhhh9h}q(h!]h"]h#]h$]h&]uh(K.h)hh]qh2Xor if using Django:qq}q(hXor if using Django:hhubaubhK)q}q(hX$ python manage.py celerybeathhhhhhNh}q(hRhSh$]h#]h!]h"]h&]uh(K0h)hh]qh2X$ python manage.py celerybeatqq}q(hUhhubaubh6)q}q(hXYou can also start ``celerybeat`` with ``celeryd`` by using the ``-B`` option, this is convenient if you only have one server::hhhhhh9h}q(h!]h"]h#]h$]h&]uh(K3h)hh]q(h2XYou can also start qq}q(hXYou can also start hhubh?)q}q(hX``celerybeat``h}q(h!]h"]h#]h$]h&]uhhh]qh2X celerybeatqq}q(hUhhubahhGubh2X with qq}q(hX with hhubh?)q}q(hX ``celeryd``h}q(h!]h"]h#]h$]h&]uhhh]qh2Xcelerydqȅq}q(hUhhubahhGubh2X by using the q˅q}q(hX by using the hhubh?)q}q(hX``-B``h}q(h!]h"]h#]h$]h&]uhhh]qh2X-Bq҅q}q(hUhhubahhGubh2X8 option, this is convenient if you only have one server:qՅq}q(hX8 option, this is convenient if you only have one server:hhubeubhK)q}q(hX $ celeryd -BhhhhhhNh}q(hRhSh$]h#]h!]h"]h&]uh(K6h)hh]qh2X $ celeryd -Bq܅q}q(hUhhubaubh6)q}q(hXor if using Django::qhhhhhh9h}q(h!]h"]h#]h$]h&]uh(K8h)hh]qh2Xor if using Django:q䅁q}q(hXor if using Django:hhubaubhK)q}q(hX$ python manage.py celeryd -BhhhhhhNh}q(hRhSh$]h#]h!]h"]h&]uh(K:h)hh]qh2X$ python manage.py celeryd -Bq녁q}q(hUhhubaubeubahUU transformerqNU footnote_refsq}qUrefnamesq}qUsymbol_footnotesq]qUautofootnote_refsq]qUsymbol_footnote_refsq]qU citationsq]qh)hU current_lineqNUtransform_messagesq]qUreporterqNUid_startqKU autofootnotesr]rU citation_refsr}rUindirect_targetsr]rUsettingsr(cdocutils.frontend Values ror}r (Ufootnote_backlinksr KUrecord_dependenciesr NU rfc_base_urlr Uhttp://tools.ietf.org/html/r U tracebackrUpep_referencesrNUstrip_commentsrNU toc_backlinksrUentryrU language_coderUenrU datestamprNU report_levelrKU _destinationrNU halt_levelrKU strip_classesrNh/NUerror_encoding_error_handlerrUbackslashreplacerUdebugrNUembed_stylesheetrUoutput_encoding_error_handlerrUstrictrU sectnum_xformr KUdump_transformsr!NU docinfo_xformr"KUwarning_streamr#NUpep_file_url_templater$Upep-%04dr%Uexit_status_levelr&KUconfigr'NUstrict_visitorr(NUcloak_email_addressesr)Utrim_footnote_reference_spacer*Uenvr+NUdump_pseudo_xmlr,NUexpose_internalsr-NUsectsubtitle_xformr.U source_linkr/NUrfc_referencesr0NUoutput_encodingr1Uutf-8r2U source_urlr3NUinput_encodingr4U utf-8-sigr5U_disable_configr6NU id_prefixr7UU tab_widthr8KUerror_encodingr9UUTF-8r:U_sourcer;U\/var/build/user_builds/celery/checkouts/1.0-archived/docs/getting-started/periodic-tasks.rstr<Ugettext_compactr=U generatorr>NUdump_internalsr?NU smart_quotesr@U pep_base_urlrAUhttp://www.python.org/dev/peps/rBUsyntax_highlightrCUlongrDUinput_encoding_error_handlerrEjUauto_id_prefixrFUidrGUdoctitle_xformrHUstrip_elements_with_classesrINU _config_filesrJ]Ufile_insertion_enabledrKU raw_enabledrLKU dump_settingsrMNubUsymbol_footnote_startrNKUidsrO}rPhhsUsubstitution_namesrQ}rRhh)h}rS(h!]h$]h#]Usourcehh"]h&]uU footnotesrT]rUUrefidsrV}rWub.PKXDD:''/celery-1.0-archived/_theme/ADCTheme/README.html How To Install — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

How To Install

Install in Sphinx

Copy this directory into the sphinx/templates directory where Shpinx is installed. For example, a standard install of sphinx on Mac OS X is at /Library/Python/2.6/site-packages/Sphinx-0.6.3-py2.6.egg/

Install Somewhere Else

If you want to install this theme somewhere else, you will have to modify the conf.py file.

templates_path = ['/absolute/path/to/dir/','relative/path/']

Install Directly in Your Documentation

If you want to include the files directly in the documentation, so another person can build your documentation, it is easy.

  1. Copy over everything in the static directory into the _static directory of your documentation’s source folder.

  2. Copy the layout.html file into the _templates directory of your documentation’s source folder.

  3. Alter your conf.py

    html_theme = 'basic'
    

    instead of 'ADCtheme'.

Making Sphinx Use the Theme

If you aren’t installing the files directly into your documentation, edit the conf.py file and make the following setting:

html_theme = 'ADCtheme'

Screen Shots

http://github.com/coordt/ADCtheme/raw/master/static/scrn1.png http://github.com/coordt/ADCtheme/raw/master/static/scrn2.png

To Do

  • Gotta get the javascript working so the Table of Contents is hide-able.
  • Probably lots of css cleanup.
PKXDDF>Z""4celery-1.0-archived/_theme/ADCThemePrint/README.html How To Install — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

How To Install

Install in Sphinx

Copy this directory into the sphinx/templates directory where Shpinx is installed. For example, a standard install of sphinx on Mac OS X is at /Library/Python/2.6/site-packages/Sphinx-0.6.3-py2.6.egg/

Install Somewhere Else

If you want to install this theme somewhere else, you will have to modify the conf.py file.

templates_path = ['/absolute/path/to/dir/','relative/path/']

Making Sphinx Use the Theme

Edit the conf.py file and make the following setting:

html_theme = 'ADCtheme'

Screen Shots

http://github.com/coordt/ADCtheme/raw/master/static/scrn1.png http://github.com/coordt/ADCtheme/raw/master/static/scrn2.png

To Do

  • Gotta get the javascript working so the Table of Contents is hide-able.
  • Probably lots of css cleanup.
PKXDDa$celery-1.0-archived/_static/plus.pngPNG  IHDR &q pHYs  tIME 1l9tEXtComment̖RIDATcz(BpipPc |IENDB`PKXDD4celery-1.0-archived/_static/searchfield_rightcap.pngPNG  IHDR gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATx|j@'BWpP8dYw ы#Ѓ0$ r?ND"$U \4U +OAvq~ jvk@E4rt(PaJ6fyF_)3$עw@dbu:FqBi!`*2fPl-6K]k =֯]V'0W5/$IENDB`PKXDDA辗"celery-1.0-archived/_static/toc.jsvar TOC = { load: function () { $('#toc_button').click(TOC.toggle); }, toggle: function () { if ($('#sphinxsidebar').toggle().is(':hidden')) { $('div.document').css('left', "0px"); $('toc_button').removeClass("open"); } else { $('div.document').css('left', "230px"); $('#toc_button').addClass("open"); } return $('#sphinxsidebar'); } }; $(document).ready(function () { TOC.load(); });PKXDD9Rcc(celery-1.0-archived/_static/pygments.css.highlight .hll { background-color: #ffffcc } .highlight { background: #ffffff; } .highlight .c { color: #999988; font-style: italic } /* Comment */ .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ .highlight .k { font-weight: bold } /* Keyword */ .highlight .o { font-weight: bold } /* Operator */ .highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ .highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ .highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ .highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ .highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ .highlight .ge { font-style: italic } /* Generic.Emph */ .highlight .gr { color: #aa0000 } /* Generic.Error */ .highlight .gh { color: #999999 } /* Generic.Heading */ .highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ .highlight .go { color: #888888 } /* Generic.Output */ .highlight .gp { color: #555555 } /* Generic.Prompt */ .highlight .gs { font-weight: bold } /* Generic.Strong */ .highlight .gu { color: #aaaaaa } /* Generic.Subheading */ .highlight .gt { color: #aa0000 } /* Generic.Traceback */ .highlight .kc { font-weight: bold } /* Keyword.Constant */ .highlight .kd { font-weight: bold } /* Keyword.Declaration */ .highlight .kn { font-weight: bold } /* Keyword.Namespace */ .highlight .kp { font-weight: bold } /* Keyword.Pseudo */ .highlight .kr { font-weight: bold } /* Keyword.Reserved */ .highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ .highlight .m { color: #009999 } /* Literal.Number */ .highlight .s { color: #bb8844 } /* Literal.String */ .highlight .na { color: #008080 } /* Name.Attribute */ .highlight .nb { color: #999999 } /* Name.Builtin */ .highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ .highlight .no { color: #008080 } /* Name.Constant */ .highlight .ni { color: #800080 } /* Name.Entity */ .highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ .highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ .highlight .nn { color: #555555 } /* Name.Namespace */ .highlight .nt { color: #000080 } /* Name.Tag */ .highlight .nv { color: #008080 } /* Name.Variable */ .highlight .ow { font-weight: bold } /* Operator.Word */ .highlight .w { color: #bbbbbb } /* Text.Whitespace */ .highlight .mf { color: #009999 } /* Literal.Number.Float */ .highlight .mh { color: #009999 } /* Literal.Number.Hex */ .highlight .mi { color: #009999 } /* Literal.Number.Integer */ .highlight .mo { color: #009999 } /* Literal.Number.Oct */ .highlight .sb { color: #bb8844 } /* Literal.String.Backtick */ .highlight .sc { color: #bb8844 } /* Literal.String.Char */ .highlight .sd { color: #bb8844 } /* Literal.String.Doc */ .highlight .s2 { color: #bb8844 } /* Literal.String.Double */ .highlight .se { color: #bb8844 } /* Literal.String.Escape */ .highlight .sh { color: #bb8844 } /* Literal.String.Heredoc */ .highlight .si { color: #bb8844 } /* Literal.String.Interpol */ .highlight .sx { color: #bb8844 } /* Literal.String.Other */ .highlight .sr { color: #808000 } /* Literal.String.Regex */ .highlight .s1 { color: #bb8844 } /* Literal.String.Single */ .highlight .ss { color: #bb8844 } /* Literal.String.Symbol */ .highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ .highlight .vc { color: #008080 } /* Name.Variable.Class */ .highlight .vg { color: #008080 } /* Name.Variable.Global */ .highlight .vi { color: #008080 } /* Name.Variable.Instance */ .highlight .il { color: #009999 } /* Literal.Number.Integer.Long */PKXDDDUkk"celery-1.0-archived/_static/up.pngPNG  IHDRasRGBbKGDC pHYs B(xtIME!.<̓EIDAT8͓NABP\EG{%<|xc  cr6@t;b$;3&)h1!﫳Hzz@=)p 3۵e2/ߴ ( %^ND^ }3H1DoǪISFұ?, G`{v^X[b]&HC3{:sO& ?,[eL#IENDB`PKBFCVR>>#celery-1.0-archived/_static/rtd.css/* * rtd.css * ~~~~~~~~~~~~~~~ * * Sphinx stylesheet -- sphinxdoc theme. Originally created by * Armin Ronacher for Werkzeug. * * Customized for ReadTheDocs by Eric Pierce & Eric Holscher * * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ /* RTD colors * light blue: #e8ecef * medium blue: #8ca1af * dark blue: #465158 * dark grey: #444444 * * white hover: #d1d9df; * medium blue hover: #697983; * green highlight: #8ecc4c * light blue (project bar): #e8ecef */ @import url("basic.css"); /* PAGE LAYOUT -------------------------------------------------------------- */ body { font: 100%/1.5 "ff-meta-web-pro-1","ff-meta-web-pro-2",Arial,"Helvetica Neue",sans-serif; text-align: center; color: black; background-color: #465158; padding: 0; margin: 0; } div.document { text-align: left; background-color: #e8ecef; } div.bodywrapper { background-color: #ffffff; border-left: 1px solid #ccc; border-bottom: 1px solid #ccc; margin: 0 0 0 16em; } div.body { margin: 0; padding: 0.5em 1.3em; min-width: 20em; } div.related { font-size: 1em; background-color: #465158; } div.documentwrapper { float: left; width: 100%; background-color: #e8ecef; } /* HEADINGS --------------------------------------------------------------- */ h1 { margin: 0; padding: 0.7em 0 0.3em 0; font-size: 1.5em; line-height: 1.15; color: #111; clear: both; } h2 { margin: 2em 0 0.2em 0; font-size: 1.35em; padding: 0; color: #465158; } h3 { margin: 1em 0 -0.3em 0; font-size: 1.2em; color: #6c818f; } div.body h1 a, div.body h2 a, div.body h3 a, div.body h4 a, div.body h5 a, div.body h6 a { color: black; } h1 a.anchor, h2 a.anchor, h3 a.anchor, h4 a.anchor, h5 a.anchor, h6 a.anchor { display: none; margin: 0 0 0 0.3em; padding: 0 0.2em 0 0.2em; color: #aaa !important; } h1:hover a.anchor, h2:hover a.anchor, h3:hover a.anchor, h4:hover a.anchor, h5:hover a.anchor, h6:hover a.anchor { display: inline; } h1 a.anchor:hover, h2 a.anchor:hover, h3 a.anchor:hover, h4 a.anchor:hover, h5 a.anchor:hover, h6 a.anchor:hover { color: #777; background-color: #eee; } /* LINKS ------------------------------------------------------------------ */ /* Normal links get a pseudo-underline */ a { color: #444; text-decoration: none; border-bottom: 1px solid #ccc; } /* Links in sidebar, TOC, index trees and tables have no underline */ .sphinxsidebar a, .toctree-wrapper a, .indextable a, #indices-and-tables a { color: #444; text-decoration: none; /* border-bottom: none; */ } /* Search box size */ div.sphinxsidebar #searchbox input[type="submit"] { width: 50px; } /* Most links get an underline-effect when hovered */ a:hover, div.toctree-wrapper a:hover, .indextable a:hover, #indices-and-tables a:hover { color: #111; text-decoration: none; border-bottom: 1px solid #111; } /* Footer links */ div.footer a { color: #86989B; text-decoration: none; border: none; } div.footer a:hover { color: #a6b8bb; text-decoration: underline; border: none; } /* Permalink anchor (subtle grey with a red hover) */ div.body a.headerlink { color: #ccc; font-size: 1em; margin-left: 6px; padding: 0 4px 0 4px; text-decoration: none; border: none; } div.body a.headerlink:hover { color: #c60f0f; border: none; } /* NAVIGATION BAR --------------------------------------------------------- */ div.related ul { height: 2.5em; } div.related ul li { margin: 0; padding: 0.65em 0; float: left; display: block; color: white; /* For the >> separators */ font-size: 0.8em; } div.related ul li.right { float: right; margin-right: 5px; color: transparent; /* Hide the | separators */ } /* "Breadcrumb" links in nav bar */ div.related ul li a { order: none; background-color: inherit; font-weight: bold; margin: 6px 0 6px 4px; line-height: 1.75em; color: #ffffff; padding: 0.4em 0.8em; border: none; border-radius: 3px; } /* previous / next / modules / index links look more like buttons */ div.related ul li.right a { margin: 0.375em 0; background-color: #697983; text-shadow: 0 1px rgba(0, 0, 0, 0.5); border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; } /* All navbar links light up as buttons when hovered */ div.related ul li a:hover { background-color: #8ca1af; color: #ffffff; text-decoration: none; border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; } /* Take extra precautions for tt within links */ a tt, div.related ul li a tt { background: inherit !important; color: inherit !important; } /* SIDEBAR ---------------------------------------------------------------- */ div.sphinxsidebarwrapper { padding: 0; } div.sphinxsidebar { margin: 0; margin-left: -100%; float: left; top: 3em; left: 0; padding: 0 1em; width: 14em; font-size: 1em; text-align: left; background-color: #e8ecef; } div.sphinxsidebar img { max-width: 12em; } div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p.logo { margin: 1.2em 0 0.3em 0; font-size: 1em; padding: 0; color: #222222; font-family: "ff-meta-web-pro-1", "ff-meta-web-pro-2", "Arial", "Helvetica Neue", sans-serif; } div.sphinxsidebar h3 a { color: #444444; } div.sphinxsidebar ul, div.sphinxsidebar p { margin-top: 0; padding-left: 0; line-height: 130%; background-color: #e8ecef; } /* No bullets for nested lists, but a little extra indentation */ div.sphinxsidebar ul ul { list-style-type: none; margin-left: 1.5em; padding: 0; } /* A little top/bottom padding to prevent adjacent links' borders * from overlapping each other */ div.sphinxsidebar ul li { padding: 1px 0; } /* A little left-padding to make these align with the ULs */ div.sphinxsidebar p.topless { padding-left: 0 0 0 1em; } /* Make these into hidden one-liners */ div.sphinxsidebar ul li, div.sphinxsidebar p.topless { white-space: nowrap; overflow: hidden; } /* ...which become visible when hovered */ div.sphinxsidebar ul li:hover, div.sphinxsidebar p.topless:hover { overflow: visible; } /* Search text box and "Go" button */ #searchbox { margin-top: 2em; margin-bottom: 1em; background: #ddd; padding: 0.5em; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px; } #searchbox h3 { margin-top: 0; } /* Make search box and button abut and have a border */ input, div.sphinxsidebar input { border: 1px solid #999; float: left; } /* Search textbox */ input[type="text"] { margin: 0; padding: 0 3px; height: 20px; width: 144px; border-top-left-radius: 3px; border-bottom-left-radius: 3px; -moz-border-radius-topleft: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-top-left-radius: 3px; -webkit-border-bottom-left-radius: 3px; } /* Search button */ input[type="submit"] { margin: 0 0 0 -1px; /* -1px prevents a double-border with textbox */ height: 22px; color: #444; background-color: #e8ecef; padding: 1px 4px; font-weight: bold; border-top-right-radius: 3px; border-bottom-right-radius: 3px; -moz-border-radius-topright: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-top-right-radius: 3px; -webkit-border-bottom-right-radius: 3px; } input[type="submit"]:hover { color: #ffffff; background-color: #8ecc4c; } div.sphinxsidebar p.searchtip { clear: both; padding: 0.5em 0 0 0; background: #ddd; color: #666; font-size: 0.9em; } /* Sidebar links are unusual */ div.sphinxsidebar li a, div.sphinxsidebar p a { background: #e8ecef; /* In case links overlap main content */ border-radius: 3px; -moz-border-radius: 3px; -webkit-border-radius: 3px; border: 1px solid transparent; /* To prevent things jumping around on hover */ padding: 0 5px 0 5px; } div.sphinxsidebar li a:hover, div.sphinxsidebar p a:hover { color: #111; text-decoration: none; border: 1px solid #888; } div.sphinxsidebar p.logo a { border: 0; } /* Tweak any link appearing in a heading */ div.sphinxsidebar h3 a { } /* OTHER STUFF ------------------------------------------------------------ */ cite, code, tt { font-family: 'Consolas', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 0.95em; letter-spacing: 0.01em; } tt { background-color: #f2f2f2; color: #444; } tt.descname, tt.descclassname, tt.xref { border: 0; } hr { border: 1px solid #abc; margin: 2em; } pre, #_fontwidthtest { font-family: 'Consolas', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; margin: 1em 2em; font-size: 0.95em; letter-spacing: 0.015em; line-height: 120%; padding: 0.5em; border: 1px solid #ccc; background-color: #eee; border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px; } pre a { color: inherit; text-decoration: underline; } td.linenos pre { margin: 1em 0em; } td.code pre { margin: 1em 0em; } div.quotebar { background-color: #f8f8f8; max-width: 250px; float: right; padding: 2px 7px; border: 1px solid #ccc; } div.topic { background-color: #f8f8f8; } table { border-collapse: collapse; margin: 0 -0.5em 0 -0.5em; } table td, table th { padding: 0.2em 0.5em 0.2em 0.5em; } /* ADMONITIONS AND WARNINGS ------------------------------------------------- */ /* Shared by admonitions, warnings and sidebars */ div.admonition, div.warning, div.sidebar { font-size: 0.9em; margin: 2em; padding: 0; /* border-radius: 6px; -moz-border-radius: 6px; -webkit-border-radius: 6px; */ } div.admonition p, div.warning p, div.sidebar p { margin: 0.5em 1em 0.5em 1em; padding: 0; } div.admonition pre, div.warning pre, div.sidebar pre { margin: 0.4em 1em 0.4em 1em; } div.admonition p.admonition-title, div.warning p.admonition-title, div.sidebar p.sidebar-title { margin: 0; padding: 0.1em 0 0.1em 0.5em; color: white; font-weight: bold; font-size: 1.1em; text-shadow: 0 1px rgba(0, 0, 0, 0.5); } div.admonition ul, div.admonition ol, div.warning ul, div.warning ol, div.sidebar ul, div.sidebar ol { margin: 0.1em 0.5em 0.5em 3em; padding: 0; } /* Admonitions and sidebars only */ div.admonition, div.sidebar { border: 1px solid #609060; background-color: #e9ffe9; } div.admonition p.admonition-title, div.sidebar p.sidebar-title { background-color: #70A070; border-bottom: 1px solid #609060; } /* Warnings only */ div.warning { border: 1px solid #900000; background-color: #ffe9e9; } div.warning p.admonition-title { background-color: #b04040; border-bottom: 1px solid #900000; } /* Sidebars only */ div.sidebar { max-width: 30%; } div.versioninfo { margin: 1em 0 0 0; border: 1px solid #ccc; background-color: #DDEAF0; padding: 8px; line-height: 1.3em; font-size: 0.9em; } .viewcode-back { font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif; } div.viewcode-block:target { background-color: #f4debf; border-top: 1px solid #ac9; border-bottom: 1px solid #ac9; } dl { margin: 1em 0 2.5em 0; } dl dt { font-style: italic; } dl dd { color: rgb(68, 68, 68); font-size: 0.95em; } /* Highlight target when you click an internal link */ dt:target { background: #ffe080; } /* Don't highlight whole divs */ div.highlight { background: transparent; } /* But do highlight spans (so search results can be highlighted) */ span.highlight { background: #ffe080; } div.footer { background-color: #465158; color: #eeeeee; padding: 0 2em 2em 2em; clear: both; font-size: 0.8em; text-align: center; } p { margin: 0.8em 0 0.5em 0; } .section p img.math { margin: 0; } .section p img { margin: 1em 2em; } table.docutils td, table.docutils th { padding: 1px 8px 1px 5px; } /* MOBILE LAYOUT -------------------------------------------------------------- */ @media screen and (max-width: 600px) { h1, h2, h3, h4, h5 { position: relative; } ul { padding-left: 1.25em; } div.bodywrapper a.headerlink, #indices-and-tables h1 a { color: #e6e6e6; font-size: 80%; float: right; line-height: 1.8; position: absolute; right: -0.7em; visibility: inherit; } div.bodywrapper h1 a.headerlink, #indices-and-tables h1 a { line-height: 1.5; } pre { font-size: 0.7em; overflow: auto; word-wrap: break-word; white-space: pre-wrap; } div.related ul { height: 2.5em; padding: 0; text-align: left; } div.related ul li { clear: both; color: #465158; padding: 0.2em 0; } div.related ul li:last-child { border-bottom: 1px dotted #8ca1af; padding-bottom: 0.4em; margin-bottom: 1em; width: 100%; } div.related ul li a { color: #465158; padding-right: 0; } div.related ul li a:hover { background: inherit; color: inherit; } div.related ul li.right { clear: none; padding: 0.65em 0; margin-bottom: 0.5em; } div.related ul li.right a { color: #fff; padding-right: 0.8em; } div.related ul li.right a:hover { background-color: #8ca1af; } div.body { clear: both; min-width: 0; word-wrap: break-word; } div.bodywrapper { margin: 0 0 0 0; } div.sphinxsidebar { float: none; margin: 0; width: auto; } div.sphinxsidebar input[type="text"] { height: 2em; line-height: 2em; width: 70%; } div.sphinxsidebar input[type="submit"] { height: 2em; margin-left: 0.5em; width: 20%; } div.sphinxsidebar p.searchtip { background: inherit; margin-bottom: 1em; } div.sphinxsidebar ul li, div.sphinxsidebar p.topless { white-space: normal; } .bodywrapper img { display: block; margin-left: auto; margin-right: auto; max-width: 100%; } div.documentwrapper { float: none; } div.admonition, div.warning, pre, blockquote { margin-left: 0em; margin-right: 0em; } .body p img { margin: 0; } #searchbox { background: transparent; } .related:not(:first-child) li { display: none; } .related:not(:first-child) li.right { display: block; } div.footer { padding: 1em; } .rtd_doc_footer .rtd-badge { float: none; margin: 1em auto; position: static; } .rtd_doc_footer .rtd-badge.revsys-inline { margin-right: auto; margin-bottom: 2em; } table.indextable { display: block; width: auto; } .indextable tr { display: block; } .indextable td { display: block; padding: 0; width: auto !important; } .indextable td dt { margin: 1em 0; } ul.search { margin-left: 0.25em; } ul.search li div.context { font-size: 90%; line-height: 1.1; margin-bottom: 1; margin-left: 0; } } PKXDDh9Ȅ0celery-1.0-archived/_static/title_background.pngPNG  IHDRv6 pHYs B46IDATc8{?"CYQYb_^bX1mcK|;IENDB`PKXDD;l/l/)celery-1.0-archived/_static/underscore.js// Underscore.js 1.3.1 // (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. // Underscore is freely distributable under the MIT license. // Portions of Underscore are inspired or borrowed from Prototype, // Oliver Steele's Functional, and John Resig's Micro-Templating. // For all details and documentation: // http://documentcloud.github.com/underscore (function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source== c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c, h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each= b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e2;a== null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect= function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e= e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck= function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;bd?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a, c,d){d||(d=b.identity);for(var e=0,f=a.length;e>1;d(a[g])=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e=0;d--)b=[a[d].apply(this,b)];return b[0]}}; b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments, 1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)}; b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"}; b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a), function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+ u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]= function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain= true;return this};m.prototype.value=function(){return this._wrapped}}).call(this); PKXDDq.celery-1.0-archived/_static/readthedocs-ext.js // Intenionally left blank PKXDDZ2celery-1.0-archived/_static/searchfield_repeat.pngPNG  IHDR5^KMgAMAOX2tEXtSoftwareAdobe ImageReadyqe<0IDATxb,//g```<~8#?bbZP,Xnݺ <~EIENDB`PKXDD<>+celery-1.0-archived/_static/ajax-loader.gifGIF89aU|NU|l!Created with ajaxload.info! ! NETSCAPE2.0,30Ikc:Nf E1º.`q-[9ݦ9 JkH! ,4N!  DqBQT`1 `LE[|ua C%$*! ,62#+AȐ̔V/cNIBap ̳ƨ+Y2d! ,3b%+2V_ ! 1DaFbR]=08,Ȥr9L! ,2r'+JdL &v`\bThYB)@<&,ȤR! ,3 9tڞ0!.BW1  sa50 m)J! ,2 ٜU]qp`a4AF0` @1Α! ,20IeBԜ) q10ʰPaVڥ ub[;PKXDDԙ G%celery-1.0-archived/_static/scrn1.pngPNG  IHDR0 qiCCPICC ProfilexZuTo~gNr8twwЍtw(4X X ҈6* R53{eޙy@gDD  1"::9 8ؾOhW5.?'1]1`}voD 6;C5C=D_.bO(ؖ{^OO^{#ّ1`| p=b vwDr{m׷0#߲0}-5b}b~'/D$& ?Kvv6Oبlz@@H9 ԁ0 'AQHi(@=@+h 0&3̂` MpX!nHd!H 2  P(J2<TBP Ac5-C0 SŒ0',Kʰl ®p!|kp< O "P( 2@9|Q$T(uu5zF}Dh:47Z6Dۡ=$t$,* İcD1#Ĕb0W0}q[7, ˈ*b Xl6[mŽb_cP8&NgsE2pqq7q7<ρ | ,~HGDaFAKGQCqb5wOP%X| I# ncgJ %7e"e)e#esoD"QIt q"Jʎ**4U'cej"5ڍ:zzQq)iyG rӪ:-mDG3ˠ{EMEAB@_N):*CC9M [\ZO332Ę̘BZ&~03k2{0g0cfBϢĒre+ k2k" ;[&[wv.v= bvi,GG7NN=Σ8縨ScQS;@JL=WVC_#CWLJѺݭttuuu1F9d"ْ\BcsԫЛ?ɀdcaece8lDmdkTf4m,`hljnfrǔ޴tL,Ҭ?hذ$[XNZq[[XmZX~GpO؞6h+rY[Y$!;F;KvG_9H:$8˸kێ N*N&c\\]Z]Qu+nnܕsݟܗõ#'gguoUO/ٷw p h D2*:&:\-4|1(6b3!re_TO4gt\xLL~XؚحN080'> .NHJNLN|T|3#%)EfjuAiiYiM33"2322<?%.#+'-g.<%9/)o&8 `и(hk\YşKJ)9QSzcb>nz '~:9ZVv3gϞ:G{.yO.^li8ԘӸy1KF46W]}y%}[+]W^&x-jo_xsf7ojl$u6U}viuWn7;{grohB_LNSX޹7d:ta{{=uG{=|hp{cSϧܧf>^xdiӍgQs^P(}zZpZޘqy뻄Yx6ay>|)oy/_Ɩ\c_ְ2j{kk w767[e?~6~7 s\o.........+@!Gra JVGmBbKh@f t@0d .r]8Tt̜,BbҤ*fVi%} aC#/ 6拖VZ{lmBms{M0q+rxz%z| h\ VIN!e?6́kqo֓hESRƧLoϘ\>-E@B"zR%L%GfKm8sI2r J*jS5:IugF6=}A"Assּ+_+n+jHx#fxg-N]z=J} ݼ8\6/~ب1>?81I}Lxӱg7׿(|3J5 [wwKsK}H k>F~t13 ×oK|=-io5uS[2X viar58Ph `pU+.1jց~Q m56Qv}\ܶ<6|~тiBGDD_I0IIYKdd_+*U(M%^i?ՙ'1240DCfC#_yV rumig >Ypt  K?Qy*)vXqLr ։aI)'SEdxgfQcG/Lv_Trģh'\NZIUN՚W;c~\  /74^oiͺy5ZZ[F{;& Ǐ!OCh惼#+o6ykjȓO'=~=Z͌۠wQqsS2?~,TXҗ_IVھkY7^l~z!v8v ?I`C pJ5ޏ|v#)\d2, - 6<C=c$V1l9L99nrx_(F OԉFiCCVRLRSeH rr;m !Jʋ*Tm0jE{54?i]>c+Jҫҏ1036ԙf[[b-g$۸jqww^vpvqsur3w'Aīۻѧ7/?2/9"X/D9T<#"|5Mxdtlo&.%IJLLz`YOlNƃ̺,7ss/Jm-/;Vzh1lߟh?_SN$VU-TOyT;zznWϝ=_b雷[-4|W䯒Yٵ8z}&gۭS_vqP݊ᾑOEGo=:>9uI3r\HXl!;5I_e §5vXD\E~"̵)b@D8^0:Dr! CYP%th&p.BѠtQ1lNE0L-fˉuVa_pA:_C!KEH(!,RZP6"j2)j,u83#k´'6c03|f`\`rae6`D&V 6 Zw8p ZaE>BBKOTPY )72eXl<9%-Ƥ&a顕]3QO3c!{Sob&GV;{H6!~:Y5CkW?(8T5&2`jLD⁠O QɇSv;gٖ9[y 1~X]jxt孕շjn\_w|JCE&W:ntVV5,`,n\y)ʗ^[͜񏣋K,_Wؾ~|X,A "0 dt!O؆ErAz CHO{p \߃Q)t-ba~`U^g;W)) ( VJ,%;.UiNLAQqɐb2j-m=&W7]ɣ7wj/DAbG%IKIKxIra 抚JZ*:jfZ:u=Ol{ M0YY^mf[ox'*87֞z|G9GCÎoFD{V\[Bdɔi2,3_Ρȭ(x\]L_rH"Jzq֙sh/5i7o_).1sdmBPOIπïu<8Q?UYiW?\z:'/8b EdX2eh`Z:"򋈱Gg`""?mOM)҃ykT=~`_0hh1ٍň7 VB~_t|0'!f?!_dG^ G;/@?rO$ƮnwtŮ_!5H[ƄFˡd&Z xhv V@uhuD ;ij1m2<^!^u#??'S]'{o[on E&}%yM¼%yH$U_5^x pHYs   IDATx\SOHBe((( Tp+:Vq]kR:jm몕jq TPP@({ 2n&!u=&|O_{.'&$@H $xO5ʼn"$@H `EIY[ zRV^RZ^ $@H "xzDy\;=:lhaa HT[p;>)2Σ\v>mZpqrmd6̜Ԥԇ ܯ t $@H#6i^ݳlaڴrD"w^JNۺ@Xoˤ<sGo-"$@H  s̷CNuiPU'ï4 6FH $@ϑrcsTຝ5ފM!$@H <R^:ka<0X` $@H xJe=R㞎 [ $@H HOAsV+"'ٶo$~zEYvڂH3n$<ƎՋ:Rq Qơ @H $@C<4 }5YuE%)}x!Ҁk>dcɒc֯Fιk\,CA~zoG6A=Z6F!ϩݛTb-^x8$@(We;9T0_LBs+nt7 >*C~Wv7#Qi/59/ߟ둺onj\ZZ S>d| DOqZK._Wwݟ2FH $^IO?`P_$XAt*\%gs ;O섈ٲ"łW+J2NJqq y$keV̞ Jwyϱ4Mޝcۧ]%~pjҍ&L{Ӥktw"Dp6^soNYq6wCpG#:s綒92L&,\4+=KB R"|: hAw$ YxUfO hOjRi6OzQ}/[),$YPt=. F(=esIK:POR\r_R%?N=nH=Կ5[od׭mߜȢR2սt_LH $PHZ^;sg\!TP8@e+%)/ שY7S&F<G;K"8iZYcE > =ͬ͌,J* .G}wg4y~ժ ޜp5ҭ#oԆ&`k@J&_~LwzoFÃk*t~.\+L fʣ?#J)! -} v_u`٣|Caţ[#Y9*)Fwjd*7jRe{t;秿:@^0jeN^-{Qe/Mjm br(Gr%G0jDhD,͘5s027*Lhiʳ1vl{ι ׋+Z5xo]ؗG_5=ȼڴS7&oKW* &iEN㦽wܜ6&ܒDž\P6ӿ5[cB{K.SKoH $P=$}FH}#"8jHej ."?>͢[Ҳ SFfjᲴ~ ˩TYcϦO?3o.WZ0B!sRwsy{W$9/&|dŽHar幗ĉ5n5ikRf\JE.'mԦ<Ri#ܫ;WZLmn?N\[>R@*6.[_!0?9rN]ON+̈m?.+Ml)}3S AW2˒iKtxIsc7L>]x&҆1^ϊ5dV+]|OŞdPAy߷'19v˯r/b*7[0п5[1TĄ@H mOk9"M-A0 GI°}sLĔ3ãp#+ym.)2r\Bv:ȳ/MICܖNб9)_7&5JgH9ʍg-(Jg<ؽvtPoƝ>QM[.̎h,=$bDrJzȸTBƮm]aG'fг-8v`N^Bz_1iS'/+ف s6zv?S('Ign r,Fb6_eLwTcJIv_Ľ iB16 kVInԀ7U8!ke3ee>Q*c@H @cLSrvze;k ª48ΓҤ蛑%VzicUQI9tĘ>B.+(WIضAF+ s{XYˁ85!B/Oe3"yTt;ӄ  '-;ژx̻) @bťj* 9˸!b1 JbL+/WcgBϗ>xº͑Q%T7++Б5.fG69`8%+MXzU EV+n).gr sH $ O9"*X)!Ue\_UB쁨R{n OpRqA> )sêPcά V&D#f~s6̬ۿ {Wn.L+5-v@1+gA"d*+OJG)iɆTަ̹wI: ZZ ɾ3k#]LXt ȓ&ML^N𞟖xYFlͬ|cm}[  ̱8Kh6c\cg{ @Y e4j쒂}mv]gt]֝3_|AH $:FnxLPѬ/*dDfl[1~VDZ}3hX3ZNnvH8+s Dc޶ӓM- 2.|9ľM&ˈQVY*bmg]P0x`ccCfRxD6>͇.bۻ>-b91R 材߾=ݨSHC7CZpLȫ/%?,{4|J:`YVuf23/zplB~ԉ E-<|d5Ǫϥ~5h37"]cT;F9Weҳվ[TsH $K){9yNmjըeRF|Ø$M~o%j@GO\o6Ǵ!pFEk7_;;Z$"i%*F {2 ^=uA+{@73|ArweTV `݂ײ̓F0+Kx~&~ۡߠ YwN$- `k&Z']Bs9;tRN\2SB9&BԪd% ~󠎭O1Gw*ϕ}k fyδث ٨^{p1XKSVlTuI%Pa7Ԡ@'EfX!{ReUH}R[P'\V[:W VkyRJQ=W>bBH $6ow?0v ?;yk v<$=)LM(`#O4O;fMrkįss{iqn fmD.'zx[LǦ%'%v{7ohp׎mgk-IPŵhNM iy؄LԴ{#{2ԣ]Uɟd\G6]}[YJt,1kٳ=4%ݺQOqnJHD2&עRDŽ-[3fߏ[>d1B*,LO#1l̯uA&?Z 뱙2bܸUW;hO{0F-:9󉬸(JMwK ̬n0ޚun^9s̵h٥eaZ\l6鹎ebֺ֥]„@H wAcqӧLACvko׿WeG5qԧOg{A 7zD.[ XoY7o%>(q6jUDh f 6Z,=b1=)-c"5X @mJJ/ZMyFƴDŽ*լ yp\,!ᛙ L%``&4yRRUBSeԱZV`s2U@H 7c \l7Y)7x~'*OJv$Od{eyqn50{ͬ!*SP9bIbqm!iPzįڪzR[]QZ_G3*BP:VZKuL! $x|_sjD0zQ1% BKK |[I?613#e%Ye7ǁ; Ҳ_4"$@H 7Dz)iq3?(ccc>:ٮ),*r52nB~~>Hd{;;6;wl =K _|3L; ⌈ p??P $@H& vǟD껮ZɓĤ:OGǎܼ|MLݺ`tng SҚ^ui\N M@H $4.qcE Tq\޹PG3## A†; @H $ %0㣠`> A|)$@H |00E6|pH $x t $@HYvg}@H $^k'\fL^:i^?n mҽyaT>+Z7i 0aDH $xxMמ#GojJ϶I[nR }$-m{)'_<2Cx' H $x ԽcaDwv]zjɟ?6wACKWW ڈPenIhuRw~ͿΡ˜Eܛ i@H $8?j`gC?:Fb3%y\:yAjlRrzN~oڪcg܌N&nܸN: sgY^x%VķnߥM/{tbD(kJ|{ZX+Mrfj۫Y9ۀRWtZLHF=:3kh#}qrдq >.Iiԥ!gD_~TN<8[>RԨ;6E7ηv$"Ҫ Wv\qv7 DRw~,ZxUĞJ(pKC\z-ԫZӮ^z".>R# s=}ܸ\@Q^r/2">5WF |m!iN%߷O]|EH $@p9_{C_8Omb &؟,O "|k˴1@H}_k/}6qZlNH]L!}vDzG#RphƗՅ{9!u.y}kGt|=.\&O8s-q/FD1d}M,Xړ;x[ * 1)ӯBys" 1UŐmn_C6]mD/3/xSG_c|pkR-p9u59#>0ny$@H D)uo 48U4qgX FfM L@ [}फGs%ytbEe"( YvQ[*E^E L$Xp Y1F>h=/GvueČEyN$]%~:50(8Qnυw~팙[qzg1 wu)QVayH)1bl$3[)l=k)=GHvXx`Լܢrr\Ob r*\O1 xѾA^?&uƻ;;׃C~*;w#/a!1Nf h%,:6N˨w6]<8y·KӓEJScf2@H @7Ʃ&TÕU[#$ ؔ+Zض`\ok.(7QqzvQܲ&$.WinvpN66u0o2-a wxwk4!ITH8 f/N*#l8Qt!dur5&g+cm҈NRP*' ^uH}?7Uٙ6sneye| N8 \9[IRRB0agپ/]JIduR(9bF^c3cEiyt̲ГTH*``wRٿ2<@hr{:9dKЋ @H $ru`bbt.K*/їŜP,?ރ 9L "AIrS("`aԝ\P*E"13="`WDmDOcTjLBd5%*pF` JQF Nx\zKX˖TJh W(! pVeJj0R.'LQㆾcv ƚR4wCH8911fG1H _\\ (ڟ IDAT9O“vJ/^KU;1UEe'Um3b֪ P`L}N8^e+i TlҰ01cmLsN]-)1RbT*R=LBb B3>6)#WG.T(^b94# v` caBH $W$ #.3a`KUm޶м~^m}̎t18$QZ%\&ՓfRYw&a˔:\T}ֻa~\VԁAs{GX E~c![C8v_q<ȜjZu`є%.f|Ă6{㧟_M:vB*ɺ\&Lu ߒ7'oiN-vx\/ؿK']Sp`޷{-|2[P;{ & ?#wJc6vo1%S iZs@oH $[M)"UON|gN16}V|6+;w;3zhiV#$]M6XhB_•Lˍ[3oG`K/U*[ym]y^tڍ3ߟćGѿl޼P-9㷜O;F"[ xp2(EoX̸oB[ըI\ ٹp2qiجr;~KtB!㡂S/,rm׌Og =;6wT><b<}e؆nW/VmH $x*9vn}G|5&4CrosL@H $xAeЧ=40q[4q474 ܂\ڀ.M ޽ۮ]6H $co?R/]>?pH $@He@2H $@/EH $xPL86@H $K!"`A@H $^&'%GIM*J8WxU!TѥЭ+W]:򊊊JE "$@H%b/ O}d͂R%^ѣjmCk"%֓&l7*7gqTvu%97F>Z:5BwUK/m nӵg׮]}}۵#X@H ל"bJk"nO\]T{]psrSP]G>Wy &p."| 3ޛ"&ϴ~#Đǭ^3$Ē_sKGtl#+@$2y m/Xpb,е^q]#wW5tb-@H $j%``jB h+#NvnS(u::F&|bbPCG^TvǏ˳spp7$~6yѡT1O}AJsc2々2jyIVZ06;aed!9GHϡӱ [ i.Bs>=2Z4"LZ4CqzBKѧ2+÷$Q~ BɹޭB·2^~J;r×;VJ$i[@ȑG>DU8W(!$@o%If9/Eߟ9LgvŖޅLBcY$ GHBI9tn_+ Lasn1ZK򐶜\Cw]X[y$U5̇hS^IcWsZ')D_Ǧ.d9'[qlkϢ+#D5puE9P[qVEY{Y]Î۝;wVTԗGy-""N<糬;L}sӞ-+,,%p$mEl82$F-!M nbmŎ}hAi90 B.!!į_G_|?YSPxđ-d߅$*iԱs<7ٴ`ūDDyE;!Xɚ g O@v,@%~GF _8(t؎"qjھ2_j$@HĒ؊ٛ3h#o,Z5ݗU<Qt7`cN|kF:U^bi‘ %ĔEV1B*c+**uE!X#w\ K+E;9]'Oʮ-f1sBNHf$gkK|Fyxεc}mbR8`Gԑ _f$QQQK.=~8{YKq=Z[۲Gֲd¦e}|z _/q9KKRŕdztG"*n*rlp;;sRJc;m40Nz*IB-έW{fCGGÑzu0'7ifkbdd֛1f'w} "hxwnWMfzwkо ] $x |aCwʞ<@6E,b8>iMŢ?v1ӗ6D4f0Ng)nlY"]:'lvyvX zг"$:ֳw믇zo~:aq㕉_%V|*K|xEY&GAT`/xBX{R}Ok#Z UYҐERܣ)-dtEՓ~kֱ3T>=Uns.hu3wЩ3&(6)V3ݠ{8_;O\:k_@H $f6x [_yBVJ iBrF+Ue9ڕ|V(-}ާ7%L&8zv7roAGzdtUfLvvz=~=Fy_)?q:6$[9cKO!K!D[R=|h!Z3 , _QkѤf; 6B$q2'NFf劈=6%Ӱ*٪C}abbw> Rɩ3YSu^v>1g^at]Rww$@H& zwYB/\-hҔPy41uP3:[:-%C[lmq4)}'A7R3( A⎌'=񥽉t cY?tx1--^xРARA%Z|'4t$J.bC|Ύ]aK$iO"Qi^rrO'QfQ(sĽsaiCu\$8,8-_N-F %!k$IҴx5f|SHD;MEIi^Z|ꆿj=RHsneHhKiEm &=f?,AH $ܼY\}< vln"#üc.\̘=(͈M9SwٓǛJ 2A>SS- Ĵ GBBNy[G}z='yѱW;7J8l r:R$U&B1, {|',fM;CЮkh+}O lbm܂l! KEhĮ'{ 쳘v_gKgFL՗]]gj;f?D88Dv {M?!B!`"*.%Gtݱ )GI$}9x`uiCĮ$xb5KÆ}B w&/H $F@;ig<Χ!7r_gzc' 'N2-g<^&XbQ1;Hy[б޹6ƦIHM,cCg^lc͔U͛|խo]zS=[ϭʿݜ?zo[7ƼIüܻ[_CJ΢DD EQ<8*$ܼ+%*[ˠЏ~ r`b&@H $x rW>Kh x1ŏ# $@pLfii)2#|>lrxĵk=FH $x upphڴኊ PÐg0 ~?.8y$@H @ƅ]xqyy9HaC!Բ ")oƺ,@H $VC/`@R `J*h"X 3H $@+LbP)Qka $@HM#7>>^}!3W67mq>H $@@Ç[lyRԎpP $@HM bW{˃plvڬ0@H $ZX/$QQQIIIp~MV!6UM5}0@H $^/ sY n \BVE뵾-@H $~ O+((4*++;~F  $@H AVbCCCFŷn}Ms@H $x Tdp CUHpCDl[cG[U*9gF%)KY3ˏnVeVY^!$@H E@[Hh9 Mnt]3%0!#C.k)k+qaA< sR<Χ $@H B@V`h5,"sj}~3}]_du(ˍǟGݻ͎p{OնԿېO;lۻW8u򫙣{ '3 $y!6Q 1!$@H  zRi6JKKE"aHd 53o/fr q^3QEeoħgle#/?%!;٣[^5)b"G%\+S&\,(R~}oV5o/>Wc3H $@o`p0pdd 'm۶ .04he5'vN:CF`ΝsO]aR!\= 8!_j O޾<גH>87UR$- /[0icLDqœ}CȐ/Ә@H $ xݨ(_4S4Y6l}jrrr޽[jnScGC,X2ſ1]_YM ! 6 iMvKDV=oNeLU@%}We? Zm6.*Wd޻nҪ,]T5@H $6p6𩣩#M*+ mm&?= (`B!ZA9y%Un-ψ'<+A DZկ%XmOriӣC  [ZXNt ޿oE!KmBӷgc [$0!$@H Uboe?cz®v+>[4vq*mNBN[9Ұ=ff' =)\1wb-hI6.$-̽q}$үZYB-j6fzĐ1~31BGV-imՃɶ^.m[;`M*CH $xC n FO[ӑV&NV&;Z5n۹X㬬,`y_P@TX3&c$4ҳ#cI lj YTR΃ /zx܏Awxx3éj<)nh(ף}#Fx=|E/@H ӧ^)bod{XFRdܸgfLPe???9TA4M3g܄LF;pa5V)`(wé;@H $&pW\ZI6 SXA?[,-&g@.Onm3gv+(SԶJu#H $@2%Xhl@ɉ1Pafĵp܈ $O"a~D0 ƨO{ }CH $x.`cj78D\16$B_G\@$@H 7Ko+pG1W)rḅB.E?97t7N $@HM"%iK@I.\ H8$@H “ȥR"rRPF<>_` "7 bC0$@H 7(% %D|)HD"'29 a s07dqH $@ K t0h__WxWsH $@58Ai1u0ǘI#po^]NPI;@H $NC̿ IDAT@kOPDph ꗧ3!4(0@H $qDbh3s<hb>5`q2JD|kv4ꕑ<.#̈́jQ9Ij5tT KvGH $GAÂil`H([y\bGCX+05hȬD-3OecUl ݘdCP?}i@H $^*8"x:_d\,”V$X+TKϢpUGW>/?To}3m%ZٶƎ*a8|ꆻdR(ccGwѱ`WcBH $x (9JnvF@]pc\j)_Ϋ5ss-ϢKSK: smzo ʃ{Y}ПY3IK۟ GT~ӫ7;_>Iц$=mmg g7ҥUI|}pAQf%Of _nXH $Pr `˃~ 8|ϥW * EyϿGUo&$nk}=.Vʠ5a3kѬk6p1k͌Ux%ֻG w.y\6WGbKHNbt/rGpVʉǫ7Dg{t!杧V^܈Ȅ߈OEF^~LTqjȂ{Ȳ5#uQ ˎ_>| E z[}뿷#Zcc @?;e=UqkzRV@~$eYv%֮#~;5 3no35@/d0m.C.n'Ӂa4I+)%#cv3H*h-.^~u ĠVOֱ1OvoIvz1"mA':yvrl4= 8!ҮxEylQT'Y?* 05=f tځKϴ{ɽ?L*rc3|uۦr'ѱޫNr>h!]llOg63fs\bz{ms;2p!=Z;m\/vn|cmH$h_UNy dS,S]y$.>W *XϊS(erTItqLQҊ6 lצ=4G2G`ʱаG o.wE1#- $Ħ[Ewoo $kUP.jCʪ1݇4׳{s|ZU=[pm7bwhl/c JOo_٦:zWS󕏽|{alMosă<(NPK)(J. <+0N ]fB-ߕ(I^Z\TأWK >FvP"F&p09q~M\jjh$KW:лmn.dMTέd\#<+z U[/>˳"JԔ'MvJm:wk/Zذz߳.<&$P4wƧ[Tgư R1]y:_o,gjOB H 5x62!psA(  Qeu(iUI9^/oۮvZﵪff<קvI>ݝ^!i{.'۶5O޽dÐ珦0&3JЇiiէ~'N_fyKiXyeU\y d笙ܗEfn΂m˿:<}UHH~.?iI%tknl Y0`_L>6-6.w#F'ia;W> awOf+J& k$m'M,lR9q 6IeayyU̞Ț` 7RIVrd\AG]29sళegljjZS{HPr1HՆKOhMTʥƭ[S.>{[U#\t$`BS-kD`JOKxB heF=WI,W@#F2kn@d3Lj[:mObȘֺexU?EHe!gho. bEoyƟY'|h8oT&pԩ-ݢIccJAD2Si&V&Ԃ6%76lXQQѳe&0jAkV/ZU~n yRe )` @WsAj,MZ[R=sU=zzaG@g#Uk9*FFcw. SQ{7I 菑DB\'g@\{\M?>xy80mXPЇzj5fG|&QZ,!gˊ9K׆vpj/7蓙'9ݶGiI 6}v{cǏ5Ω_V#^^q>Q߳Tv'Wf ٥*17W/Y{hIey[*QOtZ4*ZDWccȦ' NɮsւK^yO[2xֈ좱ũwm۴MZ 5nXk*/ضɺwۅ0۽sMIk}HYbF^rjl\8//88 a5Me-̟~Um@Y*ȦYAݳ1~AL3H r8  r r)` nBrY"U_XNT/CdަJFAEE3^F1!|•t퉕#Kѐ>36MGi8f>İ5|TuWΗm^+]4Ur-V\x֒뢋fvϊyllj!,qІFK!*@W͔?Kw ˁVJŬ7 > e1̵k]Q*e1}}4GsE/4֪2sÔ ͺiϪ4sR~ꪹd3Nn3P)k{jlj!2KBV |kY!FY>l/󥹗bTMZjK$^1l$xfv8!LJ-,--8!q*܀˙ -m5n dc=gv@S{ȗy!4@^7s~TY0ډ/4#^ ]&P'˲߯ECCmۏw^:0"MNiv@4R$jH j+=.;خ. i_ jQjg4F'M<_CKWOӕ݋2v =&׽MњNVi\_ԚzK,2$?ǠٰISI?'IX+D@!Ws1dXI$ NQp{S(gΈP;`{^m܂zy,#mAօLy ֞Iv_V%d韛uKVh-E_MTm5mĔs~НA 6G-_ Ai:ßzkLaj.~fیZ6zvsla4zB/Z^}1 l~ֆuh̔jS;?osDMCU%4 Zjom޼n42Iкaq91rc5Өe5311, r)۵4b$^- ǐq9O?7'eP+"Z9u#`ֹH /sAr׊C:9: ]o".Ȣ=2(nQuG²T鱺?/ K =k>#DQ :./|ENNDmuZz;ݺqFر"խվzfҝ ]k} 3qነXY^fSš7a,U*e68mU@ǵT\"ZZTPR*"}]D 2ܙ$$!A@@r.IɝBJO@2iF|\`֣YߊrGTfmx;| BMJuI 03 P(HPok+WPmSE9qIuJK_ԯ{eL^ A{s#b7$W.nMMq_Œ\џyGGLSB#u䅱d,9Sr\ì>I)Wud8@-L`gR`MM8U-rorA *̻RxO$i(*}vDƝS1&Tu]~(.t\~~fbBo@־{xOW:mLʗeD˗dޠ™>er2v:+J+=;BŰT )3x} 5%厙b.,7,f!6OIe^QFu;˱?Nc(tlMQ>1/ XU#,7GyoБXAY *9Ѩy^[]SȽ7ErUt6ǠƁa}\-W4srZ/YL.>n@p㪷5HKBo!Pmc~J$OŸRQ_7x=Z'Ϟt3m}K*a7t)\/2boѯRX$^`߄dpQRH{5Ov^G`-3;ɇe ,˛7[Ȭ7 $ШWx/ajjȰ! w%4zʶg}ϨkYSSlkqQBݲ滓P?3Щ-6Z+_ϾWv xcHƍW/] c]u ꮇQrv7SQ8c%IwJmQJZB̘ (:I)f|nSIm/\%_at]~ wٲ|HcV-Q.t`14d]w#7%pObIYebH’;Gu/W׶BX;s]O7k]m||U&_ۢ`;yQwkH颒2Hw3N 8׎4$Ce37:()㗟.*Wf+c~#,ٕt$> 3{fff˯)ey*{eLa@72!pr\ 0ɵC0NUV".8+sO2L7FQDŽTEM2y$~8`VINnƭAX]$Q?p-5%89m:/h"U2A$(} ɳ'޾-$=퇺,:uC5l۾0qs`_7CQM3}kJ/0f*la@Z}j9U5FʝdBev?oM/(>Սڰ>dl 'nEW縯9q1҆]F8X ߿^%hz'^NvL -jp̽a kV^J @W]?Ĵx&(`ån%sƬ;GEبmEv#T=2d%z,ly^W fd0CZ[_#}*笢TMT ꛛZ~j*=-|SQ"Qk0͹S ycJ=Άb\zez9% }ű3@V bVT<p$Xd$pIa}Di;N I!<7+Yu0TZuY};Gew -\-V4fGHO")ܸ+ ""`% ߜ-{c3 ]X6TAG°Q?&nQ1~b\>t;ѻ^_@1C+qDҹul'z*?i,9xcHv0 r IDAT1bcϵI/qQ%L]s#fY4 C8c>pP捴eKlNZOTؖv :sP5X-FW 14po&2E F֌fzuM>_~A˻;(^\Yz;Zg³[ԃ'qH=$[!]ϠzGcb7(Hzyr=A;_%%nP<Ȝ ,+1$fኩY⮩oV[>أStxh<׀KC0 kUk ]\M/^-RT7?ogCv{eWhP`ԵŮmtJKPXQ*JLc*/nE*!N'wM[XLܗE~3\ݙChK[:˕HMHjrhЖt5=guVh○|ZMtnảHS׈ ?[hDܰcjk5춱P=Ry;ʫIc~L~߱Kn& @ICEyVm:v|Q;9.ю`.wn߻Cjkhض<v!Ӓ'AKMhnՍUhmEǶc]imЬ}8206V/{L, >?!U("QUtfSPmu0 #*PxTn̬±հґijasA4ux Hm,Р1`FiUUK@Xe*2:m@iسGvzՄ|.ܻѦ6}kM,W;p+L27 NGϦiމ5< "U@a1ֆy?D~˄(qc*uGo?7_%zp_j 48tqR5+30UyUX4!q~Ȫ~S=?2eo.#NߵXzdګ}g00fkh^QbL5%S+aXowBV*W03f%=4F162n ,+XS@A,GH%VN +"}ʁ8-PQb >1otfeV:/$ݗ-}fT*=ⅳ~kf.*=|4-vx z=g&ۦ@O蠘 ӧG6j8$6yNqήs+HĹy%]7oVmĬb$[%su %.?QQQ恟f* ݧK{z@H 7MyV4৻7h-OjljiHp]y!F&ms[%DP~՟rG[%3˖UwpƼ'?xCQ;zrX.cdPZB)">hkub=#}ipmv+Dbѫl\ ̌Tx‘ FTj>9l]4_y/Ɛg}G $ >pIQFf-(`fdi"32ѓdxrZZy[|?=FZ?_nČqB;yHڃ ƈ˰[J '7@ T]Sԗ)nhoo{&y@H wOҠZ9kj&M'aU45CK̳MHIBeOߤpl<恘vhҨ2N3H1 ]6y SέA^۪MXvuٔ3iIJ+ KO3$@ A2XSa`,i-7ML6b7iNNDgt5/5}捃>Xƶ C#=V ױA/5Z iDCZuu5. $Cp]]\+,րE$pk Œ2=87K@G@_Qæ7 GGH $jɚ5 `SKNe[ 4@H $^#ZV ~u!4TS) `vqPH $@@-=#aY] h`'` $@H ýV>%58aC~4z@H $ #7JC< y055 d{Ł?i K $@H &ɄqlWU50D EnN(X` $@H&P[K5ըfjӈ0]Q ׋euu,0@H $Nh0 vk5jZ1NsHpSD0Sbz/~W;?r s‚{E\\p $@H5x`T1ϫuI ,uPe'f<}1(j^wsr֎ m2`wGÉ~j1e}esWdK.Z}.F\I!Ǿt;;,`5P "a $@HЬɤ9|NʪkEϘյ*"Q%`C@|j9a㭔UVY.N~ 7/6Nx42:*KXsb<輶ס!S@/fCD'r#re\KQ83=32q^6m߳J|׮=MTd>}u#W^ON)#bЍT-!]gJsd?eHEv0e lHĠܬ; 6\ j{`}BW|OQ~K@H $$!󬂩P?OTǕD$""2U+* U}`!7P`+i *yKG#;lM&q .C%]<CF5!_rQU㨋"ץl?SmQn=+Yu0E xGPT]ry*+3B.!%!D-HD? AmO8m $@HuiZJQe ,~x?U5F\US]EB<~P01GMFg7엛nR^cGX5͑8)5k7Bkym7fX[יg+eHUͺstv%tE*zIP'V2'=z5B f\;sΟ֬cȬ?u|Y$@H E͙G|~=aY3GiJ -'y`0ґ`qU B/f'D'D| hM\tv$dhgxةCݟ U:M诿n0jlr)X}FI0 {$jV?O]) B;]c|V5J=ⷳ`۱ c*-ׯ,ʭG>ODH $hXǾ~ N^25UWT>>-A!ˊ`=qlWs Yu"gxڋ Bv߉gKutgTэ Ņ,N:okfJ[q|:J%f R;oD?jmE_B 7KZx۹G^=!¼^=^9gƄ@H $hjj:i"=~Fd?eV>+ZH(~_jnnndd^j*|EV d<=F\LXTFt$Fm\ն[$=oϕmƚS#HTQzJTf*D#2~ZXgS'LМ $x /{y\e[b#m j_?@xUvj/-)#{Ӊ  x MꞵT W1 W@H $^/81 ;tGgnV<'#|^6̤owdllEo!0_t4b雴{}q$@H At0\JEi6m@n6?m`YG:m^p $@H DӃ`_Ȁkkk!F^@@H $. A 5pKe6 n!pH$@H $ P啚VH $@?>"$@H (@7@H $(}3DH $P""X n"$@H Pg@H $DeD0S~X۱)./WRy;A/@H $8`Y&F?S kGW_|*w9ߏ%C|M} >}Wљ ;wdgκSwٯC1@H $hLиn;eӬC-ZdW}%7J9MQq'b6 c0REܦ_Np6yzJ<7*>:{s[f@H $>`M.=#$7 >s6l]!ⓛ&IkU^$QG׏Ya'9uv+X]$Q;{Ü wp^*t;r6s֡DHIN>` ׽#ȌtԌGg5] }i>PA{c1L I[:-ֆc‡GINH 'P}-[~066 :o$+oݝ[ Bϔ `f`Mk]Y.99E6aYII4ɇ^79FXRR"͗qy9D\ )_A,lmH#2j jNT7JG&ܾa 9r~vL8xƠ~HzO e(m^mm %^&}cwJ,!Co|?OHg$ThV =4?!ζ]3(v7'P֘tgJ^PcR -Uqr%Ү#7?Ǒ%G-:jYAkOh aC ۃXl?vc+DHnR;eM]]]C%ܥvsrw_cesokhT0>c@>̕eںLu23|Bmce+ˊ4|:vunFϕw9^J{jo03}!0"r"{T0+UmOkH= rn,$vs$ұ8wP=hhJoz6lpf=P*%aB*7w&0tߕ%O3LѮx ;W,$ɬ*-z5 5H>Wj8 aet:}vr?jµ =8+u>dU'h sQL黖ҍǺ.'lPcdlȑ\y|zĒXBb7UN\W֌XP"΍ktב4 Y F:qO}D /ǘ.?P~R$SҤvvvv!awt݀g1hgN~x#$hNo敬|?6BW,XI#q8qaEF*dulb8 )VX~`>Rܽ܄Ga=m$=䞪ḙ攒[%W wۮ#`FvWkvvQGҐ&$ÇN'%%iϦCrr7,o0F>yw vX!Y]z3sS|u(MN ˢX̑&D\.K^/=@[>eb41M( ڝe>ra0ao4")9BRvz`bd&YSɱ׽88ӾT٩Ee}U{cih/UIL͛׋LL&.2׭UP﫞Ò~u}3̅zz܃zakRr% Dz T{ڠq'; X.n͌]~!⼟[w4T41̍ML<$MNDv H0SC`C~js=hǴذ4ztOh۰I{WQv%2z\<,69!=,v%~{sQuNN[t{yfSNڻ#6,૰ (.L^>qEsd9^?{ݟ%יp2QyI~]Q~ȌCF[@d`o:iujTui6x' =9 ؖ#&B5&ܽ Y_L0!$h&[^ɶNiCRb.HNmJO =֩[m~L$Iv+슜`k]iNb(idoY^ǡsڐ[̰kL <Ⱥ gkNS ]<#mPp&s]8gCr'yAsAkr/)YxH.m?[{r4 AxᦼCa7Kn%_|P*j3%$pi+fr"A>:-_Dڎr'yy$$@{xX;\6]6yTGTF72)y]= =,Cr+bU8@${GnY8 igYт IDAT:}is͔^0kGQ]&MJު>oD wJ.ybFQYvj2Mj}6q9Cl=&ԃI KħNC<KtBꏓMܾ)& G4d_2K l_-&%;a[x/ 0J~3(b +AܡecCC?}lk|AehF%Qb|[H\- {~U/I/U Ii5Qn@N毘1!$Rh ~!%!*ޭ02(-`)">Rub=#}qd_o}e˪;|kcޓ+#v+DbQvOw)ΊGm+""~p.b}ж݃3(Z#'r!>M!h<?E&rƻM?3$uk\/.+ )4$Ul-)M;l6Ԭԭ}[*vqa{=Z!k:`Ɔ~d݀XuH;~i98_e}[K{Am+<,-9V&:4e|TVPEa#í;+f=dC:dU"D0Ǫ}])y֠pYǕ{wȔ;76JC V{7 i^ׄv n<$mf}ѮVuxPRTPyڐ{9 Ħ .># –kUXWI];|9^ 5.W\ׅ-D'S]޼-~ɳY6J݁N@{x&lg|7H U VF̘>Lbda. P&Gzζ=W7;+`5^P1jYO9~^ >j3#cĢq2ռsx`Ib4s04qA&E6S]R|u<2E > Xۋ݃w:mш3O(Zrp"[A~4Ir8"&wRUhҡ mY#ڞ)6}V2cՆZoz`ђŸ\|Qa|}3oXSe{3o(%sjkpA$O8eYrNAEpU\[i )I@UGl=Nq.Xɞ͘l <.1&̃Xxz"4Ƞ aP. յhT:قk$}d^ה<+>2Qy^}!B]2J{,Π_uT Xн+ST&.`'?g#$DeEӗg;Ա ))S|!/m4Mg,hjolA`;k.H˾F?*i x_7;}:ij86{ỊgdzAnlߐ#M֣H^>t?D֌L5I¡lzt،l_FnUAH ؛iҹCլ)ct0/ՇO>/iPe49wƹ먈S8dԯӳz~.pY(8^v"cVjOLpfx^Vâvu4iiIکN869W_0Ժ{w{_<>aH{Q $v<[ݠ$blB|9:Ã,OH IpE79>MlJ 4 AV,őKNol?tќ,Ho.61#H:̀wL5]q!OlDW4*e75o(:$BF\&56VV (y[MxIⲲjc߅eeأBXqߪNiu3`[7`%B slۡp1PvMՍBsKO:*=q]ޜV\#F,e):ǺOm lSV%ͨ{Q9J/hHЬMA#n񤼣Zdg$}7c=%roΓV/;ݱ % C 6|>,nd/^QSS7g{:{Og`Ҍ_ ]E+(`hrG6η&Փ}ފg Gn֫R‹f$LJ* y:/Ժ'*̨х/in %9T%mU^nVre `FXxm(]V!I.N(`(ȏncvF8ômdj.k/ifOYƨi X9n!F߮4@ୌ7/[%[߮iZEfՋ,) |#MTDV;ןTvꦢR],3.=(Yb^i3p_w**,ciak$+"W"f00+_Q165n>ª74XjnZ 2} !$,>1ͺ#$@H @tf $@H'"߁>@H $@ n:3@H $h%ҘBFKҫ nK/Kkb޵ X(^H״QsOIyXܦ?0GH $xU ~d?0GmThv!+n(j @H $h.>4kaN$'xO4 70h3gדn]{ y δ0эkwbâv~yօIƘG|BV^}aq ";OPy:89:챊ѩG@H $cMqۈ / ( MqfJJeN1S|ų!Σt%<+F]|יC{{ATySq`fA~#{[Wdpq͉ b;m9 -C+nL&GrewqIVG4bȍ»%.]]BH $x4I3ib^t g!mϭ#$g| S?3W{2ml(?GH $IEqH $ ? $@$[3wkvDƝzދ5⻨:(@H w@SD,&들ޱIdzL[|3jjLƦq]Mɹ*d q $@H@@SD߶]'@cnoiP$f@ 1KFf fx,o]wC#*/}XIruIL6I|~ C]p*/$L š5Mhfk87ZRˀZ5 vCH $A9"$M޾>΄- \ 5q]tdnֲ }T><΋L|hC !#yLyp>} 8]}+'u2qr0̱uO;ldZGW;Px-<ԁQ^4:us!+ }?9dUyQLFE_ϖ ; 77j3CRgZ'9#k\lFȧlHJCpܣ*bD-HcդSGBnd)y S8@H $"4L-5}4 ܐr`cT|-l&DFŮi=i'@Uƅ~l$ͮfAYQW^H C0.ª 1DiIMɪg^nQБtܵ-4X``naa?Q1nNЊ 9WJmJ (-ȅgXSuz:DϔF[3?9F;;L=x4;!mo??s^qօk@Ye_[nr bTrZ;ӣGvl;! ʪd9ڐtBEuNcmX 'g@+λz[<:C׎'Bj 3n!u!$&&;M)cs8#?CH $h taG 3"1/,|A:}ЌX;re2ְ0ܺGbUwkQ}nGön]}G ,mM O~e(K;iN ~NRHvnok>h׮Ntæ.$hiIGjKpE';{cM"XNڝgKut<76}׉=mHjP̅rm=mrB Eңգ#Bh٫Gmv!hKFjI5.̅ jw:q;k? +1!$@H 4L@VIe-TˈEVOpW@ظ^6GT'SK%H[UD`^O+䆠 cRꞙ \iAxtL|]A2zF|@]ovm}I4aďELbwlJ Uo$@HUHKKՅGHy<jjj6EEEs䯲ETOQ7 Qyy]Pl]WB~u^ۨnrsuɫOGhrU֫(eT4x:m ն $@H @ӖC 4$@H $@D@H $@n/l@H $hI\faMz #vߦg8wf1!$@H %В"~|%T !KܧW(c.<\@H $hYM%p387}.sZ 1G[ֿ|C]k%p ;iu#mݕm"$@H he|er(^؛Oyt~};Zc⁠@V|nI&\6[uLףY@cߏc8,`5*on)1x[<{ Qw&}Ԡs[⪼(qs&\M(!$@HC'w\)_9>MMBZ7!9g.6eJsd? NCqKtqAᛢKǤ80cC":7kM9r_ݾsjAq"ȕj┴Й5r[hAHסdʸ&:DTZ7X@H $h-!k&ۘw6_m/ub}0svtHe. IDATEBF ~0řGiE!k;XmٚY =h4}*e?%0ʷ[H $@H@@E0'7(m2.X="pϿ΄O[;r4hݡ{7rJ@ێmU**!r}Z + Ptr6,8^I1,BH $@4MA$[fLĐCZS&æo%xؐk$ t331KZx۹G^=`kh7auĪ.=7N6(} u>!$@H eJ*Zfӗ_TĄ#߲%͔=`D*a3ݕZ77tɻzFPj,)&LxgGǑ@H WH --MKKK[[[WW!&xla"O[_@+ξ~b=eT4"f+GV @H $8NmκV0 DH $xwW"# ;S$@H 7@i'ƽqH$@H $P4Q@H $@"t $@H nih $@H'"E @H $@K@D@H $[OE[A$@H &"=$@H @o!.:BԢM;cն}f魟/:@H $HD;G̑xb,Y\"X f@H $^MYQ~n&U6*U"uB!FZ->KFT^PDs;Ziqh $@H$\xzO!#Wۡ+ צc3#X#Lt;莘LHXBLuD[tnI\\1S&|헳v&dc#~ܶI#G$F,M- U}pH$x{ 4A=yn`6Ys [NXNW|я{!}kzAc(aH JNF,KZ e|mSx7.&Nz9u-?2NP b’;YY4)){L>}0}HmY YSTwg4 K@H%\]*%=l%Daff|NH\F~G4r|4hiEHxLa}Di;:p <~ jK0t^kF9d +" JaZ``o/ɺgwmuvv>Wו8Ã>=CX%K-c $@ hno_(G賐QWtRO0ڹ + =Ypiۊ9A^]'>qxǎv$t4J\ (\3Fg$w |#̌,|\+u݇+ȓ@H p ;|~=:B1<_(vkBn2e]8!ԻYߴ2Hz7 5h|ar;Ͼu:}JrON.hKoO>0FRfY~zlRjɞ3T+,AH \]vٵvW~)d3قΦO0 2%57VVv )'˔rUXC.9Ӗ C g)lY g-k֘] $[]E/Ic{v^H6!gE =rXNsrE@ 6ėk ٬PA@$W~!G?kb?[YrF;xOQ\eB d\k+sOk/ID*LsK¤{SqK{3ON3$-g$0iiiikkõl|Mޙ5qu-P uAB XQ h-+_JV}-P-TEj\P JP@5 $3&! Xw}tr.3ə/u{D@`~_O;0 >pfPsbY3ӇL&HZK+,)1r^ Ez/6w^-0[t\FU~gM5 YPKܜɚNɊN'&ʧBa|/)i.@ N7Ʃw}4=]y |;-Lz e㬤j#N*OMnCi͘'EJAMeeb6:Ut"3M{`{\?R{V$hMV}wX&?J?~uٰU+-`<Zkmire~*,褄09?UFt(*@ :^@)߁:``$/|#aS:-L̙ͭZ.l l Uڇ9դXSY'6:2i:o+ؤlޅQԛ%"*'h'1S9lRzcc'R2W5%)8wC4:K@P Ly .6]CT@mq^f623jI˲&i; jkj)O69W-TѦ췫';C?'i`]}bՅ~K\(!zoly>+n9*bBG 9EAVXM|CNwsZjw*@ i@$ F_(U{뢸YO}dvL ^Rμ1\ͣ**8Þ?sBl Ųhw珑!EsXJ HiY r޶ťʞ,O kbA;ޑOZ,!p.W.*/H5k$%p' [L _o1I9% ,xmSq}yB U Ӯt9Aqw^۾}J>S~xJ׮vd*=,yX1 t>N5[kS ?+,Xu@ $Jz p7GFo J,k7%@:;"^ќh"-- ee%LԖ]۸cG"ų>Y]\Q?+0LI(z Ҋ:jmy6RFasfRO@ V#^~&Ir~|`COĸ=;mLwW>7'| >$b!Z +7wH[ّ03dsĪ< yhfpN#7%Q*EǧڏM.fL1P hU=Ђ5;0"rpߜiL`NsPo @ 4xϼnSՑw3v=Y4Kr*a-Uc'T s99X뿋Pv@ &O\1_:vʿQ=W=T,6'=#Etm%IJ9n9TW"Xq't)MF3zQcA])&i5;YBNOtm&^L}Q1p[TULUa<ߓ`:x6QET$XnEmy кQIJo$[:VY 797BEK]0*m=x_tA N>}  zQ tu!z޽ M vN; MNhLMME C_kUD"Bv*E؛)vs_7'u;Mbم{D> G3ۚ#!J[ʴ "BW ={jkk3 ɯ=zh2tLB8dܘq,֓{6_xJF͓ygJZeȢ)ۮ2vf3W`I U4oşՄiWVK+D./=I6@k7,ymY i8';k+ӎ-`L @KiyY!'*&9Q( kK#<0B>7 9JNO+p 4&i+,v DF{O5%#1M9w5eٳvVc Qt5{VsO_C)~ie ,:2~"XN<EiÖs/ ~o! nj?Xp>0z `7k_pv1.?p1kYԾIN\r)|vO@5"@'~ ra 61g0-XnᔻV;=O5B L{F.BQL=uL?j#luB'klM?΍?{]áŌcqvu>xgp?'/ҽV~=k =Ru)_̛`f9aQW00>d BGq>TƑj;ؔGGWGl1l !Ho.[|kWa_,(h @B{~O*0iIevslyo"C<`2e(5 2W8l9la}9q1N۾4W$ 5Hl qN2 ),[SzX J]k;7kn ظPƮ_ ?/(,.XVr_644Y:{NĪP痍1(86ړ{wwѽl`| xm t=)SVjGEGO7$uEw ?%iU ~@"yUI1-tMod8Pszƣÿ9[(VfzHaP^|nhݣٍC7cˎU灈w=GƄ] 1v^O|Tm@U&p&.0rwKmQ& ½gW@kg>ݱ}0L?k.q4,dw2}&:Z2a M[9EWS 2{ェ =lȈ f>] Q)#?))?u=~!&o ?[؂ܞ4 @"НGu:flj{k^Q IsFdj5c q胚tuQ4_Y:.ыGQ] /i/hv0 @ otiM֧Qrܔ[iz 6u4HPAzMG!Z_UwBuavQdoa@ #Śޗ|gf?aW|@ ^K݋ ~-J @U`= @o"@ T @ ` S@ P%F*@ x ,2L @@<` @- F[0E @UܿYS}HUkR&y;)*ܻ_m6J @ׂ@w`ѹ@cF?},5h.snk^>ɗD-r톆 @gL;Fl9qOp>Ԗþ9Ο33+.T\m~L+fGU[e w\juã!CmZGC9@ CF{ S9ӷ$7ܴظ2K-l+oJ,cwn>#Ɂ'm~Q+Y:k2U2hQGTչ+6'lʃ+HYyא\Ln\v}p&d-!ģ.i5 8P^%߰@6{pJ5d@ ^u7< W==.Ti>z߭VXsfI~ӻ}( ѩ>3g(mwm cÉs\S ֑ G oގʶ{DfEihI]tzScF~sΐIX%佅p/A'q]on}uv!Z;-k fAUߵ,jߤ '.^H c`@ zx #X1AZv=E~mџ%]Q8JsYSdžՂc~r?æxIݻ3>6!՛ 6-vpnXa bs8vI.5>-a`E AږWgp[H2!Hz ۣ#q& a@ x #X{}ؠ fөnc1Ec!ޗmǔMYl1)X0qqÌiE[a ]1_ۜ޾, _Ʉ৬Ih4wqDn|i֊ rIl->3 ]'v hv>%:4U{!]BH1_' jAh7i{!WgdalwaRp[U .@ x hݨo7ܽ)ü5cS;j!-"]=lJS &PVWEá hMY{/sA $ N]B44=Y(DԂMi6giT25 ]'PpӻZ o={jkk3 t֣G-2=~?2uJWwS kё`vWdTZ>L @ [#nA^;"ϸ{tދo+I$4=c/ @ x`U4~ͺkd~ǸowVe {@'ƥש܏J+HM$Ԝ$zܼҺ: SӋτШXѴ(#G#Pp֝iJ@5 `"2QVL1ki*rSy>Jgq4Kx(6/i߀5*\둮!Eai]'C^^e*}"V)Eo.Qfof7".圸lG(5Gki/ tE4:5]TyOPTҊ-}֟d@@05QX>&Ԡ^ɾO)&3p~Ym+&!;vD Ŵʚ;~Vή˫!YA)\qp%5?[W=RoX:*Pә|&w0i,D!KqT-䎽j=;֊%[ʟN5Ś ^%`J" "t/KVyK- `EI)LIj8%+u):_|[> i a)ZAէJjy;KfrFK˿ٟۘd>>#[D I,R#UC%7;{3 WFO*H KWwm@Bۼs~ oO6r(&E|["Dfvx?IJRG={4m^9)%W$:PTYQ)iPMu,! Vt 6yx4,90Md3p/`yD wdG$'F*E{G:o%+*,\J2 hpX\%plZ.hh!=sP%+Ū;lGfy} Fk排e@K"TXgIa$/RTݦn1:zP ǝ8xUESJQ 0X2̰a/b(G3 τlIa^IqÍ-B g3ºloh :AӢ0fx/,x[ Vrg0 l֟%-niSf&7!0BGLC-S5Q(F:s 6q_WhS$7qX&  }2ykpǐq9wg&HܖnhnVtПk !'d^#% A>D_9]+Q)%hs- H@ кQʩ )SGO2iB1ɤ!P(a0uf72tRc10q܌DB2rF @tUބ@ɉ=4 tfڒ=Xڳ_"j$i\oUWTW"44#8{}m ޙ<@F ??gϞ oq»t:FCǏKȔN[R#FXO~x{Ws|ΨT$5hLvNl4ԓ"{YAǣўJDA)E 輱zC8"> cW@ JJj J7k ƖG~!;O߈`xW#FN&x &.$@c9:ZY@ 88@ :Ok\Ts[ & @ 8BrPlB QyBHfTѰgKOHrZVa;@ ϐ@:Է'CpJ{E2)\Qp dOc}r7҂?*쪼=nqy؀FҢ*MsX jDtU-EHDP_y'q`@ Oڽ)#&3R?-%}iSg[[#PCݗ+Xy3رb!hJ{f%Bpy p"Kgn)K?\Q3Ґ ɵ ͐WKl8 y| @:w ͅ ܟ7mOL|2ƒ4 CvQ¢SVr0ѐn]Vƥh#R^ZS~b.w~ń<:w)2$˱<:8R8he6D H@ @@3m.ܳl嶄v^e=aDxîYiD)ç0Lru>#SƄp}g21%,:.3{ r圾B @*Uoy| 0_)F hJ0ɨ6:HGJcenrNZ䁎f\X: +}z-[tDZ^ 73*- v.| @P tM 0 $2yԛޤy.tSƏ]9d<Uij ஞo.sқq<©ou<ԆVL2wY={MEeAo2Qajb^ŤGwk߭o~Lƫ+NMLS~&A@ pgW$o$4zDo7CާZ] zD&7ꔍ?/ۏmу"D괏$Pp_Mݺؓk׍({C.c[df*vw73YeazqQ:uڭ| ,Kk,PtFwVx</@si4'߳gOmmm8]:NzEǏKȔ Op!zttt{I-`Nl#~SFni`5` u-`Oob,1 H6OA&Ba-'&~BT- i銺O~'# IWS!|bzf%?Rx t~8-u6l=LhϏԬbsľNErkHLfO--הC9O_o/w]jeq}*, 'FEwJQ{y؇ c{>{롃f&Ra’ӟZm|T &>hsWLtFn"l-籴Ġ\/ʓ9~ k툑%ũpI$zU(w%*]C"B<]WVHb"6UJ]gb!XTj-s"$KC3U6XDUd(}kH*IFS:雥ʇJ%P״P+~RYtN.pL^m]^ k\^ROhlx+.ak(+e}"R,OT pXR1%1&f&"Z`V_BU $UaH#,NMA_?:2hT)DTƇ-6АʚńF]AZNMaB&Ϭܤ0vKX(nFó55|7ZB 359#:7U|i,e!'?42SyJOlVb,/`yDW)$F_֌lmYCT!aq?@AMe#;SM&1ٶ"iZV^|B͈aEKt̝,zH[bo^3wo, eV#?&qb=Vc=?UNXv$~mBG~_.K=ÿO_<}J?][C$QysSFcգ}6r²c%GYY9su0Z~g8ڹGQE7:UhIr,V^Ħ3’8(#` .oswr9 IǔM 3̭|!{WT+H#~kUGsWNgBCH@$`$0,@b0e3QxJ65 /C>q15Dhk@#d]dX/ї(R#2 ؤ%4e/ %Ÿ3[~7v}= Zl={El=ڵ7:V܆;SHa'o}NL }OL6iuştlC}%M"D#&PC TKNò%*#i;. <#*eB*={e2viHxg`a5DYgpGTl9̈yI2CR^tةA9RGaϔfB#yX%p v yFK\%ܰDhTD^I/o[ 4C~ (U3 ƕjN1N~=a"!&V0W IDATF&nȗX?H ;P<; lY2 Fwb6ہc5[MDt.Zpţ(1glܛ}^"h6B3S# rU hL2U$#`!TpMf13 =rzFT0$SIKE}SS׸ f/p?pG8b_(?z`;*A!ZlvFDҠ3av>o'TUOIIyj``4 /`]B5ȼbѕW*6 E jɅb2zebm|ɏ٪nmmмRZ)\%͹wyU 707a?;ѡ( tPqÑ>J"We4`Q̠zHX[Z\ #>@פ_tqܶxqVG:L#DTuN#Q1s:67U4jӀrnhLj33%G뀘CrP3'$95ΓaoOgoV"C1DwC6XX_ۗxOUʸ̊Vۑ8B^2`;l)tG8G~O` X\,*`V숖J;D5a=PkmadhUܱssP8@4`ڲϫ"oYƊ( Ğ=3hTjWn03-(gyL&>0G#%5 VtFmUUdqnmu!D!yҰH)*jZU,*;.ϛϛ0] &}X M)em>(GMPnxגK !2a0-X'Tp@A>SҏE" h43{fsׇ΂*;{dZ|AYٹJahf-B*\Ngp"E*72}:aY!)0NNPώ:SL1O q-rhfŜ|e$>6FaE:SI'nuFN)EI(ÐN7sbm2JK# F{}]xO-MO7GY8?\VJZbrnO;ҰKO^!Fx2^`7Mi'+`Vv=%"a+b0'iTBl0cm?bHz4 {:O5+ lZ&n@yȅɤ DF00 vfQPiw*Oڤ4T(fK/l2Ȍ憨~I!`t:C21u0,zaca`@+uE6e;>db|Դ?ۭQ[ʀ]1@2~6A bWفʽ2g ݍ!/_ڗZ3r{\?7k"7qy9wk+:a&.8ޜ t֪ly.jM+O5Cm*ց6槏8"a%#CQ.\5pƴu8VqustpIk[q9,_e~rgD؞;Ʋw̿wý'&8)6@hi7>™'voZ_2 aȴe"=Ux{htZ]?쪥 芣YZU~NcTkJc\&&f& אd`} '*ȢӞܜڢ1e/5ԢήXK/>HFlUA&De+Svir`v]n ^?FS oo\E0WޡwT JnVpz%f>?Gc33tyNa#m}uV [Oou0ceɰ$ hYn]a~g BUyq33ص=LH;-u&,>K%" VzZ=t 屆հ4P5 E-|LkHG͹Z+M3kW{*#B i L>;k|Ʌr*eR*^a1#ApnʉU(M>ܚAz6b1PپmXڌztPwz$BGZPj! G+N_FhO>Pp'*sAMxjJ2nϮ̤J BaBE>Z>FthDWҹ xhOOQĘɦ֡5g4*=7jՂsx޷z%vlB4u1-)zt:|+ct&^I D F1z!m̀y~=ӓ?X+'W]=v0>US#c>RXe:uL6E-GCI(nz?!ÿa YLtHdFuVA1}ԭe*;Ns ɮUwlkybHt>%6ΠאU4 gPTOr t]*R$HE o-- b MC }b23WVGQmbTDl"QUkHzLBy[J3T0G6Q|:G.B68~&{'ט"s$i8%<a"$c5b7rŐ"]dA l&f&rB\oG-{dbR$z&cZqxa.Kb # SS 6I!Dltk#tX"}3XGR|SweU}}feaQ9Ȫ9ff}il9iI"<xpG vܺ~ulYhWcƔ:Eh# <$=겎%nD1tOcG|KL[I+(K~_It\FUV_Zծ^.!\ dzT|r2_C1T&nLrtת}5~1koUh` {G;B俰|wK-G E/qɔ41\/--bY|3慐"}bd 9-FKn/% ^.*_!IS/5]!IUh,oN$)@^;BЈ*׬?R6u+Hؗ Ď$UwK3B2J^>ƺ.LϓɷA)HMJ3! |cG,n}\'9>?]/;4)jt5ꇂsx9Iՙq)r/va7\VyG/uo/4)6(2&nzZ"] ^`'Yn]6͊jJψs^-ұXK@ Vt v*֨c=Cs3sRJ ٳ93+ IJ~C Y?tGДOcjH(et FpᄆT%e8_X,`׈anڍhԁG *~rx=d9:KvƖ}_s]nCK.'innAd%..)}k|_R Ɗl,zºjr]ŠkhTwVϏ1&O,\;$n1m!QjW+V (yExcB>7sv^YO$|՚2PJ7ܿW#d Z8@`FekfGx Nēc?ʐ :QY}5ۉ^;^C5gk1-iUkV4P Eef n$j[pEv ^wIe|a øg%q½~8vVb!X|SX`R&JhCYltYָxqLqډ=ZCʌ:s`}n&>dL *xA)""K`8(L}͐3iYiC9n->B*x4^Sh1yJwY"]+BV'3?BA6Us6w%v:Nƥ2\rM١vc _̛k gλCpZ{Eu%v54kj/3g+?!;bf(Uч#am BW9L*m9d.ut&7!Y!F+S"aHWZY$,ے?ckHր\G|,M .`!vBwبL{2!z=n /@Hq0,/V~JxHllyy]aʭy?d9̈I&x&XD& ,FObbx+ m^O2yFOIߑ'҇LUa9Q #q&24lo2 썗K-ݪBh,06ދ.]F&΃z>iL8D?:iORy' Cܳ{JL } ;N-3tSNail%p['-E85 _4Mʠl.u7'2 8XTVJΚ|ߨx 8ȵi,l#H4L}H žqgDw`rDF+ۣ9`Ni(HbIJyK'y)~|t’urR/C85'4Jp ;Utei籃h9U9+gcICJ%ɶ7R _NXSaqz D6RG]Yzkٖ؈._SK-z>Mpj|6Tũۗ,W,RrGňZdDڙ+Crw/%5Fnh\o7?ڌWs*fT+تFdoYm NOCM*z(,iE1wi׋FץAo(/^hV Do[Nm1?{ı?^&HP*(VQPx}Vj냶XUVP-O@*TE @*  IDATD &$VVw>9=;{v,Bllƾ\< YrcFViDUqBSj0wJ\J獬LY=PtM!jNH bNNW67l_"˺}Q޶V<گ,+CEꪴr_T)ݔzH* ϑuU!0D B˗26dNІAWBm$cdamIN &,GB1퍈r`WO zyk&_f,M!m$9ݟJG-2P?unX xM+M;_Mh5WVTBT>W7|n>+ < \,3 ( p/ZCXȖ&+T\.[r4)cYiT9I"cցAQWQgKMƸd74\%U6k"w,MNMN%"}0(YUd! _kú>@^`I,*Y ÄvSW1]"|h;*Fnx+CY6 ᱿b0pHG$kT6jRXq).،uoc`/{w~MPS|p-贿^~)7\KOx {ew+*JT{uQ0ڼZB!. ˩kQF ҁmIHjm{z/-@6p@Qg$ު&Z:@ IM禌GpQY9(J 0ċx]o8 ɀ`1|7nǿgFZ{1 Eis/CWz ~* k?IڏRE\Y_ 9#̀`e+H^c$|\aan(W}4j$9J"-mSőaU[a!hn#:xSadU߸-^2VȬ2݅Gr -K|GX6ؗ_lTDEq5Q3gG̈})iPĊP,x`>!*QĨ~7̪ۖ%o%}=@#z^[?7Sx*WL4sWJ'5u\D 2^[SApЎ3FTԂ-<.mdߔdMUr8'wNl򴱷w"S\snu,%DY~Q1Cy^(j6WϺ4.fÇAo񨓙ױ hu ,Ϲ)ۧŚLFfs8[#tF}N榦6絮?|~ seQF%vy#z]n^Q56]pH*54nY596ƫ&^E6w8$WƩ7 M5AzB?I桨˄`NgyHhi# .Oz|w'C3@ꑂ괲:p|!h{#9q\&ØJLD|PT@A[uZCs @3ӦM{%{2R* 3' UìR) I'6S/< d!Bc kA 92I&XSQJ;XHM$xfMCy| 7wcʲS!b ,Kd*R$8ˡU8ɳT.'DtX*.H (aUH@ L wx['sj}7yhX S€$?X$d4$ 53*J6">_HYR \+n1RKGV)a;W@<>T6 oٌASTa$QPu:ReQAsCkJ|X}uG"*B]U7T6 r.ʕ+]tڵ@ _H zAwLUAcǎ=~!x^k\FYj2 cd:NosDKی+aæP[Qf똲df;} SizX? }8^3$ dN};F&X Q8{@Rת؅IeCΜm!v2.KTE=w-q+6jtkIb]^A}cH1Ģ Sf|Iic &K}s_0{dtieƸx1Nilj1pڍ KL]w~$r988BsB;!b! vbb 38x{zӗCCCCCCCCqN0g/u90s6!!!!!!!!!9/]s spppppppX{mjj?+]YXCw3Ν8+xrm988888ډ@N0)zw~g+#Է7Ɇ!|Y*??l:8+Z+xRmLܾyhpnt:nILaP(ZZZـ*~-j^kF {A2vۮdC?ZtT]*ˉu4ǝ|>8ܣC?iS6)>6{C2m2xޞsvR0y*J(ȪJȮ$%l4+MH ٝ"#؝{nRbڜ8ԩSdw"=(UI#>VV(C.bVFZ,.K!KuU_>t]B'J؝9q4Wq~Ξo*\ߠGwBU)-4,JblL#I!Ku%4;u"N(7JfJ'u6$ǟ19ZVFZ[}t皹OLlUΫzZ7Jۓ$n8N,`Ye,J=;7<_ 8}e佄}(-=OS~Q?&& 4Y |6/ꇈ#IuȕjlAHU~O|kN{H1BJiA2L<53$VU_M#u{2!ɭQJ4^-Ѳ_u ;[IskZοP}Ȕ=VeО!KʜYkj+El]% o hs,Gn zLWZݞ}i!OCs:rC%+jyF%Ҳ<Ҍ}X` ɦ mWuB9,"u'r|Zrt_&P75jLf#H7HOrAp1M=&H5c덪h4CO40-Xr"3nPoI 64)֌@^("--nE|G71@:8ߌJD̊{5X9TI#̔}ry2(ꥬo!u]j)DyQAse)Yi|gL]G-ɝRU7jT\HZŬuJO-YMZԯY~S>̔͹S13 uK]{u|{uYYyocOV_{j ;iŊRs.9>en]ۦ<\: dwg4e86#Cy[ƞ15,|^o0:S;)qf~y>MCR.>BOSI{cS񴕁 KaM< 5&^\?م1#sfaG_ ˺35ZqjZ$oM5;{0u8gvIht)VwТYEs#\(KRyzR'U$L9=RokhWyZ"voFA1V<)X~pe~n6ݧ{*}N o fs֬{9q7M䑪&np_da|ag;sڷiԽM݆$Gx;f;aHy(k ol7bæpx7.Ȳ~S"D~~oA}]= C4MH0wkfGsFƈPjv FF^JB;ww ;6^+ ;f BYհ/-8yc]x< Qt^TЀa,ͭzI77 '2ʽ¯ڻ3=s\NSSlNp>ϟ6:jA&h 6H,BT^@VLs8{BS0XX[INDÜ<\-P04CɼEΎ?:ĻPRрmFtDBBW܅{ȫ^`TfEOu1V|e<(=v1m:BQكߤ/m,`z5XR ` aK zml\0BJsIgL`L^|V-lpQX3T`ȁ<5WmT.4bIF{#ɛ} {7 zJn&/ #҅Ҋ\&el~FSQûxW8bPmYp%m q8$ 3տaыQPx!OrpQWa2ӾW/Hd>*ȐS֤ 7KP3ȄCkM=_px?;=.;G?5DY.$x%K? lZ`}"NTAhDOIWf2=SQnpL(E9M=47cԆ;CHSco\SPXʑ { P$G2(.%R:$Aw,;g{'z,$O1NxC|YIW]^`Uكq&EA}pI{ُUk_V !ՇI{HϯrO=dyfC0->tLk銄iͺiX6~2w kfv!ÒLb ("o^=.1B6OCNOPNNN[nk"zH:O_ZKeN]ҧ^gQaPFQȖU%<Z]V.3771.%":덍Ҁכl+?\d>S:$-`zֶD]ft"6c:TRϞ)o DK̷&|+ט%%{{)}h9ɖGUY WPib7U$}֭_áB3{\ \e UvJ꓿"С| E%!_w+о˓k BZS*V4EYEѭV( \2T*\60~_[hWr;Y 7jO)y&]2BͮP(lKBlOsfVVΰt~J) O2tr|d(]k *BW`&T,5J*| 2QT$< k߫&H4x>jw墝o8#Gt!!}(/:rpբP3PUη RBY{ԅ$:(FA_o?} .ӳ{5GwZS]>\1~I#ʃwXq=k[20]$ttdo:|a/X-rGv^ʯkQ0Ŝdr wٱ3&;EKraiIѡ+§EI֑P8hFf,I1nP dﶷ$9: 1tGjȤ;c!}f9/v 1Q۽G6,gw{,[g%ߡL9; uh`y8h{u#U&Ӫ'zMŕl.95 [- mH%HO%sÃq RgRaIbL# )2jMZkB9Ȑeڦm?l6s)&^ie~ň3u9/9DҼґZ{^S»\ q-kհ.b;Mꍌy)=VoqSzh^sR)՛fCglhz)uRxMMTX+F̱b7?Ұt zP ̃KONwk"<xC&w"Ͱ< >^'߿oeeh"V 0{-l.6mcQ}N)TFf=5bt -8!r+KdFW%܊$ǧ+FBJ _{OJ| f[z  DC#wD. Z 2㓑 ڿ*},BPK5L 4Y(0-LX]fĶmSQa73{[uڟtX[mAaW.$OM2z\F,?&Jmt. Fj% GW0T8+۶Sk}rcm!5.<a1\mrtE  -s?SB::2B–9!n@f=4,D ]=FF[QJ>0EE0`aPDä]t A.]P/o_H˃K##x HB:v옎2!H,1E[n! ̙3?1$ fe;XgaWcS:Lolg ;k|33>uZ髨SKbPuvz'рBfF\KsB|z]J頰r2fhz W4"M=nvF]8epp40%wxdIdA}K]z l#b^? CwdhJ`Pс 7˸ m`ʚm֬mՅ<.n^[_>:۱ _yQt>st=` СOȨU"sm=EnGFjT].J`H^Z'W{~ x-0 @ںu'qLv-A \t~_MKo%XKAnCC@Zn{Cz#:齚&E>K ]h^s7qLE0]a ȑ{qp#7s\x yOwJxFtս[H 䍍MF&-{/Z m8MyBV}M;HN/dxrpppppppp=xZ<.Y`=qg~70Qq=iΏ5#)O2tt; :DJQz,<"7=aN8jNy=y֬Y>[ly TCDrW.SRFXcgy {R>U%4W=6_Jܻ}6haB6& ғ~NRFѲc&~RFuCNi_~Xp( c[APzjA_^Iccoίȯx!M}N4Y\Mi;*0WqbUx/dNCg5yi^ #২l}rXӤKO~"`}(.KTZ!ߔ]ВfҳdN]x*VMñWKԌ8\խlQez/Џr4;45̏4N!922 i,M?4]hGwCgģ.:MN8K$Yݥkfz-`3TOJ6vwZ5}@!wbBĪ~QIZsa d {vr#/jIY:%oVnɨ{ѡP6oy0LLGFJV|p+y[I#蝊o=D9}SBѰ)uf5Kvr(<=7k#T{)ֽӔdrZ:Ƚ=k'ܚզl؉œ(:PP>P)MW^Aa NM3H'0XEҖE7%V;ƈO=_vQޣFyo;xur䝻p/6V<)?[>:S3 nUֱ-OM glő{x"Qܻy&2W}PpO|(k6O7_@dY@Xȼ?~O[>+ݾM@ 8djM+'jZB*k6L=Ө/ќ7. e ev}u/Zā ZD. HP򨡨dKQo_TGڹW++',fCL&ԹZkPCoܺeVVAvQaF(Ş X\6R":r:^b$yW^d !M8vfaJ^yN}IRIޔ!LeyEzd]oTUE5Ep\G$a?_pZW%_SAkN(KAQ3lIbyӃ]>3&e&m 2O㔇\Z+4p,%+moiXHZZuՙ)ΦٜvEIA3=Ϗ.J5:3;g}US"^ ($R啓|^3Au!gj6! A`4MžǕ$L/N6ab:N3$f4Jyŏ+'e/O8qu1B Ks\ n:25jSNxEiEY^9L/ahDcfƌ4->H.k̒TM]UsSV-wZjOc8'd#dck_ft"ߝ>|yzPkEȞ;fI7KޞT0%o,;);}Mg*V#@:"FBz^|;j2n_u#n Ǒj2,B+t4:g&)Gk& /iScaе37R <Hq28Y4'~"d = n*ǩ)LnQAI)qibη3n4NɌKy{\&.{ұ&~y`%'2&DR3~ir`1. @"az_ݬzG#Ž37AK#vqn2sU75髼&?z桟#Ppq3=QB$믄="x}tPo51]Q^}Aûb k1iؖFCoi+\t?7kGHqv >iw;:{gB#Vr SHe-P<6軠3iFy+z`{SaH޹6{NӀ'nv B%ƌ} SL8r B.T#3b`A^ag;sڷߍQl'QR`E|gߌyA(ZI5K 2Į 6|  & 4 `ie{Vp0 Mj 9yȦŃzvHg5=69SΘl IQd*0&y ܓ歜0U{#ʺq^!Vcd~oq-95-1Z@M{ h-_y|7WYլ+SlPFzDM{=(%.[/'}y<֠(aA߀-`yſILo; 4ѥ#i_ڹÍ#<ܰ>u,D05,V 5Kx=viW2H)2ݬ<&mc*c/iLs8[" kUuMf~Ֆ@㻏hV`P;)0 c+ SMB}[L6\kJ \ ,E߭[}3 j/!LI~eazXY̍z΅nHf!k'Ñ(^v^}{Ito6IaG,{ |ް2;f;a6 FY[X  *bnĆM(Ѫ}2zpiv%t-"zq л~{{Tϒ<35>c+&=Quۏ>'v݋1x !EazKX\ϩoؿ]VSVZb*%뎈>pʊI)ܯ߳Plt C .b uVgoF./n?n]Of.GO܂C]Qa Kk*1?O~y)%lMp};~YH+AE7~6d[rB|fex݀׌ݟQsk&]F0|Ž/?Di IDAT%>hf?t)2dpKhRWW44| Q(WaiNIB+Vz'nV,zkcoQ(8:e~JXؼ<-N85@o8 71G"CAST.-$IppeDʊԖKOJiD؋ &!F6bM DPXPs>I,;+y/L#)FߔnjmrmU9E]IҔ]UٔW'XzILTAhDOLI'& AnPGYCc+8uxRe)p^r+j vEJ,GLE1Gl :^Ly.[;SabRiZdH^Ջ?uob'>Px<6+; 4炟K)*9 [&>fղ'PO{b<t c<ZnrCb6T4%@UʀKF6pYI:0Tdžg!͍-0|׏ Bhz?]sgrל* {#['cǜJ PyY*~߈~4}_|+R47dBW/óLx("4Xuae1__]ӻMGF4Aݟo +g_Fx<`ҧ@X0:_vnjXbaU Z'T(G t FSŏzfObpsoϞ^/U1D*Eȅ#] &B'a`(Zt߁fݪ_L|T=9m,h'oiۇtzrOLaٷo_No?qh"bd~:fGٓ##rQVܶįNeQɰ~ΌXUg T|9To$'VCi{N8oT&BoXgFvE>%"$P^8tBX6LѮI5iVķ)CT;2^8NǍo ߤYq9`HV OЧBe9%:Ɖ/3E1sd3zJ>nٞ>eRvZs1jRE7ymo5PSj_hRJ0a߱hƸ/#EhٳLRԝ5dPOf8r[BbP]跦/|aox|H0&"n]ÇwOM^KΎݳh57W+ݜo~HE(OVZEI`IhՂ9 ͙~/}FJT*h+AlmB0 LLdGf Gdt(PԻ;s*7`!Á<&++#}ȻxH(Z훱<9 9b<@"LyEwjb5~_@khWr; >ZKXPV<ζQD77x{oy)酜Jq~^dV^4 }/Af*o?w|y*3Zv_עxXdYuErVqv iuYIJvoA1(+>i$jvpW\V̥MLmh 6 #g:˥D^uND$u=!ɩE^a oo VzZ)vv~5큨%f=@'AJBW`&T, ?~lk)V+ZsmBf򭃽Q%f}jTeD;QV^ݚA +R /:0H B\]SZ;Y!!@)8v*P& wVL=^) '? z-ls#^>7oXX``KEax1 ٱtk֬+ۑN D(xfCҁmIHڀ*M$D"RJŋۆlnO'GhgcRKʮ2ym}}s(cm}{ y PQUy*8@f܎ CIOA^>3M.+~sr=jinqooG!Q jF )k͘ftOY_NǷ!'1eFĽsNaj͐(׫ɺ~,Crr+Ü3hPz3o?DF&kIaq~Fcu@gK[0oYjbalQ떌add;_[hٌYЊ0'^$zEs}מL/G9Gڿ boonܵAQ;W^=>FT6NFoC䃍wӆ "& N*n$HK 0y ˖,"[jL $pfh3wX{#1̌<@8/*U!(K 8JZUUjFL2hG+/zx9^R1rn&ZoW#vFYל^?+J7x%62YȀOB}l\&Z^mwE4d45&EʌYmd>l")dx6Bm:ݭ3_J8ӈON nt<(;YߌF(QEc D;ӘQW; )& Cǚ 8t8I11k Xvt764tՌ:k0 ~e)2R|1PNJw]w;=`d{9:vjW y6u^3iI'?.ET?IV(br3 /e]<3m4f7 :+]6u%b 72FA2Yɡ).;%a!ˑP!DȐM$\uXe4l6~VY a؅#,K !OD\FhR }g_X;ƂX*9کn7Q/aK5rP_+k q}#>Mfd(2d[0 <{Rծ IÊL$U4m,S.,YJSVe 4EChF!4R~>Po<lCQmdSRAϳ㯎]4ܖzj=UDaofFDP5{Ft&ISTR&.ck 7;,?;Y3<F]z(FoȆUv) \୨i>s?s4o iQY`zZ KWX1h,uqyPCfЃ} ςޢѴP$Ppe橏EJ7lkY]T6 *kEf @0$#3ݎxB„I V QenY,İ Nli0kX,"1yy}Yj5h6Fw"gi;2qO6EYʽM fN@g:2-m ypŻdQHrxj mU6rvepo$ZanV~3Ɋ4HRhlk51le9eO  HxV+"QP顱M<|H<#CiRDA<įK{;/w8{\K(PY 3(*Py %jB(5ʿf%tԎ1 K %(gf EmO>0;>󝴇wf fdsT}v|nC GC$UKӬ>g[P}hlnT ͯ>t6y.A ܳR3v[Vz,>fo3s}ׯ iM @@37\5g+g‚蜪\6ɣ;\+nv~}wڬ]$tQ5Ei9܌GS?RN ֳ=iۆN\:O3"Wiߞ @Q0ˇy>k^ l{i/W v?Uw/Y]7o:c7o}o*xɊ,[ Lv"叡 *EO/?)LI8גk֎YlWEI Fo-+u?ёJw<#sWخ o7Ub'+&-~ ?ep'_5"6gmr=3G>_ٻ)%<Hz%,k5y!@ `9={7UoI)Rk￐wwz z6=$3ѝQw>_ß<]©7 }qs5}avAGٱ'c;SxpjN+Rɇ}cOXv z\4D]j7ܓ֜֩i=Xܞ/-{:zs9W%=ױ~)SE.>ﭤc_L\@5qk܋~)ٵb @ `3Db ~.D/}BҰ^O.0V<47αΎ|-1۵S9I6KŬC׎w6bI \w^Rz#1GCgH+՟Zz}oXmKF8O$&$zSJֶǨJY9U\o?L'bUO1mǑ\7ݗ]48ep:HȕV =m_#ޜ7b5ůϚ9.`UD`RurkM覼bLf͋Ү$8l ޤn%W:vƐ&/%|yzT[y8Y{͵c'?a"SSfxn^{&l/41#jJQ'SmsYn̴/[Yiqm!I;bAFtwfg'gѳCe]-(ۺ,؆[;Tl NXm+Е- 6"ơqv-qLNa)3h3nOSe$n8 zuњ́M@̞7Y6L,,$"Bk,×&NnX g̹# j2u߱=llI_.ELM۟1eAϥhs񸞁Isz t\եc\eR}uF}L*,cO֞S&"Ury5xQK2'op]vm98dbZ+@/U2J]<:u|\;1"}uᎽGfQi/݄҂'N۟:d]"3x~ۨP()!.LYr6k*/g']I>Zq9s]ؘt)fyE/>{Bxe .Cblyq- x< $/jƕL1Ϲh7**'33je.߼7z8Ϣ~_+KW> euYOˍg]& dN9Aњ́UWUg=5D~G#CwAs(%"AY0s`DbInǭbAcÂKܗUp5laل ~gui40Y~}ggiOqc5XB$?nx '4X`,XJ&85Dܤ'n])_nyw)+]jFe[yQ ~w! 6'>KO)JZ wr{ d}GK:V9 hKYsWnv䄞]: JlB s Le(W~n>! 4L1g NE~}h"ƣ cOmn耾Nl3D{dء3azȔ1N5`K?JҵbٶcgQ;=s8!wy==>هݚs9vy5؅eP0y,g̫9p#x䌍* !"n"&Z$@u oYʷ6TE w}P߭T,B\(:^ڢGͨܕME'KhLs6s3 ^E.}t[u0HnrbB($g{u_~SBrv'bY>i4EN}LƂd[6b^}yx,{Y~h9#,̿ jAQѩҝ05Y{gL+4 >}o2E'IQz{v* :} Ӹ|Hj*H~/iҴ#"gTƆd Y_ v DZ/q+풽]9 p5Lyn*қ7OLz96]O1?8h45 ML6s#X^s,ӑr]Sik⬼kڏ-GHz&w~ępw~jW^pKّ}SojF|¸ ~IiZӧ  (".")+_ߛAPӌ,eТMJl!wׂ9eJ(xAWZug ^)S(J؊L򯰥,3l8~M k:'A ˼xBcZpXo_±2;UTp %0F$Bu'ٴiMx*mm\##9?Er/"4ĝ)gz1i2n}뷳s`eorb钒M+,H O 0=:?V(ˈ{?eMhP2"lˌ2yS\6vgvZW&5l E_c9^RcA`4\4i{~bS[rڹɲRv%<~$_x`ףܾO!bxzؔެXbYRUqx!7lŬWf/vEHꢟf#2TYT~E߶e9M_.koo  !"n"&Z" \藔%xgWwV:;>OU278aYg!b;>;쏟6],v!ߟ/E:եlUPlaS{!A1lK z^f r9<=6~dGũKe3fxlIK+ vpљӧ;Z뾻YAR?I^N#fӄ|Q4yPg ,n ]" fl&cԀV&Loz, Q-4kIܪSRՊ/Vgا9qc,zLe fCؼ读sQC[z(:~(-c*;Cwc~;094;"?ۻM +(rdf*,g:jny ҎC+=rEgJîvP~>n(Jr2:YHY=z{ Ƈoapeفvgdg #N":V8zbm=|* vpڞU:}$Cͤg5@@K8)H0Gi<: sδ"@vN-ctcbݍq&ҮJ;Ly;B=U+ӆ.0n=9(-?-x+Cb̄:ؗb(Z,;y006UaKߞ:(0P,(6}13Vu1T^OpBZ*@"z`}RXx@}7nܰJעn,ݓRog=:(́[ŘՂVco+;hY,_vX=k-cϐMt-ϠY%ܑ& p PKC4k/TB0 ݻ #ĸ1ߴ3*7o7 qԤ?|wqaӇ  @Tw}4[ZZZVVvʕK.:}xzzviۢ=( 1if,noSHO3irG;TBER' "G?L6Y~n(F MWS-HlE\t&rrihd>4s3݇BE/\?f9m/Ȯ!674a&7J<=whG+"}Yҫ!@ 7@o۶miVVV n߾}>}zM4?XM-zF ,3]5\j fh骺r[ݽfTyq8 u%@xQIQakBs ˖*`(1,-BKnr V&{oCLSV?Fͮvw`]k͉Н0⯧gV!@F4WKupNhRiѨvEpCl^ $Ÿu)Ď3.:cbŬS8YmH}KIa]3cHggtkt/7 6xYߢRƯFvO s45ѦM .i^5 Zōa4sE|#ٲG'3,:tQpv<6wKqyYh9{sގfo\=)PXn#=CA;0P]vO7ՄiC_fTm/T5S6]U;!#vtrUFyv\E~4n|ȭg5@@|$-T.0J',^lT1|@Xd+3wzqm8^# dFO]pʢ:1Eڏٯ0&:q b  p}ݬY̙9o޼[Ҍ0L4nu@ T>]:];cXFSb]0hd5×l|^oιș,hG{wU]|[H(,V!@-ЗG c֛"EhtO r8SJn)f_ôiPL,MS.O3݌8u_=th{66ͩ [cT3Ļ23M{^is-NO&CZ&@5̕H$'NLHHuzBp{0ehu Np;anMlg4*63z!>veww}Xڷ~S8eEEyj wȡs'aAnʲ+LloߡKgGnR &* IDATA(WTVW8;5+L,.qpJMW"t_.(JK54l[ISv@#G...?,~PܹsK,ٳ' vzt1z$<>@wD@$qtrn1cھ$Nnƃͦ ::K[R'gTJMLJz- @qF=;4HL"t^ @ U_I`KS'V;RsK2@_0thƸ֯ S1⯛#a cg+Y'_s88u@ոބ7n+4L F  p" ᑷ{0 1*sW/T+J*|"X u#w @.*m]F/MN?݈ +[f55o0m2}ߕ8 @EF}N @ `ݬ3L" @H?. @"Q-Fr @ KP=$vRK۴nn=ػ}hP @ P\詩~{NZh8o[vW~)m;F?蔵L^9fjD6mFt5-|.œ=ϊ_9e}̝A yQ`Mz\=#rIDi Fy y}Jjԁw,Ϻv~s*!*툛/n喛_>ma~acCs-J|I¶f[Uiϳ/wMҽȷ[;YS@ pO v"f+5QtK7([>ҽ +CY0Vu&MܗfǽlW½G1j6({?9J#?I?[%gɾ]Zҽo&TF:f]y3'|uW}X񊧽 g8id~ðtl-+g.|uЧKP#٢/V=v {ٳkQ?5Ll*';5^E1𥉲O_~ɞ{cZW[:MwˋMrsKgl3KXu ^ci}[u'0w>u̯gBLRζbNu}X @@E0wW}N}fl*_Gu]9iܳ/}ݡ`;ק-L w]UMN?/[ʜuzn9|ꙧILVx-󅯺{ug2dЧRնfvc Umus*~&T)ϧG8N:}VIX%=KuU ԒN"zT\8}ˋq[W|xΘ?ܼyi :&jpʎ~W5z^򊽣vL\>Ǜ9 8xg!=jO}dƾ9kr]l]=ZQ[<,.=ItX;ksZۿxq8 @6YDZ*?oLaƄ=}Ҹ6j.;2jjD{[Ul)=1g sE[4UEٸ;c Ua>'EL#cә=4eZ7` cyR|o>E7YO';@Ο8 dr=02b`O/8я-O|VQGRMԣO|]۫0SzHTZu< ?_Vo\Ğ~-ЭC WVtmڻbv(s⭩1}Mu?q ߊF_cOB幰]յ4d˘}~'3~>{᱃,x:%ccXeصcҭm?>xvt jgӡVu⬛Zkۺ_vܵOYM +\ݛ rh ;=#N4VTA{Uˊh5]ze5US.m]K6}L  @_hu=f,txV܈)դp_;k @q~P۪צ룯p)y, a~]UՊ?,lKO} Z4W oo;PG{+= ǸQS{e$߿zX/Wċp;]L#+.o, @*@լw:Dct뛞۫VbzЂFN׮"30Zj[/-ՊZk&JmRe'+7SԌq Lj&7M;kmk(~ SS&"u=OEIᎪU+U+@ D@1J?X>9mKnb+cZ DVܴG/~ih }퇺̉g6tW7b#OTn4ɤخh s[=شZ!4JN(C=([A$V @Z"@#6>%M @ WD<, @ B=M  @fO8 @Z&0mڴ(tz~IENDB`PKXDDPu u 'celery-1.0-archived/_static/comment.pngPNG  IHDRa OiCCPPhotoshop ICC profilexڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $pd!s#~<<+"x M0B\t8K@zB@F&S`cbP-`'{[! eDh;VEX0fK9-0IWfH  0Q){`##xFW<+*x<$9E[-qWW.(I+6aa@.y24x6_-"bbϫp@t~,/;m%h^ uf@Wp~<5j>{-]cK'Xto(hw?G%fIq^D$.Tʳ?D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9(xoʿܔĹdff-[n ڴ VE/(ۻCɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG499?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-bKGD pHYs  tIME 1;VIDAT8ukU?sg4h`G1 RQܸp%Bn"bЍXJ .4V iZ##T;m!4bP~7r>ιbwc;m;oӍAΆ ζZ^/|s{;yR=9(rtVoG1w#_ө{*E&!(LVuoᲵ‘D PG4 :&~*ݳreu: S-,U^E&JY[P!RB ŖޞʖR@_ȐdBfNvHf"2T]R j'B1ddAak/DIJD D2H&L`&L $Ex,6|~_\P $MH`I=@Z||ttvgcЕWTZ'3rje"ܵx9W> mb|byfFRx{w%DZC$wdցHmWnta(M<~;9]C/_;Տ#}o`zSڷ_>:;x컓?yݩ|}~wam-/7=0S5RP"*֯ IENDB`PKXDDhkk$celery-1.0-archived/_static/down.pngPNG  IHDRasRGBbKGDC pHYs B(xtIME"U{IDAT8ҡNCAJ, ++@4>/U^,~T&3M^^^PM6ٹs*RJa)eG*W<"F Fg78G>q OIp:sAj5GنyD^+yU:p_%G@D|aOs(yM,"msx:.b@D|`Vٟ۲иeKſ/G!IENDB`PKXDD+0$celery-1.0-archived/_static/file.pngPNG  IHDRabKGD pHYs  tIME  )TIDAT8˭J@Ir('[ "&xYZ X0!i|_@tD] #xjv YNaEi(əy@D&`6PZk$)5%"z.NA#Aba`Vs_3c,2mj [klvy|!Iմy;v "߮a?A7`c^nk?Bg}TЙD# "RD1yER*6MJ3K_Ut8F~IENDB`PKXDD[{gtt*celery-1.0-archived/_static/up-pressed.pngPNG  IHDRasRGBbKGDC pHYs B(xtIME ,ZeIDAT8͓jA*WKk-,By@- و/`cXYh!6jf GrOlXvvfk2!p!GOOԲ &zf 6|M~%`]* ΛM]K ZĆ1Er%ȶcm1`= 0 && !jQuery(node.parentNode).hasClass(className)) { var span = document.createElement("span"); span.className = className; span.appendChild(document.createTextNode(val.substr(pos, text.length))); node.parentNode.insertBefore(span, node.parentNode.insertBefore( document.createTextNode(val.substr(pos + text.length)), node.nextSibling)); node.nodeValue = val.substr(0, pos); } } else if (!jQuery(node).is("button, select, textarea")) { jQuery.each(node.childNodes, function() { highlight(this); }); } } return this.each(function() { highlight(this); }); }; /** * Small JavaScript module for the documentation. */ var Documentation = { init : function() { this.fixFirefoxAnchorBug(); this.highlightSearchWords(); this.initIndexTable(); }, /** * i18n support */ TRANSLATIONS : {}, PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, LOCALE : 'unknown', // gettext and ngettext don't access this so that the functions // can safely bound to a different name (_ = Documentation.gettext) gettext : function(string) { var translated = Documentation.TRANSLATIONS[string]; if (typeof translated == 'undefined') return string; return (typeof translated == 'string') ? translated : translated[0]; }, ngettext : function(singular, plural, n) { var translated = Documentation.TRANSLATIONS[singular]; if (typeof translated == 'undefined') return (n == 1) ? singular : plural; return translated[Documentation.PLURALEXPR(n)]; }, addTranslations : function(catalog) { for (var key in catalog.messages) this.TRANSLATIONS[key] = catalog.messages[key]; this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); this.LOCALE = catalog.locale; }, /** * add context elements like header anchor links */ addContextElements : function() { $('div[id] > :header:first').each(function() { $('\u00B6'). attr('href', '#' + this.id). attr('title', _('Permalink to this headline')). appendTo(this); }); $('dt[id]').each(function() { $('\u00B6'). attr('href', '#' + this.id). attr('title', _('Permalink to this definition')). appendTo(this); }); }, /** * workaround a firefox stupidity */ fixFirefoxAnchorBug : function() { if (document.location.hash && $.browser.mozilla) window.setTimeout(function() { document.location.href += ''; }, 10); }, /** * highlight the search words provided in the url in the text */ highlightSearchWords : function() { var params = $.getQueryParameters(); var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; if (terms.length) { var body = $('div.body'); window.setTimeout(function() { $.each(terms, function() { body.highlightText(this.toLowerCase(), 'highlighted'); }); }, 10); $('') .appendTo($('#searchbox')); } }, /** * init the domain index toggle buttons */ initIndexTable : function() { var togglers = $('img.toggler').click(function() { var src = $(this).attr('src'); var idnum = $(this).attr('id').substr(7); $('tr.cg-' + idnum).toggle(); if (src.substr(-9) == 'minus.png') $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); else $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); }).css('display', ''); if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { togglers.click(); } }, /** * helper function to hide the search marks again */ hideSearchWords : function() { $('#searchbox .highlight-link').fadeOut(300); $('span.highlighted').removeClass('highlighted'); }, /** * make the url absolute */ makeURL : function(relativeURL) { return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; }, /** * get the current relative url */ getCurrentURL : function() { var path = document.location.pathname; var parts = path.split(/\//); $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { if (this == '..') parts.pop(); }); var url = parts.join('/'); return path.substring(url.lastIndexOf('/') + 1, path.length - 1); } }; // quick alias for translations _ = Documentation.gettext; $(document).ready(function() { Documentation.init(); }); PKXDD8[/celery-1.0-archived/_static/triangle_closed.pngPNG  IHDR tEXtSoftwareAdobe ImageReadyqe<WIDATxb`+`JJJ _+bBb;@̏K $z|@H!ÂErݻ#6E (X~sIENDB`PKXDDb88&celery-1.0-archived/_static/mobile.css/* * CSS adjustments (overrides) for mobile browsers that cannot handle * fix-positioned div's very well. * This makes long pages scrollable on mobile browsers. */ #breadcrumbs { display: none !important; } .document { bottom: inherit !important; } #sphinxsidebar { bottom: inherit !important; } PKXDD{kjWW3celery-1.0-archived/_static/searchfield_leftcap.pngPNG  IHDR-gAMAOX2tEXtSoftwareAdobe ImageReadyqe<IDATxڌT]KbQz4?$m*m`-C`!00/0p@AM `eE%fnٌ=}:kV:5UlR|uu5JfYґ?2v\nN2 f24P(~X,###&&` X;^b%C]]]Ap]wpeeE=::ޅB!%fI>-//.qHzzz^ϯ"\o>Rbq @B 4Dio`>G}ȗIENDB`PKXDDgK33%celery-1.0-archived/_static/scrn2.pngPNG  IHDR3dhiCCPICC ProfilexZuTo~gNr8twwЍtw(4X X ҈6* R53{eޙy@gDD  1"::9 8ؾOhW5.?'1]1`}voD 6;C5C=D_.bO(ؖ{^OO^{#ّ1`| p=b vwDr{m׷0#߲0}-5b}b~'/D$& ?Kvv6Oبlz@@H9 ԁ0 'AQHi(@=@+h 0&3̂` MpX!nHd!H 2  P(J2<TBP Ac5-C0 SŒ0',Kʰl ®p!|kp< O "P( 2@9|Q$T(uu5zF}Dh:47Z6Dۡ=$t$,* İcD1#Ĕb0W0}q[7, ˈ*b Xl6[mŽb_cP8&NgsE2pqq7q7<ρ | ,~HGDaFAKGQCqb5wOP%X| I# ncgJ %7e"e)e#esoD"QIt q"Jʎ**4U'cej"5ڍ:zzQq)iyG rӪ:-mDG3ˠ{EMEAB@_N):*CC9M [\ZO332Ę̘BZ&~03k2{0g0cfBϢĒre+ k2k" ;[&[wv.v= bvi,GG7NN=Σ8縨ScQS;@JL=WVC_#CWLJѺݭttuuu1F9d"ْ\BcsԫЛ?ɀdcaece8lDmdkTf4m,`hljnfrǔ޴tL,Ҭ?hذ$[XNZq[[XmZX~GpO؞6h+rY[Y$!;F;KvG_9H:$8˸kێ N*N&c\\]Z]Qu+nnܕsݟܗõ#'gguoUO/ٷw p h D2*:&:\-4|1(6b3!re_TO4gt\xLL~XؚحN080'> .NHJNLN|T|3#%)EfjuAiiYiM33"2322<?%.#+'-g.<%9/)o&8 `и(hk\YşKJ)9QSzcb>nz '~:9ZVv3gϞ:G{.yO.^li8ԘӸy1KF46W]}y%}[+]W^&x-jo_xsf7ojl$u6U}viuWn7;{grohB_LNSX޹7d:ta{{=uG{=|hp{cSϧܧf>^xdiӍgQs^P(}zZpZޘqy뻄Yx6ay>|)oy/_Ɩ\c_ְ2j{kk w767[e?~6~7 s\o.........+@!Gra JVGmBbKh@f t@0d .r]8Tt̜,BbҤ*fVi%} aC#/ 6拖VZ{lmBms{M0q+rxz%z| h\ VIN!e?6́kqo֓hESRƧLoϘ\>-E@B"zR%L%GfKm8sI2r J*jS5:IugF6=}A"Assּ+_+n+jHx#fxg-N]z=J} ݼ8\6/~ب1>?81I}Lxӱg7׿(|3J5 [wwKsK}H k>F~t13 ×oK|=-io5uS[2X viar58Ph `pU+.1jց~Q m56Qv}\ܶ<6|~тiBGDD_I0IIYKdd_+*U(M%^i?ՙ'1240DCfC#_yV rumig >Ypt  K?Qy*)vXqLr ։aI)'SEdxgfQcG/Lv_Trģh'\NZIUN՚W;c~\  /74^oiͺy5ZZ[F{;& Ǐ!OCh惼#+o6ykjȓO'=~=Z͌۠wQqsS2?~,TXҗ_IVھkY7^l~z!v8v ?I`C pJ5ޏ|v#)\d2, - 6<C=c$V1l9L99nrx_(F OԉFiCCVRLRSeH rr;m !Jʋ*Tm0jE{54?i]>c+Jҫҏ1036ԙf[[b-g$۸jqww^vpvqsur3w'Aīۻѧ7/?2/9"X/D9T<#"|5Mxdtlo&.%IJLLz`YOlNƃ̺,7ss/Jm-/;Vzh1lߟh?_SN$VU-TOyT;zznWϝ=_b雷[-4|W䯒Yٵ8z}&gۭS_vqP݊ᾑOEGo=:>9uI3r\HXl!;5I_e §5vXD\E~"̵)b@D8^0:Dr! CYP%th&p.BѠtQ1lNE0L-fˉuVa_pA:_C!KEH(!,RZP6"j2)j,u83#k´'6c03|f`\`rae6`D&V 6 Zw8p ZaE>BBKOTPY )72eXl<9%-Ƥ&a顕]3QO3c!{Sob&GV;{H6!~:Y5CkW?(8T5&2`jLD⁠O QɇSv;gٖ9[y 1~X]jxt孕շjn\_w|JCE&W:ntVV5,`,n\y)ʗ^[͜񏣋K,_Wؾ~|X,A "0 dt!O؆ErAz CHO{p \߃Q)t-ba~`U^g;W)) ( VJ,%;.UiNLAQqɐb2j-m=&W7]ɣ7wj/DAbG%IKIKxIra 抚JZ*:jfZ:u=Ol{ M0YY^mf[ox'*87֞z|G9GCÎoFD{V\[Bdɔi2,3_Ρȭ(x\]L_rH"Jzq֙sh/5i7o_).1sdmBPOIπïu<8Q?UYiW?\z:'/8b EdX2eh`Z:"򋈱Gg`""?mOM)҃ykT=~`_0hh1ٍň7 VB~_t|0'!f?!_dG^ G;/@?rO$ƮnwtŮ_!5H[ƄFˡd&Z xhv V@uhuD ;ij1m2<^!^u#??'S]'{o[on E&}%yM¼%yH$U_5^x pHYs   IDATx\SWOvHX"CA@A"uYٺ::R:j}[mjj-QwՊ{ ( {C$79&! C,XhM=9ۗ_N{ &$@H $а u177NӧNl$@H $X {6wO$@H $P'&LpNl$@H $ЈZM#r]EH $@uBtVdfRkKD̨¢ZuH $@H!n?X(tЪH(h EqJz֭wRҹ8:صmٮi͠A+'>N{T[H $@>QWڶ~uතݪjT.ߎ[>[\i˘rNX@H $ݼy#̫~ y](Tk7nh؅o-@H $@÷lmPmmἺ]H@H $P[B"55`Akk#$@H Z:?_XrZ$l@H $Pj h5lBX@H 4H5y\l?XP@']{vIZ~v=Guot/n)=m5i(odU~<_ٖs}qBmêBQRH qJY֭FWX -۰Y^Z LX@H &Ps|p=EPSv!WrWo퇿u/^_ۋ?|lB|[k')Z|i;믱F/zo2Y E˿dMhq/њʿm{۳֮ת^ tf3Sre|m›!o\Bd[A1_.s#ұ9m_4ihOˠJ}r\ziOı=˽_<ѻ)MsKǞ Y^) AgIHփ?pͰ”'q a.o\H邵+{ݞ;s=;Pw}r84qΆi7Cޣ{:ˡOӷK6ozk+ौ>sBXPt7g,F(>ekɵ]:}S/sB6itws!q!Qqos1L 2a n&6qju1E;@wnL+ًqm:kkO Z^6+FttZir)`"mh%\Z]:[ zNG6t3dP칱-=owfP+''ŏ/s{#r[Dg`q|Ǥ/ޮf2AlRTZTO4crk7$@H k>N5S٠;w$.G hx#{Tk] ZX0aZE_rnBsk@.7`vqcr~҂ Iˆ6hh,UK]\!y?faYc8)hd"Mz֡I];Ϧ3%Y'~ _9Cr:X2q'q5._K$ ~?~+0.,a$v-cV+zךge)Isɇ[yi*>7S|li5g׽ebM(1|CH $@WA48kVR"t~5+`X6NfFOШJ-5Ȫ>Mqv!S<-5F"$9з{%)u(tF mW4BQ RF me3nKHxqn~޴V#niU Ftn)+1c#Peq3eBYO8yj&)|o 9*[Bl"2&;qF]pv˒q8,YA}WCK5/,=}KCH $ܴ:¥L-_YNhTe^> 6=N~ޯ'(c?t0S0 &2QCl/ A#fVEş̿o7QAt q}mڡ9jS{،*gjKJnQz8tI &z6MzG;h!ccHKp d4&1CCȜdKo?WxόO}\H,{o܋D$Zm$X{aXTnX㺔[pOt- 웂(_Լ;d0D`?2w @H $lJvaT3UeEi٭E >r,Ṿ-*nqB}M/Hw:*ۍgّHV.8;ؽ{[^dnMC e%>G?p>}_l:eU=7- uv!Sm'v^(60 6u\ j:ONQ},]-'_gy9W{LsኴdzZv'湽Pl ;{wJ@lr&UB`KZ!R&{uB74r,}.=lu}*V;;h׵{beil}]Z5+:xٗ򗀑yDt/,\k9-;k{%wn ]tԾz Y k1dǯ]s=ilvCH $j :(xp41e#P16)mwMgw5Nm{֖©Vm+O~I,) ܂GOGmQ}f".nC|cl"ʖD棏5”$;e?8:sP zrk6L3ڡelzm~K&ws9oU)`t $@H < $@H 4z@H $g]@H $=~ qH $@@ ݰ @H $hnܸ!U s$@H $lZzb/$@H $x 5^s$@H $lp?ٸa/$@H M@ƽ=@H $g}@H $;U\Dn$u5}^MN&m$dº=-kXS]ɣ#sw5?GG>qS]ǽ:NliaIªY3YWC[cS1@H AnRF3w@'in|7nۂ)ëgpo!w$4-pͺ9N. n ~p}WJEe,UMY>gq{ IW7ziK,>+8 ^OZKt=w!@H 4d5='%&0t' 笁.p~3WDrsۖA=9\},Jn{`gKZJ T$tkyq_MvW'޽u+1%][uсE I.lM4Yo mt IgOoqӼ=50OEE^bcƥV#_α ջh/ /lѷ%Ɩ0jGyBB&xA]`⪼w"?|P;f#&%@Tw/fzwД,lbV̅K7j"ܳ9)JK=<IU݂y9@iL ?14ϭG`s\:m~62ANՌϧ3l](±SI ܿkki^BRc^$M޽gDܧkPbBH $&PS\A`gԗu΍~H}nM}B/soD;ްl%a4;xEH⟓VZ`l)pt$ʼ_q^x[}ӁVßO8l0 k_|Z-Bh-_olrL@=o~5`_%8x L<䗯=r#vSwlj&I!nKT,FS;swՙ~] Ww7*cc?2V0sq7)(]Q!f^ytq~1R|h"lR;/eJ[d7,"4$mڮd"# ;[6ِޞ! IDATTӊ:R˖s-4(Y!/U.e'̴ T j:kP:85S_5m{tvg1CaJyV1<VF8iFK!Ct5$gq:x'olL<=Y+ ?1Z)WXBQ `MV.U%XQ3jרʌkv^+PnXH,)5LH $s$DQ <[0Qv+JK eanoFƞ ~iv]ڕAƼ2*yD]w'%_4*40S?"sƩ}s-Uy{Nl/mSAt*6OYgR2tb]ִ`Zߠ6%"P?Nܝ+ѹ}C=ఱT/V½I?JDbxNVQu{at8 TYz@ ySyBe;% X-g`x:ө$Sk:йtL@VoB$[Si!ge[ҤE䉱Bz~jBL_k1iݝat~~^U_J@H z'P~V޽ KZ[dv85y`G4OV$5\Ϸ&vf2Z6C=[0ZwaZЌS߄t̻|=ѐŚثg.VԾA/SD.[ 9kW=|gT[-vs/qȾt+ؽc~$Eu/_pjOoHuւsĨVkv0Py/tz=L_Pk6ǤLqNC}f+kf1Yԉ˛eO~lYWl2kɩ>y緲QY$ݦ}@N/|_(?Zعy)ͯ=@H $PjDlVl;y͸E?GJcs=+lR?o]3kŮ~[Z8vW/|xdJ،SI}7gSN_gϊ];c°Uw^qY"2!AȕS"oHmgE[8Mȉ9ؐ-%j{ ~gՌ 6ٷ!UΙΫKZBxV4kƾ7ZM t馛iT?ea ߿5ܺ.6<%5hc&o{g㭇E|AY3xM_'ʡЬIJd:FlFǁq/&v̘c atZuiVXj%"wƲKWbUV]hэY+:9lղK@H $PvATn-$|[ً`OdmMPR9Ϻi"!T./NOTka/$YsHr =mu %y|_P dYJu'O`LYdRBwR"!-)P $fiՎ-y ?;22)6쒤}PK9Q]ʄ][3H[r-֞B%8% BD}NY3v6:L3+4YfBcԻm3BRXwu3'ʝ E$) 4@KRs;L |Z8IVbrtv L0SINYR8OADfss|EuLZ-}b6-L<6es+Fg%EށCmFƲÅmfl"40hŔ{w,(8i32tS$ XUceD $@=PlhxEf2[#<0tRfCJ2tv S̸K=zma9zKYW(ȈdWthDǣ@:-9o]"lS]gGB}Bwşa9Ʃ:[e{w+.l)okf;`O"RxJt0>Dn۶ioآ,Ջ={d9i?3Y^شߜ+/_o½Ξ=0=A @HO@]PrCtb֛Xǥ,QGL<-$˛/"۱•75Vndӯ?1wkBJ /FL.!k?{T2jbUL*C9K+ëmnɔ*#M_?ѱ2g'1]0< Rə#7&U'[q:εj "HMA!9+g.P!sOtٳx B̹3GEdٚ>·]9x{g ^-T2ryۥO-畦YH*\`35Fn(%#fXr-+W>Çsտ4mN&S[:_`K'[ϧaŃ !Z{ "LāekG/DN^zP w"ξ>>e2F4 =U_dgϏw%[{\/W@}c{ogђ\m.y!d$)G"2xdr+Ht`OGнjh(ܿK}=WT~x@HU7nAmH$c]mWHᎶ/l'^{BS.-ڿtWUh#NCmm^z?)PJLUI^ Eb@7&pխ aRvbSH%wY%1b˛ٶo{/[KYcZ+?R〞֭5x9+& gq9B[:f2ĝRgsjUqJ6MȞH1X2eszzXnWaPA\q4n=38`0tFO*o.ll w~M)CM ;P/F ^]<{qH~9w;iK5{ҷR--ч 0^,` @KHq&8nDuAS rw`M0j-N߳ݠ:aFUou"$x>o@b3%2l89#HfWfldRְLkeξTp;EO,qarBՒN;/?d;eahocZءfwثJI[RIA >圂+M5n~t鈪LX2tdu^=LD g ]JSC9XOsłU6ew/UJ۷/Hj-(-W:=q; C`w;9hBwMv\HIb@ȭIK nd;D>t4*pO6BMIWO:67Z+r= 2]u?uC3 jܨ%]ދ|'c潷I]2tw$@ρj,61d\Vd2bB}L=SN as)ʜh@X*&ٰ-&u^񝘄?{]IK**oZ *za4-ā]oȕkZ_OJ_X. };&-σ1,RlG;_^mj1zU.o=M+(nm~(˫FOH1((hC}* ۡ=OW*;ekQ(2"B|n]y$fB  IF"WHaE'W*7}֎''ǬT!V|{L!oq%Su2@KdNb("8z>(RYHw+Mr*O^(as6θ'Jb!@H # !lU)B2Of;9q+,XTe$RՕ(őn8K!+HTQ@\T!QYii+ޏ|2LGM˦щ*EaQlՉ8c: i߽8i!-'M[\zz-ew%V bT?}wsYT #m|C~ǁ$+ Y9яAA7)sUfSF6V{*Bu_W4V <݅0jloO6=!1o4nM 7N?k~l·V/#/  \b-xDLKou1bK&﷘V{-ݱ +AV$^\r [fĒ%D>,HڂGtH{ڳ~<|hc5!Wx낳w{YvzɆʣ/^~]eMEnP/ێљƜ#mγm?[s&8BK 7︵m->C𹯎v˖^Yg'|r o&vϛ}!sܔ= ٷBnt\۫۽{/}Q* ΨS*D" 0Bȁ %jQfT9( ʫs`v~Ò:cLӚCr3`{3ʂbF"3>$\3m\^SMbm9uuH FB7ei2ߤZck ,Vw)r1JRC2heq)C2MZ>eSk?eZE B7jN!!1LUrYٯ3\P:AL*1DMY14LAئE!#W ܹsOy?pd/"TT WoBV׽BsMϑ0VWOkiAP&UfAj붱#f@H !-i*Z}r,D(D1K@=ѥҖOz|k0S7+u +&O1APo-TF{sCųW6̳[ÞH $@" YGҤm.:'ϓ6@H9;UsvC /;; $@H z%w^Oz#$@H F 7/9ܾVKKK'HD")b"ɉý[\\ ^RՖ/?.@H $ JT\Q7o- 2'y' @ ~0B-`?28$@HT`5ӊ]_^00p $6Pel$@H T XE #.3ƅ`4Q@H 4F`zQ: 3 ߨ( x\x~ $@ jD==ziӦt:;g@H^T|'zΝ;rlWUic#$@HHf^T6r?Cv|!ǾrJLL \&$$\~q33H $@Uj+*GU +P؅Q={/!gWh $)_2?@YF<҅2ΤFYl, @H $*%P+QQ)C,gC\Xg|Q@H FHiDE}Mk)Đ@H MT3(*j ΅;E\b>64 V5O_;ș/4;-AtLؠ‚!cL0'č|f>@H $\ P(+QAsTT<&Gwܢ3@z S&f]r8Wg IDATc/w϶޵l0lxǕ Vu'GvA{ݩOKˏs=\>idzG4"g/ɽgNJCCL TTl*((n\waoXVíܰFo@H G(*'ﳳ#pSO[`xGs6ĠKˢ{Ϟe՝j׾ paKU8ԙ] )è#KgLVu=,Z !=]Bpm|ƣ>"v o|A,k}fÐs;<6d/~bgLe$ z799~0===??D"qssg檺)$@HyQ۽ 322f8= 'nZҪׯ>Kq2kΠ!$,JܺxuG1pSD+o]K2%ψEF72wZ W=߲DY/7r% |Οټ՛(og' C=*Z@715t ޽{LG^g&f2 ܿۧO֭[~g!$@ϝ 5B& | ?~~~M6\SaKo _=lУg~krwۋ9q7oC$.ΎX&N ӻ|{ޞ"54d{i޺լX{H5 7?pDlBD,j&%6*oOY— @H $P92o?~ }!Wf 7oooT z`okF\E{'܃ZU>WLU `CKQf5)O#mπf}߂"ƽ@h鮝}/]v\N_.~ͬJ`j,"nfyȞČJ-db{Ħ!0&͛Fc@H <q! 0'-,,4ibggP[Z[@c6rtГK}H_h~Rٲ-!>>*GC.K_M&Yw7t (3vߐzp݇mϯCes=o{42Ok01Sfs |2-ل @0T 7Y[m,zv-hp6<#$@H`T ~K$+$x^AB%E6xə%u; +r)a3RЈfss͊"!dWâl< N~=m!WsGqaZ1*g>]^ڤpQ!y&fM-̚ȅf!+; 1c1_q`$@H8wFX*Y5,=Bt ĉ'@Y4fLk-/18˭H5ؚaz E8Fa/ 5g68P,K%2LN"bWqSdf&@H $\  _/ I:cRu_d2ܮ^x?qz"w13D& yD*|HDD(&ByRɅԓh $h@0 @ +@؀WH0FIlOu}QM,dp{t:7)Y/"|1+ -(pvH $!b..Q l 9kj`)` /4tgt|-}gC?$j'?̅4@H z# l0}0WU7m"!D=4BǦtf`u4 $@5`PI#J/ Z3 /jybB~<Ba(-o-"84=9-G`BH $@@CqdyrCiKlRH,fM%ns'-,lӦMӦM3;n&)o=||JuJeVRj!sk!0iWi=fgLuGxpr0 ~7P ps@H $P=ɉmg^DZ&8 ,$<3tRT"17O>箉L]hmRPs6j爕dÒ΍A+3d.Q׼BǃSiB_@@5& !$sW+"""b&mBkHn&IB "*}WI,I,5üRvv3]JkK#ڙ9Y6m׼})?9^t|~i"+3t?2swͤl-K, "Tot<l @óqJ?R\DH $@%0̝Hc+frWnr{L$JĖffVrskKkIsFs.2(]\XBfNtSaw@ڙ x뻇E |oʃ{7Y3^7{JI]Kؕ aF~ֻg[Z6Uwv hBoMں;OwC!-vE)Oc C~E?<˵ ?.l v~3txA_ꑀ~HnG'ED"&eq KiB5)=^?ڊ $x>ɋ]4qha& Bf&er iꓗWRR.Nd@+L&7[WMv44M\-[t.l?~ )a^.WydY "4tO'Dag$=C_IHMtN}W^"%jעۗ=LGMHXJ["P*IԌX9@ajЭv:X͆5(K"lkM&&{;q:e͍|bYNZښ[P׵1$بm۾{גSL&x"!tP@LD (f0R;l߶= | ^:Pͫs+ bQBxg_l5ZJNe6)Y퓕P7ؒp+$xݍKwsY媲6̉M#:.{>[z 7©!,$2 2F@%9@H $j"Si@Q7D_,+<OC%_;]'&_:Y|`F$ 5 9ͼ7?RC܍w`%ţL?g5M6=ax+ɫ,# v}р٫|]I7Oj߄ZMJtLKy3aCw1=W(j;3MN)!@ܺ~tǍL=_Qnp>: >z9ubccG<=:usp{8z)xؐdu1#:oTx#ZQEm]ٿg̵k{/sԩӗr`LRRbۯ{O  $BԄjA Fh maRW0ykfYGh!Z{/ʷ&a+ղ뫣ɖo|&yv˦m_~x da&_3Ӭ4  Yr|ɺՅsWДľ>z~!|8"wyy=6g`%8 mXLtԴ[3?/} m5h-SowhڱH`[#7)OhXMDL4 |1i$ ʙ_?8aͩB~q>޹T=}_:dkL;0J$}/z@HM L>k$/"ḠD" QCR9si_9qa^Q%V?!B\v_YT(5~3CN^$B9N)y* 2K{zrt6;(IJe]S+ *q9FYDۢiɩDb.z8SbAF*'qJƙX1mfp:oڐy,buO% -DF"@k~p`TjqnӼrv}3"1vhڅϑ41>\s@HG|a7~fb)|`x Ա1^]%*n' A|J#7}Tot/?\ % +8 4׏eThK/MڳWݣӬ=|KAFQ2ZZQFNC5jb_&\_p&7;٘QP1@PQrD|n/R|j&nKLSK-g (h"T4QDdma 0$;o̹3C~O=r׾ IicX O!3愲ELhf5dLk*~3>!cUJG+>SVp_k/9$@/.vUeصp(LJ$**t1PnY+(GdU;J%T PK0t-X!S3mlkPBBYaq+Ϥ~1R~ps \;tr3{8QTVArzFȷ}\<}\<+a $C1jZXet48h m9;\X7Wx QʮK(SKc 5HaZPZX9?YB)E\F]Vi]4ԩܟb mpWԱ1ǜYEW"'AϹ!?%mA<@Huۊ|_YV H:ԅ(IQ~X,1U!5 ‚`/ew T7gn_O]Jiuդ9 Sd&'Ͼ_5ݹsL֖{?1)w VbЕuyx@Hy$^߷U!Q\)Tn(?R<,(zS}K\ggg0 W_pOTqx{ x4X4&v3,7ǀ"W{gY>d8oUβ#I c߳}y֥SC+ZJ `-D xۏp3[4_!~ ESOUc遰;I!WFB.xU+IlᤝOl^Tք+Lԉ]hWa}] 5$[~_fkZM7KMVgw`]N]z`dB`/aGe_ 8K>ધ,6@H < ꩃ!1Ay;46z]^}!۳˳}ҵ}lF^ qZ姕/jӐ_rc%y𿟃oWn۩a'|5]N:z]\/L `z t: k`pVh:b5QkH}S@]"$@K!:0dY1n iw=_ܙY8O5ո=۳\#6Qk/<(zx+u#LN% ]G2Rb-ڃ@H x fv#O֯.s;sK}Po?:XTbWC˞FۣptNL]Sux#o'm^ScK8Z`0 kTVjʩ_kD5Ǘ} $xSҸ3IzWZeQ6вHlvOn\:qb֤h!kjdi^-|U:Ck;Vh`h-#ܥ+3O*ԫ-U`#3UƁOT a-VqU: ~S1&$@H 4-z`Mof%wjB&{td/|WdnU<:eVw\yz.o.prΘTtڏ'j]zT2)2QُNGq1QCфti~He k҂9` D@H %@ͱH .F?fޛZ+Rݚ:}C;/NHM\QK/I=?rway׭dҭ>~?'zO.^0[Ѝ|1ݦ{OKOnBPZ=nblt`yh\/j-G%.*G&H@g:a0!_j^ $@/ YI_V@VvzGČ8ǗZ꽃-v #}=v>_^H/:N_jRK_Ks0rto JRKGJi+K>Gw6cw( _$՛F0X)$qtbD0}7f-=k6q $Faʏ/me'[l|:qAc#~u6X@yQKh]C AyķiϰGf$.L#\Rdhq\3~@H @tpS-V2 Ү qzL;}utթBE ꮢ6f8O0õ B0G,4~$@/ɦ#o]a[5,տOv|pw2<zX $xxgs:S`.` x CP>8ᨐ@H <=)ȩ22Km671쟤>B33Sp/",_l'K@Ѥ}[̭"8\pX "xU\U`f_d<8w$@H 4Nm:yƥc%06PcQ՚~5[T:%Sz4̻u=an&U KcLb;gŨm"9hy0!$diI̛'@7O+Z;#> m|x $x 4]`76U0#fjJza6 XQ5<9FUh8if~NnBѳf/X#|5eLH/ iRJ/b *I'ݛCvN&$7j˪B$ / \:"XSr3WR[; x:ZINSkt:'c! Ƌ$@H 4MdOI{AIa Vmf_WH23VoC2$ﺭPjE{M1˫_i}cvRxN0Zh;Y&$@H 4)gmشf }OEôА"bݮ @gB.], ij)0 Dsl>ϵrRB>ɢt(N[-,w#w.910tQVYFrs N|y |`Ż}nm _HQawY O8;ʻ{)FCaăf\m[6Rl;9hw%ȨfxЮsmY4CfAnV [D͓ r20vT@&a5,I$@H g@S` 4) ov|G9<,TINիɗeP7]>[@{:Z:i}d1qK.#ƿ +Y-j$/@Hzk=(rzwNUoĺ6d=;RmJmxDޙSٌL38ꢷ"Kәwwhyo3#TS]/ڻg֍NR+0M1~;g$꯵w"tjFj-KI!$xB!R`[^mnzF>iK|ll_Rv|;x,x v~˨"ľl7=omo X~$C[:gCA%34DSL4-XzJ][Cۯ<A\[6?n=*/L{-w|m8#d8ųAI0wu@^KFK_ hn_> $!:XYnI$@SfFG'fĞ미\BxzPBd_ҭ]lFHݪ`"n罹N /'ry;{;cRek'M#E̓Rs?JU9UP*؀{apKK;ۂ x5EQ깋)jnl|r0`֨JՔ;!p֨ ɵ/@H!:XdQ)ly_"z˼e?kV_ r"B^եM5# I:5Y)Bg[NaݔH? ɹwʙKaw]g\=/Lrow1?(h%gg ?k"[ѷUHcmھmۅ4>l ^?abPQ>yA`wX_ؚqsx%qQ%c݁ Nz!΄ls'i}o;T a-5pU: ~S1&$@H 4-NFN@MۺJ v~M3 ' [R5*zu t ڗDVH%VSCKM<Y(U0{6#ԲGqJdJu[xKiuHU)hAaC^?bGmYcDJL)U`#nk#m%#֖D,%Ra?~,@H <,,,@މbxG$ bSXXX!I \Cl26Ab9]>hLVڤSϪR- RWp9Tj+#ur/'@HhurOd` FCr̵ :p8DE 1!$@Hi nZZ Nr|D0A s9@A U@H $E4-Olt2Ӏ=Z /=C,QڵsjH $_}EsO {8A`"x(`a tpH $OwBn Ղ!, p!|:MیiG^8I$@OڃtY' @ka'9Nѕ눆 anE<_  $G"EvRxZP-f/!4haWE~8)$@O@3>o~Οq ]kX0x1!4&$@H 4-i\=~-GevJ1c_4['ӣdc*!zm U7?zc~N/ti(f4Zjj  ǘ@H $дU6|0iv6 +2zf:HHU^bԉ<)]/?=C GMQFnYFiC;gnH,7;1;eZ. uCLWR P}bs8pDH El2O(%˾֧*ҫQ_q 4kY^M}}ˈ[k}S;mIP}¹}ْW x(Wڎ!i\t!܆Ϙ5QBң7n8I&uuwX\3(m \}X,+N _.h.3"" .e̞^ذ|W[w4+}DH"b,Q # $ЇGTWw8rypm UoG]b:OܸtDE z |!8j Q`@LT*{x֐y.ٔ̚}L{yKJeu[wppp=evLnsiӦ7.[jyVz}‡@JJqLrV/(Fa}oUL{-w|m`O=cG2YM%1M[~-$ݗN8g2K,($n7!J ݰ BcU ơt9.!t @hiN?D_]sHtI2voXt$eغ_UQN?p#{3m\y?{քabŝOH6W_uaOb.G/Wi%-Y#i%NEØokت/V.ǯYT퐕/V9U^\iW.҉6s3 ְӄǮ /0'\{-tRRFcRΠ2^SZmgW({؁)JOR"w>eYt*&4 9r?רh!-)X.2UɕaK3}ԅ-OTrBYx>}bp`#͵ϷEThJf>]߃b<{rfn`wJ೓[{Q лQ)ɹv3'dfE|eB 0BSPE$>paKe*x-,\',PqT[Cs;}mYџ%t窉965bQ* ?F-r!WXC0\avxŔ,M6wAy_-*.76:wyɁK;y2k=E`nWuyDCGz$bcC2}ԤXj8C[蟤T2cg: EK?[m5wjV]*k\ٚ11!Fo8mx$5ʃףOE+?>=`]v!$:DgWo&~"$F%VyXJ#_94 }nň][$ܳ⒨|y׾up !=vS|~ߦ}+aS;kD聵bb}JT&bꤸ}bA*cSnc+f9t-=+ u%&XZU,mӼsD9CwugoWr)@Wۿ3tNZȽڅX(D9-D{ObLPs~rZF@0<?R>[ޡ1 Ko},7^#'߆ ?FR"wz[ijel xc}o.uxBONح֌C^:Y>mG&,=Dlom;g\lz7?kFH>,N8=WƊ_d1B-mL*-Ž{連lRĂmRb"9׉{+2ih 4m+2"4$ $@-ݗ.}k:637 zV %R?6(l$B2}a\V> P/ ƭ6䜯' Mv]}7h- T'r Q~/kR t0@凕mx.mm;SD dP' 2"ZGNHɥذZC} FkvV_bmkc!Ъ"yW%9VdAwUfK*/43(hw6Vka:Si9H#x=}A^Dos'*"}ܕ`Wځnva+T9^(]sΨNs=ڇ4qSq.bVRL "- ~)I?W = w4e;5KӿG^,qk˘GH $PUTZc$D8\"E (`Em\k͞V2*Tcf6ٻ辝C,~ןƮ2[ϿptvN'] ǕC>*;1/ 8y/w'S OP ZG]~ ]ɻ?AO ,+t JvhtoSBMkKqs=>ꑝUv\7[)Uf}}[3l?,9?lMGV~:M/B'4+/zڂʩjl1|CH $P>էEMMrSa8> k?lwƂ51R'wP:&6F;R^?Q,_> z{ h$Krп_38 0=m'ЇBU֢ Ft'4-L +),EdqFw-?m{&jw'C*n\wWS_3XENEټl^"MAN3R+_쳂,Z8MXaLʱpG^.K+Цq]q{MU)w j-#qzegY>$r#}@8aLϧ68!YFJbwbQ'_`!aKPWTBnWn=6z]BXHoQQ}~^ -T -^vq@٧I!_%:Kպ:VcET͞?ibY)C:Zo֥Ch1bm,'(7K;ݝ(~Xd!k3\oy q,9$@d3Zji$d&hS;a(5wmmD"/(B???Ǐo5d~a JAsR <Je|a񘮤RARu@-icܟ59մ}Kav`$E X|̌Q 5meS}lUU?Е2e%5׶ W,TYx,-Эeښª2#j1,@O_D b!@& VŞȱN:0C`5xD"HsO=ViWYcicR)e\Y9];3z+2?Es,xU9WP^IpVWmaQuK!$ oV\6HNQi 䵄k u@H $n_bKGˁ` faѪZM9p֨!BK# $x~w0|S/CU~a㏽ppH $ :IP6M"E0_-(`- {aBH $@xt&LxXlb6L071&`L앥Ɏ=dN{h\c8cW]刐DYT.B{AH $_atPc7*ؑpwy>~dʻlH(R w|c±]=sk4iLj%}c#)Kbiz5pH53="1qtbD0}A`14[z!]m"@H $mV>n IUUT$R[I_V.ѽ؀|Nunzbi/b]Sųqxɚ)Rk}תEUUvUiEɠsZ,>a"AٝSAj[{JFLa}́QB:o[h;FQX2YQ""qSSq:4m4z5o|žt{e >W9<Y, Z\'_v@Hh ,sWv3죐 >@QrξHqZ̗w{7,B ^Eg+Wo%=z㆓dX_w5{I-oU~QBNU  w{K+b56Ы"CJo߳(GJUUZzM?4g5ö9u:{Ϟ?FT9S/a >%R5+dOwIѥcﺭVFu+pmK"":#d$ŻGu(.-SduX1 Qߜ9˵҉ÄY]ݿ'JG`g*($)v?{1"*f_ޓn"s[ݴ *ڦ]lݒJuȰIɀ)D= jVd(nQPѺܤFSZ@rcvYv3v⿕̀$WIx5Q\{`a?%Zl"40K`6ͅtpDRQ+ 'S2y^bdTݿVg:Bnndcj;uQU+C.r2SO_Rz(r~4P}Ub]fI֠2}]:1?$e]&$ \'Y' U#;G G`k@; 1 u07$@H 4Ks#`W%-K-ݸ/eGmӶ|wZ`Mqݗvbznn#9jpФAa;ڼO5dWuXy{|J"{J5T 33\n6C֞8x0:yzSYčA/ tlhR)5ŗ[9'q"E0Wq[GH $^4MagS>U/GAYWɭ(\xpɸYe8ǏkWg{/W0ݴǝjIFX8tq-|Pg`6twÒR+^.mRL.7>6ǵ.Cx359\c/d*S5uFɿ{+S!ɧo\&yj PNtd#;#> k0!$@Hi 4YT(C ai,aXN=} mj<&M"eIlM= *ͺPKDBpެъw}.'ԚIT90 >qdo['͛2`b^p'p?' 6լ( Z `:$oĖyg]`qC\tSt VuDCOpsXqH $@ ){BQ)JD *VQTʓJ愦kT[Il(JG'{2n;9W;hD VΝJafj@˚bרΨ_b JPҥyM{#&,Uf|[ EYLc$֢VԊXZR)~~~e\ @H $ b!@ &Fð),, &`<. .(Erf 3֖`$a F*VʱQ/@VԥK=7<X+9\5쨬}0 p(@H Gzަ(tmRh$J Kc(J,٭=1ke"tPNQ3-G<&0~pb%$@H<:NN( /wXsݿZ50wuh5Pa-}%thn?!@H &{_ $r XÀYXb*v2 C4jur-;)!$xP?/ |!8Z!jt-" bLH $hZ'@Z\ AjAka_0C"!$@h/<7\ˁj-G%.*G&Bā"$xn~n>P]H 8:1O"`<`BH $@@剭5Cl [ Zbǘ@H $дP_4-Ol8r̵ :pwaÆg 1!$@Hi nZZ 8>5s jˁ G j˜@H $д\=~-GUeVD}I{Mkτ9oRN=[ rfubṃn/|sS6`BX $x 4J_p셡t̅f0dD/Ih1>&N%)M)n^RӓMWeH r cMqWsTLq'pL#E< s "GYY@d?^GH $hvrN8f&WՍ)^nVu5&Yw5E)7s*UQ^AQ5+X9Q)U!=):7h7BQkf0ͣ DRHPN6lќk4E)7S2ZV£'CI-GPw q!|: =0J}bˊBJeb ;g[mRk3.7Ol<0@H @E}H\;^섓F )w˽&ϘAJZX#3 [//='FMsOZ %s߼֪ؐEA#;f8G%aqrMažWn Vmf_WH23e<}3W返O?YF8UZ+*p>n2ԮSi![c=km O3\?:BM`@H h\{?MbRzrznZBbs3v_3} l  y2!VC vTuP32\mĜݳݤSMi֨7|FJKT~zE f$v_;·r"/LH $_h俗mz={.& ݕ lv*OzFG6(,Lڞc<,eQ*fzt`"8V-jNB^̨/6Q!0uJWtSHUoYh SSݭk*}[9:rkX&)Vu&hr迠K72ݤBr4\F k i؃OI=?aC1 {jԀAHj)zQƉ[kޙJ'!lhb3rZĎN"#C[BG>wt]}Ey[1.Wa#C?_#aC{i|8iBuυoo";p:/'e(H $ednVDo1VS$74`Oc FDǧ'.^8h!g?x3U뷬_U{1yB`m]!c #$/8 P( >Y9lR|65Xu` 1iP&M"DC"A6BcG6wNDnj-O 05lԈf;t|_dݵ?6ܡ&􏼱DpG䝽#YHq-C7b\Y^^nٱCeAkDzmW ; :jv]7Z"x`?aOd*ξ pJ`=zz]iVznGҦWڣi5?i#"$hƋhHX $q9` ZB G,t͖SK}8ӳg_gOÈ]*0Iu aRqY˨-xKS˜~$d'>_; @_}E}N륧&ڹztճ Z;Q NMrN 51cNZx@H nD Nr|D0A s9@A URO{XLGL2Os9`((uFÒENѶu<^(8,@/2c5<Ésr0RSH4IA}`8N|j׶b֮C',:UL8)1@Hi4hc+-TL` Ya>8hij ׇ͔Xl24&VكVF7XW{;"Wv|jxbv)} M;GwTF<Ѹ1hUw~Q{ch3H $('?oWwBK8ejΩtm[aQRBDD Y?k`bj dZ zuWC{փ2'3__eME $^\\ׇ.!, 5p!|:M[E>էݖRo%[?NހjQC{6F}ME $@] 4溎˽<ak:FW#z>f4FH $Guf!xZP-aw- /LH $hRMY(,.ex|%X*6Ehiw 裱KNqT&̡S0j)S-WM.ʄZ9aGed`V3rH $IњUzϢ`VC1h7񨡟Qy0/Ҫ&}[DM~=%f.*ʨr Wz9Kʻlp@]سt_\>yMG1[9LJljM?{Us0CQ$HI 2_Hp L6T| EהW|b F+USɠ|"H5E#q*JJahJIܣ~@H <\`h`*_Io kր 2zV ib֭{W9*ܩZ茱tj R h<ޜQ~_I"sO\Ⴊ΄3ÖSAEU Ns3 X[UUzm S 'q!w=})?V('DW/ ПawmlZcwV~IO)-&U(ې@}cȑVg8.rJcAx7k^4wU"n [na|ڣ( F `X5 yPP1@H $z@t01xPsΖ𠠉/X\}|w:;Pz!f/:ŗ_mSerb,]g%K]z1hBWt<NmP./t$zkJEC@[2g*+^k'ChE%RFd~bu+M񂢥w;g(Yцe~v76=7;dnb3oʩ~ÀV~C^Exkoi8}8LLq߈ 8@ Y" 6v/I,OI:k`s#T4 AA9̋x5@H @tuvxQ fjw;:[ኔ 7yp!h V   0bB1բuU*i?{Ua4Wz5ne׼,[UO򄈸k%CWŭ;k}seMw=九a4e+Rr]7ymUhgYNBٙpjv{߅u5M/e%~]i^7驲>#3b/6р{MGS]$@H&-l76`)%~+NuUeS_y`JNBy\'t`+_W>Ry](AtVd J erK\ {ljࡵI]-!uEY w]]{FUyevlЇEev7_w;Uo+0߶r&GÔ93r/*8}UHsT?)m: :@{i| ``А@H $гѮ;egM=(m š3WtDUG X+$)>M7=8t)%fYed|F\4!- FiaMu3FKݺywbd-EPJ:Y`L G#P| !@w R[sws:W*<ңm-tY&PrZ7M V5plI8u%ٕn\n4 *wD XHԍ`$@H <$!S ѐ+X7QqfT:x/2q~Η (-VVizR1G9Um ?| [Q繭V9;} 9LB 5˶sJ m5VBϳ ;=D1Qmjw&۷\lًH͉XB${͜H1cCx*H $SGٳ&&&"H,; B@Te-g݋7I,Dt ԭaPRa4l\c&$7VL HC݇u'l4W?;Mhu/<n.?a !<$3@'o[;j $x tY³9MT#oP*H/*`@-DŽGg%og^ty}8wR-rbniŇOnUymFm?0{*ML}oᬺT5|ъA, d12ds5wf> IU-Vd-;)8"fݜ߾gI{3d9 D眍4/+HO.[~c Kȯיِ^PN9Z$רK~֏_D bRr );]|J,J4ye +O n=~ܩZ茱0˜G 5-Nw.7V<.$jC\[clg%܁[V/}-C/NϺrT`+- , "&EJY,>7xÊ^y[e}c~r<<TOL4"Wb}{bBf.2Zp!#—Qx $F6<eYu~(ҕNg W1Ү';D  $oEoXJ:#AZq#g:u7p[4\~"RS/RaÀ@r0a>(a ?NOʹ=p;n-֭igD795@@H Ç8 1y:pk9*gDs 4hi!$@V D?ʕPRVswrkP~JΥd ٯRh@wgn} `Kem= }XY;^td487C)=c]pfгfTݿujeBC;ΠW9Ak] '~uϗ'A_3mjt"^0E2.á qfSu?c_|PxVt`}%%NɡI^.;9:R^u,ݹP_k.bEv+n*ƒވW. IDATVCT0OMGac6#7Ӽm 2,Uam7nzH $@\B?ژɠw4t檷]_(dMԚ/A1{A{,~AkSև;d}V@<-,`C}q2Oť-_]&,toVg@4D_$ ыe/.]9n[(l˶}Tt7%¤PO~4z[r=q$tS+w Rb}yYd$R%2dهK|BC\ b/Rnˇa9>gz*je }/|X{"9?{A~3N}q8f̧3/jعf٢ 1"h]u]C ?CpNg~ 3Jf/?ؔPK9M16ކ=F(d xE:Wբ"$@]#V>D6 D- P]]gsbQ) "@NЂ1S}qɰ% +=Rl;P`|"Vyr菴ّauGVNfnY;]U[77328㧽4!Aa'G*yoFIB[ْ ~q%K7O |!V>IAR@$fq'm3k:;XԄgIj;K3ksa^bbFԑS+63f0'A~$B %x~B4nF|h(:(v vw'yy\MIClxߖ jk ?6SJd ^||Hf&TxW*e@H Ξ=kbb2N,; B@6mJR%''Gި= jW#: f O$`ێ꼽 t4$Cu"#UWvMeNwi[?l^:vx|dSAoMES!C3X c֫C&W62i4<fY#B. Bbbxj3B78һԸVV/ZiYoՙdγo䫭^S+}֦&]=+&:qwR󆳀 Ep3 ,!$iz]w7vmݩiz|yUIl%jqMBzĵ=*Ʋuy''Q2<%쨬OYB':f&nmTֆ84pc.|Ps^;4ꦷ9A1IIf=Љ+LZcA[h$@Hu0n-{W;=WӝhI-%ݑl4 4U(!{H7=[=%xkJЕB+] :a95|HKi3f) u!"s|xiqK6$GH $z@='cCBGO#w5Bc&4D/_&s{7WSX{jE&;2x6>h޴1~ӳvcHy'Ei&-ߗkXGs,"$@$:y` ,V)XBE!/RUJh\g:{X/%ӌ>;Ƈ{Z欏Ȃn/km8aQKubsYYIw h_ő@H $H~$Xig F  &Oi"֑2gyz̞mm];M?u$msFԥM3r#iZ?so@h[SzhH $#!:`E%+EӌJ ՠ_ЈPU#~ 3ҸGO'ټ̴4HY,D!Օh|X8gN抺^,\_̴Ę1i> X $x4f &]?8*ɺLZ!kg!X3 3\~|w6LR)x>d2{J!-XL@ZZJd$O#$@@׾~0$$`C7`0l#g4bFH~&z= #c66m@*s݈G<@H tEt6aQ&Da/eOB*ѐ@H $гP_,OU O@0gB4BBӅ|b";HFCH $@DE+wjDji;``-O<:UQ]Z}?KQOL!ahO#BP< |>/jYX $xU?$o?Tוgx;nz'Yd Ret^˯l0'`s42q B0^1,x0CLPdžg@H `u^ YYl-#Y9N[:^j14>YH%#ɮ3Ŗ] a ' fO020 $h@tp酯`;pNC?ioG`-=cg:\;-rcbO.L!ߐu3FtI޾D4^8 ˊ[ 5⢮]tm$HJ>mR0lQJTcbSnL_?~Nlr׉Q[I0asDOYz{ݧo]DFƇ+9&6uȆOph.lTb]x` 5TWC~&|><ǃ# <, nvbX $xztfE= 1ʥ/YArt󉋣ք;X}r7'e/Yy^]\;DoȐI׳\UU5ygkf|"VS\7g2upw# ؉Ι@VuVſF_2ܴ~ި}UldvZry: kRJI -IXx Ta#5!_BX ;ɩ5J恆 e ntl $MfP&zVF^x(7U\͇3%={2t*l!7O{s,C)\A;Nw"W}rt?ƈ/DyPH{4qv͗H?'BTL&V_|Y^VP.{&Owa((]--^.z2Łz[3e{7I֋P ̪YVb$Z^hH $Q݊tZ? !Ҍç@* rIJ߀>,3Thj/ ڪ7-}?{s9O6s]kܹ֠ff~7)=ēkjEԟD L}{I2eIfD i# h43fxAH $Kٳ&&&"H,; B@+QT`*xŃ1$!S!'(֭}TeƠ;1_چr!FaShhZ@BhH $Y١Z0_5(`5<9L̋x8pH $ NG+<ǘP)̈yDȃ]刈DC$$dAH $U! `Fh| `n -!$@Hg `^DDo]% `TD XH1@H $zꋞ޺JLR! ]X'&YHFCH $@@ܳ<[ J 90,!*@H %gy.|/B0^1,x0CLﴋ\@H $&m ƒ0])/S̃`08o@H :ϿY͓ajȏ& `n4xf $@=KupDo]$ k@a'9F<=A@,aa; 4$@H ('+Φ|2N}eYӼI\T 25_9aUNX5BKw3-UNLL|㌑@H <{`w }͝*t=V^IϬ&!t"[z؁hҢ"E)'o}(@>ԨQadBY9vTKPc v@H <z&{۷FOR}k$=EMeybfך>e&2I᪪AbiMjJJY['gib5}ڙ-w1aWB1}ׯgXVVVV*ia3#!UM4G\Ϯ@H $`H:$G |nˇa9>{zqwAw"e .j0H5N9vY:cAhݜcU!Xߴ3\Vtk&{k u Z2g)HåS@dG'<ߚ팚LfO3C7r1_" _1 tlt\vF% ˗GG/_4MT ce5u64p'=} $SZY)f "15H@kff"~s{ t6s}z<`?'PvUrR(*/'G Q )դNIh{{ẺRNroN@@M̘1{@ޚs7͟ƙ{o<w\?2٘ijӓ'?rj<鲇q^i}݋a ݣ$xj={D$bxCP(|>Ù ,99Ma#3ȯk*V$ѭn&1 c;4bߎE0wUc/͟A_$$##x gx&.,? idBkJ;#w}cۤ!?A>\﷗vt.",Q5LfX $@gYY>]kQb#; fr<$3@'jnNqYD*B:1S1255/3 bN[ x2@`8,12L^IRclrXA4]@H }f}!ZZ}XVZ3/@@{*L!pЂC_2pD#`A+:lᄐ:3J^R eD4^]^B{C_07bϞhF,63 Z5=b1}1 yF3B94Nͽ08_e0`9(?ۃPxn İ9$,MC'o#hn02z-萀ٳ#bLX8EM;AH @9O+5w0O_Kj;CR \AiWLsdl3_ԿLG۔-ϓz)RyDh=!$M掳oA@׀VNrjRy!*z>uA![ 1P+B` "(?y IDAT?77tZf<LpQe>Bb` F:Q3e8:@u e KE0v #.|FT!A\]N6ٹup|FYx%eeҹpQf.?X^6͙6l$?~ a\<}W%|-JH $":-2xa5`PeaQ(p;ɁcjN:vFl5z'z8bO.mwS{?fv\QHnl$'_w` bk49]B}(hSS]hL&shܟ5j+bDq5}z6d& x܎sqT=XSΚGJWb+wZq~ig]ũgk;Za $@0#''exJQY{А0C6 iTB /4'»Mnm2oXB´m ֹvhP;UO /.@dx ҵuZIJOT4>NؼQOb=pTY{FY_[O~|ǭ XOYva^ڎH14kz&٫Us:9ˉ]ȐeEɴ,)yVIt#O:ymΠZ#<@H $0P? % h44Ҩ!(dUjJ_d`Sz[hI;WrJ-?8 b+j뇔wZ:O 8g#VQO tSjP~G۱Z6 vi3li(^ LGTAMYĪv*m Ľ%tY0E՝rVˮvS>;C.-̾eUUd#Mv`\gMXR[,&{@OB˂XSs#Wch43f 6:`g6ٚ"jOU5-^]cԲEYM=*얄k, _R~`$2PjջtZflCMzrlBdOR(miGj*¦pm[N67ԷWkbӶBi$xj={D$JBP }T(>gɝXKYj̡NwpơEϒ=(+2 $_ꩠkVA{ç;s#쵔c )1۲F'qvW o'EkAUڢ`HPÃqjxr2%@4 EɋhT6i%eioX;ll ʸV 𕯭ֆ#iYw0m@ ]څ*ݻ!Y^mm656H<@Hc ~/:P q vw 5bCהXM;~A?5*xq2-ٝ:m;gB*1Zo3/f03qҷ7/K%#D}9i,@lZ-Nu\ALm;Jm^;-)4NjD8mA(kGj]SZ>rbԺ53vz 5))fm0l<ǘ jF#B*GD&iԏh $xHΎ{ѴJzt/䊼gT"}g͌ѐYxhGjhEȿGoZE+W;J_7؜_2nʳRy?+..m͙;rsGQӧ3ff" 5 Z@CH $@"5HooXQk^t﴾'VuVm6g'Z>ڭ{12 f"v6sOv#\IL=g;1|՚e9\]I*ϻ7gE+ѯ_ Z XMlL'dc4$@H ,G/7/#=ur9_*QzY4^/?Gt FG 4h?˫ i7AD,Ba7vS~7;2ݐctJBf>ʰ5a|K77}qr_~uMJ#ddH'zu8].,xI?Ά鐢pdK5i#:I{5ҋݳ.yd:RwN;?: :j!iu;C1  BHFCH $@x:Up|s `F$CWŭ;k}N_]{ =$w+*@Rk3YP⡗*qxU8 XKߌwgXGαEHq㟷 4Wk,7S [u 4y^T6G>_(Y%'~eIN@<$1P =0@H $z@ H@Mb7@z wVUU^>so_eDaANwS>tBR4 '3yWtd<Ć۰f{Z I}]w?CR9~ِnpN'M[HiUvX~YMaַ_Mqnc9Y*/ źw>Q^[vI8;hĸ;z7t2 ]b Ε}h/|3D[7k73srxeymѹ ]ӳw j(i`Oe>MD ~@[̩c X S' [NKgܷ兽M++2;Ԗ1K ,#$ƃ/WAQ3DaY ZTî& !EX$t(oO?۶|uژ{x+s[l(E ?U(#7"D(66my6Pr:*Ye N…==I$i +Av4Dl8le>x˩SfwfN/oc/llEPp爄i -k^zl=FgdC'$f'N-ˎM7˚(i{ž }'r߈=G .߈Cu=/<ȃ3R۔z,ߞZMr`{t/`H ''&G, B0FaShhZ0E@BſYcwS>]i=:3B^Í̭i7K<ŇnRVuTC&5t}3Ҥw &}anI;?Z}JpFy%ō5j $@_axP R `(q"Sm_f?7d 0ڞsׯCNhEz.b˞U4w6{_8qqږCҾBE,L2mܔ?mO5Wٕ㉄yy}ɸ.#ipE&}'7GgO)nRG}1#=,ͼ?֚go0  ./xH9|Q4>V|IȎB9/m+Hhk%vnL1WWbڳsMi/kHχQxsuMȹu?/~-}a;I:_6\Ld٫Ǔ)nuBi̩ḧ́=9ekge륁IG!N^y f8p7MJ셃ottsVJf2hH *g4<ƄG#D'[1rXKU~m#32Ҍ;mrc/b?|bHM=z3I޶z-h{!#pCd7r2 js m4%5u]kOxo>00|*xML|=ʽ%mKV(Ұ,ea+aQ -A*0yEHC8P?g h&hC~_8+q[)5TY>w3|4J.F-DݼyNUJ(p?=UVYd6_4ʆ!4*9dZxYѰ Z%)SM%a8\&G0¾*y[5:iAOIS%Q#4r|F%H $L5uKRA3tU Eo4* 2gg@Cca%JrLMAf%H7A @xR8l6ÁO(phmm ?VVVZ-,BX5¡ Cz&EٵUR+SN?%nݑ!dc*47wgaNvlV^vKخ#و:gE!:9nI̾"\hjq+Ϡe'|b!SC<8M>z){ Nzuճ\h[e-*.I5.:Ɗ 4T`x0. 78LI;> [  ņǧd$)`IS!6&n1s} }O sY6|Z]K̘jX,Y uol1 4k@t1S A]daB칟[-A @xLkƻhJ 2Lz6R:'4;[7ܶO5sU ӰލWowݸ72Vzb[b.Z}- 6]wmw2u ˟f˒W_?/\&"OI@@r/7pgYhW]Cߞ~4ү:Ɏ}rŬes &~f,[jF8jQLPqLVTp> Y2^(p:#J!xF #0oֵ#7j|6kYv]  lß}־֗Ǚ7M 2\g,+~P`* A @~YNܨ]C1̎ܶuʁT>=ׂ0jlM_ec0ʑ浭Jh .RUis/n.^9 W^Y1|3_95|1%qK)>Ar,[4I(-u~e4 K;5{V\M~JFH)'^t4sσ`5vp&Lq *-95G|.Pה^^ m<<4xrveosU[~b p_/W*b&}`R,ۊϜZ p 3.xK[7A\7<~ؗ\2+rv9^ 9>/X9w0m_ݽ_sR) h"twϙ6~ncm"UN k#C)BGzw2Tnjy(fӘ!5  (ZU;xCFJר1cA @_끸PQAj2DcrkB&"䭧Dɽ?.vh?evxkR$ 2eΉQs+굳fa Hj(/\ 52acu~ޕבOo27XԞwi[s<{<Ckڰ WQ"8Nn"AjF3PxC=2UWxr0>z \qM\4 4SF4E_?!oh nkԴiڵG+\cRA @ }AF)9T^Ӊ j? /ݲ>}lXS>xy)wI^c%͕xyc#xmm*+[PJ_PK+ ~:?A @ }Fo~{C]9 "Gn>[|G4##E}wHdj`WtGaWH:H&vp7lޜtݝN~SL7J a.V>2VwG-β)C|4dl^:$ .{+ϴ1g'ιL(տ tBWoZgߙwjW.cg֡W2utȼMQ~ΊI7}Of?aEb)-[h%Uj훓wt. |IaO@WqM4hxc:'bMq3OS='d;R,l:U&L([5 wѝk< , $A cQ4k7=[X\.8@j A%#% 9 ykgK1AjnU')KԊV|:51Q[AhAaӴ LcŶ5LI7=BVEE>i.gE=xC1LĞ$UFqP7 t(dj; ߵ4rc;X /AH>A @ ,?"lc'VG Fkek7'wyVB#Am *mQQnnn z0dA @ slb;8?lݏu7qT7ͺ8迪=;MuR:jnA @ =D==D ^e.mmmں <<`. dӴ85A @ ~{?7OŰel6 C Ā*ޮƓgBO4JKK !'4?QV K >1kZ M/b2֗eZpʑA @ 9}/B}514NjTz_"T< O]=O5ucQקQc?dQ?vT5kw/Wx+юQ={(@uciI>—OjDA @ :=8M>z){ Nzuճ8VYdFϪ+qtN⹸;v?j>Yl<7 SQ/ӬayΎ\+D[ :i*U,ۼii'L!ƶi- d -Z[}aa9 A @ O!;N*7ᕤ%OVvHn>κw|߻V8i{`t n̈dP*O|zP#/ߨ0Vz:)Lugk %GS2]>ջx:WO;YH^k&S L Eu+zn#z `y^n^> )n]W@ы׭n"=-1!o1&q[ygfQQ&FR#/ Pkar7O~3d?aIԫi񗚐uK&SU?cƆZ:np*xۗ~v7&m/VI/(e+|۪rjl𥕅o۾aB~I Aශ@%r=ƏEucBTѨ 6}u|ꖍ+G]d1R^@;XqZEc'yFT[B"eQrZ>b-. `QɻV.|hBܰ1KOyRyIT3z+fWmoz`o$`*Z3R#fّ۶N\9s>^lCgD5I [Ԑ$M=ei8Bb>Jġ ӊ&AV]DOtaGm掶G $/ψߓk7}MP\*.+ڟE.ttsZQÇ|uTR1>}S<Z,J..DW,3-Enǃ;#},%A @x\lP5L l^u__<cѤ(?<J.CE[y̘7nnӘ!"5 CP=n9zsg\7[*#}'Orb{'wm KȉvOE-P,1\Pdq[BՀ EM9x]n:s:o|၁8ug|J7ʉ  OH\j" A d"/~@}zC=YnIS^ȚNMTnTkC][/G%oMܻ5tvZI7lLX<·Դbmzo0vPWki..C/ +"t h%k}݇"?XBSTAr-jeRM>;or^n]'i^|R8YR\YXAYCH[Uk2;[VsZYcuO_Z`^l/A^^y+X%j+J*ۊ^ P)>:iMtL>44Ej:F*o69w]=V*yPO_zn(߱/EU і,h]B\'[\|EZ;3JhX^ 'aI2:u_QS{{"3!V0Jn)bqsxppYVI. k$kN3x*8~yE lWR 2c3 pLT$WdC!A @x2C쭪E{1e#Ϗ->3z;WVuystO׼}rO~cSO;5A;K jQUIM?J58O}wh]Q[ْ}qcy'n|;l/əi1XpM? a{5bc;|Fu%044 ;^1Η8qs1BضD-Ɂy6os8r+\:Yk?ҏ,͌[ GCgG9͸KCQ=IvT#v=fN>?G+tkh(i뢨yF[Wh@RR}>b(@9ݒ#gG'\8׼fiWՄ&ַ!:i 77j LGW7Z,y#ncz̈́|AB`@uᗮSv׿{A!Q(\.D(55֐a*gYd2X(R'@^*8r[jvp0G#}\Zn@BDx_o-YP1Qpߜwn7Xb1n3Q*.O:kB4"@:ha;8; 1aC:/~-p\a<\v /ǏJ[A9|B }># ˁ!ʋ8~0;R 9irP|͞7[Ў8-cH5L(ٽCTIiP>xCA @ <2t'O+?l8W>08RǒiؙԽϝNsЏG+iֺ`6ФX 5Yڇ:"o@,}!p"}&p@́G^̻B 'NI"|N yMܚsfs2Xvjsmkb D R&xLRމ{*mkar7hgofBR :roֵ#{_wWQ̺#;E nN=81rۿ;2vkƹ\E1q"=-4Z0=2l7$nv}2VF"R#A "Чnp˟nN˾8=ŕgA)`=>OmsCq&8N|cGa]+/lgAhFME{}M4HSt$ ోv}k^G A @ '>h mPrO?T# 4|H`u&>raحo"\h8MC{!]}^>sﰟzs;)V.9IM#4F++ҫߞ?\&OUpKJʋK)[yj24ǽC4x GF,ȷէ@&D}iJ ӘםhPWXsE >g-r{_-dt5PE\>fP{jzN3n HΠ }_w/9ԷoãsEh(/h% @ > l.8Ś5mzfFLhMLz"̶M[v4:&tj>XÈӀ޴`Þ3.QSQRdnO: 'wC` $TbG.YndGiR fʁ>ôm $pwrj-zm3\)LO\|^ca0u2CE53' YxURyGa.NਉC8?YRzsglu%\Dr'>HyB^;-97 lPS'@dԤ8z*yPO_ Y KQ_~e(ou@",pp;:"=YR\YXPAxSN꥕UtN/ty]C2ǂw;:/޷=Կ="էE#}>UYŝ=6tqA'T`m8͑3@RC|iG΢&;)HO/;clW4+GƮ @XzK(G=R=FiX|fc7_'рRMξ_8}Ĝۜ\H~RpjIvFV*Z{>=1*tsdG!\dƭ]l9ŸT& IǼ#pUiI'Б;W)I[ PC{.w&[>NACx+`X 2x⬩M/]t5$˰VPɓ:,OO(CF vJ>jJEւQX*[.ؒGPhYn P@JSv?) `2c"/ jIitXѕ& IEʰP4kۂIvȓSBQ0?Ӕ? / b奩vIEO97RE't)MY$ }gQSXvjo3L1oVJp;}QbsC 'z' J޵k δ V@9T8tsf"2L{=5qq}#48&)'ЁEtaqGT.sYDBCgyVP\CSU, )9!ǩ7H\$%/zұ 9uĖ 5dJ(8ao~mXK & u-Wߠߐ77է'r\!nkȠ[#L)gX 1ڕ9qMxۋD") T,}1^Sڥ!W_'Ruh~_yM! T-F͑4BT?ͩЛfaLח$,fNqN59!zx 銅{{9>] e֐e4lMӟ]I|Ooѐ|W.\X0p`7BlXeaCdI'cI֕P`ݵkLj\{Gx)Ol1sx?8;z8mB8YH2.yx,Oՙu&?mZ4|&,wQ'Aik,*4ýS*(|'_E*k sD | =QC6r/@pW{UT2icD.¶%pg{S埫 3.SJ&,w[Mzsaat_?$ /1Qyk9 #! %i3DG//~ $ZZ蝂 KwD xɹB90g-IϡCѷmhAuF 0\0!`w; "`B8uU~֭&'FUop#%]ÿma X"`G[m}UAs<`/gNj٪kg:Ó{,<,5sZb;);,\|+7ǺdLO83(x ļ^bZHg@Ѿa/)jx0!i^7?Ac JKc DtqR֒%A9lhnNlS1]7 )\>} &%iӪ]O~Wlk:U9n P@per!U+`|aNDx sGRL5QS &@4ypkk6/hNjf YA^#R^f!%>Q{3)p 7iZI G-OPt&npzo)JYW++d6i[^$Ĕ:F+UmهaXܤ9aMmW6n!~#h-Юݤv OKͣe0t(̀D}[`TD FKᑧt^NS覻(#ȻյhKnme`EaX άhooK A WR#)ƫ!26,j;a%ФtIpZnH 8Qz{]M4 z*}/ WiPXEβΗ^mquPKrv0S:A3JWLо"`鳀>[;GҋBO9;]Ce+gpsTgXM xt˦UI џe]aPM}MgKO2!a0t9|"+>럼)Rǎ@zĂY Cgsh!99YY9Y_ܖc yDp#Dwg q C>#///s{Bho9pgҋ8p~YCV+3y6ziiqqq/ K.^72&phgj奥 ʍsyP󏍙Iз6j}K`F}8GDN#9~ڼ9'cuRu1pwNp2|/Xk-FÞtّ݃Ol'\A1q[3Xkz#1T0-iDJkS\1m<@_oSCv©ԍkS78w(}{= &, c^%Z Yi+MjL0*}ĜKA/A10%?#kIhCVNdؽ+UƠPqůؐ|85qGUO#XA$8yh2FFD%&: Rc&¨جRyWQ >.=lKs<a ?Fzr۰v;A䆵 >_H۳Xt;>xNE/15fp/Tl\q?CR.]Çx_JjPj2? yX$X'o)e Н=h^ZK[ZЇ8%a§/Q3-TX7 ?'pb.Ŧ4&G Ξ_%t\$՚׏81~Ka/ѐ&WٜhjNzaO/6Ʌb? F`P9]H{HeA-Op1n@D^=I\Q};p!5zݗ.*>{6ZYUK`00{B]}ɋg]~s>RR zP߸vT~[4lD?ϠB=鯳*ayf%2 N@JIo5j ["ΤC X%Z7KӺ/JC8(/Ceӛ QwfGUmE&\ Aw5L\g됉-0:Г_`MjQPlՂAlmo?b,a* _ylU8_h}/ DCկo+R>z1l#5ļT5_0BD m:X{T~>9zO @'=^al8h_3RA /=[D.|>`w4}ËZGRcٿxR鍪Ism͑ ϔ M]:f QBJVלzT{4>)>?͇z'RM!TBohb,Ay)C6dy/U*߃ġJR>j2o{>bpBw-3D-[m肬a)*ܗVmN@pmEA2iu݃g#vF?duj+&0&<X6g>T#B#D _O l;%G3r H>uOv]i3F/^oĶh\odWe8gw݈ **>SO]=ō: FJ83b>Y2))T" 7j'Ld߭E*f#. 5`Z #?~٧ K^MԄ&[2Tf,[ĕZ'Ou@R'A @ >~=R&G~?\(G̮+6#mĹr `ӖVeUuA @0"`{V|T3I] C^L)5Ihiϸ#Ca\TSC3U8cIt&C&s'r ͆zli,@͵w)Ǜw$K،bؓ_t+pm-Z}Ox ;EwBf4Zל-jj48]?{[~U%e1>wș Ń[64qQ%<\W#6+> [:lGF?>X}4q' 7]ȫ I_qz[!i*=tСV;S=ڵyu_yql[B;[>NACtdM׏#L=;Az* {^n{ @)KTܼ0ha->vSC#m0a=)l{ lӿA FUV+Zje<@Q( rN((ZZwMd:A%?aǒ_bknB;2Ъ[ZdŶe3t2Ӄ#&hnmCBb ^eK[y_ΊHfta%Yl}fRHC/ |GAҳ75(YLZ0fi]ܢA钤B.EZ{m?Vp@@ dV|=!P؛%Q `xeąJE=DRPzJ!حcQQB]-||n sS{ ~S8W /وӭ!dmF8jG=Hk$|AmI]YVX3>"Tؤwi(+c4+TX;p-/>L9y7銇ueq׽MXÃH!mӱgz(+qf'}mbE&G ~)?1 up$NcŸ});Jx;8O-gչ|hLX`\x#56ISu5V-Zu8XEڰ `y$ \=N04hZkS H#ըbNNVVNWHޖQ@(b4Cّ8@!l)8Dƹ<􏍡` h%x` B<Fyz'7$0Xj/v1#6nް ė%La)A @#Hy{I^cM[g5S99i]ɒX Zs!N Ȕ|6[ ɬ˂uYtuhsYό0 !Q]W@eA\lu}6ޟ]2>H(00$K,60R6ބb́;\+xП9C,ENqR~iS2 wd A @ 0x I @0 pgmjLUUdhm[ln]v&! eNJZەJC:*ʇm zf} vƣ R6`mMp`8=|Y%OC]pŚwȑ\AӂcH_5rl ҨmXJgD~GpݝW ycA F'Z v%7un<w"8@dS3 ;w(i #pD{rLG~פu$QI喙yģȥ .rT FC 11bCiTZuJUB(8m*,wF.b6NkΡ׈Um~"^CӮTYYFh"$Hȏ'j11ARh3z6PikܭyffB)-ՄrV4 [hjVH;fz:9v nd}A+cņ{؎ O7#<I V32ش;Rq?H "\|tؕ~A ~Gy<3ixGc>/ey;'<~4f_}1ruݑ4r\c2h[{#N];ygs.9zуkQl6u \_5얦|X,AH <NŸO'̌ΏVҹyGð6kE߂$ JtlOW)/ވrИѪbf{m=\r>L,S烓;טzZgY@k² ےVWVY}LX_1.PmMR*pSGƄįY8Manqcj0}@?~a |#`QfݰB/|Xs=7;{ϟ2>ٙi>kΚYcX>N~$5ME\%$M7CaaK;&ݶ֔FGt3 @H'0~ܘ>Gg|9]HX^^[$O[<շKZ4Zi~JJ<3ͶVVRvX3wyMH,SjLZhb[;5%%ni6:^"ۆUz bCWk:KU]~C)t kD[r~G杝GmQ #$cKs`@Ix -ِ MV*p onĆ 탷n'| `.+.i8Nv̍&GBJE,ݛNCh!sO})G'^Rk %ZX+XJԢE֯m C@H $`$$'ȈHьV;E7?Y:8^~]ػEbNT88 !cKub:kwB.Yƴsrqbu}ܢQzoX6P\2z\4J1'^`]:(yb5K"{^E1;\TTCKzmR/w$BBIs>}!MҙoH $@@"(He?7MBSbX/"t}-x("^L dhTmz潠BQ KMt0 8dm}e҈ C&z_S,VkTM\G^#̘T-<^Bsh)2mQ^8t2ۍY1_NUr\7~dYuC)" 17~<Յi7nfF akҀ SD IDATy [JN[aCosoCE&1!$@H <]a}PЌoo>퍗@Y iDgvr6ouIS?{zcUxoN=ϼNܮ!"{G$@!QK[]U}ԗC$rh,?juTȔӡ}D9.k1|Jf/sԳUa&잳a[y\(4{Γf _/ëI@H $!Ѕ: F4xVچi;xM[4gtѻƫ7DSQ[w:zUuLh8.+b҇)>mAtXD5wWE ڐiNt90&Lji6 $PMLjR 7@H $$*LLX{תn\+9ӵrdǰ}z]gY] 7o@:9 SU[";W4p? ]]jV߭Ϲge@NM hVo޾&}J )j[,"֎'*gx^"!$@H =BK.ąmޟ.u."8Ǻa;W2BHŁc&0! kˮ WzbkԆ1?5a C!"hdYEӋ=挠4GЙ+@H $C!`V\nƒR!>_ B\F3i5j`2|ەV =F3*3G_1a" CQ]ܔIZuo65j8*ennLJP(WH\.1cV Kt3f/ $@Hk @H $EuyH $@]C]*tP x =pH $ Vܭ>4 $@H!@C %?$@O8?N $@O(OFH $Nq5ŅZB3vT_g5 yLJ],֢H $']p\Uc;"cӁƬ֯b'9s]My AM\j@mLYQ@e\ۅ.4B/ ۽4Ԇ!nnv*;Eoozi ))*VsV@w PS*kFml=77xnj+{<+mw4B|O@H <:AzkCtaEQﮚ"oģc)Q} ZvOOwg}qOK`#~5u Cu wlmcE{m\[H[quPwnLJ OdJ!¦З/fzmltZZ6ʺ: uLJ.'BfBŦR$@]H "S}.ϹgeTN8uG̑m+oFRu}^h{Ar%QqXn,?gp  LH{P  Zi3Lҍ0ʌKr6~9!IG+˝-_[ww#DZb>n覅"3;(zpO_H N-IwĭYxRUQ9ksDZGZz'0lIOIaqfN'_~&5z,KCMO7_E~_n @H@bHakk-v e5eزF.V~2ϫC*pԶ~1Ii7깝Bl͈)~~A &m8SDD.͐<[[`LH $ 3Z!8gjVFzvk0 a5''-U{37u"?p7VfGP-azHJZR/܅$&. ]--9ws{L{|>h{LH $:BN\7~7RT66tR %3FV^Fm 0an;AH H[MH !XJd-?T+zTrvv˕صF@H @Kak$gΰɆ"{tev0Td $}g:Cg599Q5zR(m7@H1":10q*H>\v $NEh%٧ROfzu je%7JmoG],O&$n6[ڪE-:Z_}eؕ&O-@H G@kö<ž7JCK>?Cc0C,QM9qen^T4tIަMl/F- /jӞ >N^ GӔ(Na-9MZÑ@H $XOMhղ29$Z͕HE|;S N-mΥV5E 7ȪU"Io"+*urK. + ~L<)1Rрi.{p2cidҤķuٕBs_1|LVZ8м9Q_ZQAY3ҺS $@N!>)9t6R8^$D8t-_sITT[vtQGuƎUShC|/;k/9FmeGQB@bWU4{^εCnJ>4J8qݿCHm_OWg˯ Ly<<=jXtګ9񿔏oBEG+:, +xòP՞ijJi^uVeXx!>u5 8 [44hc_v(Bu3PWw%dV9;4?7;<"$@H[T|DYvTi纭>0Zxa=˸ IQ KMtTPnP$"U ϤeF5 y۵~saȺV*jYKUsgu\ Q^CAy AM\j@mLYQiiTT$r{a3q_h*Jj ,]4jˈbMIAu|zHzkҀTؾo#LH $x tJܨ큳ŢbR%yQOgl{c}?\:`/?5Hq7ωl s. |q!@hF/Z4p C7CFl秝'߸-n[f;Z=éþ_!CFY 5W~_ߨGyE ')n/DZUS 2tjl+r鿧3r%R\2}'c!nDv>0W:č}iwI d1!$@HI'9LYxLZ5b]iDɺ\;xM[4gh "hTcK:kcYC{m)]yUq@PgZoX& %ĭcM\0@ͺOغ-;uݐמR6'nZpMN_0W_^E;fIcE@#/YV WhNp*uY~?/.3P#+/V(5u~?3J+`c}"O_x|t/mDՓ]04.- t}EH `V\ήIpQ+jjb |~Dm .ZS$'F^m}ov;^bR~kп {2MO͕fmΥ2CMkF%|Qk/U%VZt:0VYӁhtZZ4G]277B^!&rnjIZVäǏϘ1O;^74D7N?KOREΞnӾmfmzܖ̴϶rqFOFKnWŁ2?Ѧ:WyTlL Oj&|TBx6St/>ua{?9#CCqΞ3>XSۖ1`,s7ܦ4ԍڙx8ԢwR4 $n5岻jca-i.5*"5Y :/T;Hh_Xq'y3V;3[:sY[BDŽNQq3򚚆Q|wNOtAt[P_t?T˽]ee]'P)JB|[u=Ss7b۞2S_;'$-:n-Ž|}`@H}r~z|KI>6t۾OwP@pB[yEp`=4{B`{[Ɗ`;}!wy*: 9u0 8[yvt:iۗ<( YYAR4 tbݼ);'F'Bp-U.#v4 ysi;@Hso96 <"TE %>U05r?"ZE.OK 5k;Io>Oz\zzZa5h/Aik8ߺfȈ$z\]Wo}t@tF65re<́PWWu54ogmh<`?J2A‘Br#vCaI֫Cѳ9o)z`ʚ-9ё礅:Xiut#+! ̋hmѾ$-dKiTܺ>ϐxۇGOov?P[xqg-ƀ9kwn ͉ +գ&bhRƤ BwfIII[>dE&oǂ-iS܎M% $Qo\DGI`}$SRoX=A %&=<7D 7'.>UoM>xy'o<߅{t76 U%Eyig ꝴ2CLo3Mg&-v;d-,XJ<<\acT3-d^- ˙W*뫙[LPApa^=G#Kj?%^޿yujZ-ji]=#)9HEpe9;yljst W@GCut=Vc4FyKip2?)(2o jMȨnH%iFs1i2ߊgo0%7{vxnoWqEV glC%&s$ܹsm\lzKG{>#;5q'tJ]Ǭ0rƽ8,ʹO31R4TdFMJ s>XgVFgArS=l ,cHPf:ig+8O4D]gZ1|>o(7mWU;_ !i[B"^|?I 5 ZmnMQnVFFѷհ $mH 0GоԌܬӻ>60~ho#1|d{ m}ɩMoԣ4r\c2h%dHW/۵obm(9)&zQFTb7&8~zQyy1txc#1}+2e}> %K>ztק{%bUM4;~_Ǟ0xklN)~L[@=4EjsFeȑ^-.פ>n"$L`#LR$\3ozFZ7g|lsOع۪a"B@Ader!:g%3|ל5ưl;eHߥ/Oڵ-KH2j#GȔ)!kfyYeV Nbsx5 $gGƭNE<3con#SS C}f)3?NDR=-}?&zV:L:?%4Bu D-pwVܻmFw^ܖYi[#e/v/XAgeut⃭yIVLJxG_fyFU[u}}5KSGl@FZfX8HoЄlH[OWХVkOڈt= I?#$0+.W6-mmu٭*%k٭S.ogA٭ ~̌+G?~|ƌF^^TV }rtkvFƊn*+/CL;&acQeJ  rhweS46#7u:erER:Y6餼HllΆJ,ۮt߱@rq%ր@ovKefJV.pV>>`>C"lHٛJFcgѬ3v젓MH  $".vh7_sVd$nZ% s "X[#݆{AԲ94h5w(JAaVYѢm>ӁJ_Xy{԰Ws))ů6Ήc3Ŵ7NVk>ܔ}hisCp 2t% pZؐ .E'zoX68zO]rd)iٟz gmO"tb{ńD:PƷMC}ؕڒr/s@K#߱컔v r%9ߣbw=ty|Cݕ[Pm"h[NBH $E\犜G(]/̿שFo’؏VJ*/>Vһ+Js]n+,Q%ll7qI2eEF-O"no>ZQfQ!Udwҍ7e0K؞"tE”=g w0`/?=l$Z5wi|PN5JŅq?R>”KU Džm棥+Ew`۷~ &$ h"@H JKtBn[ .7~е*Khp"F/Z4p l}2ҷf;?vxaȐItRZj 6 n>G@H $*9( PO Z߻wOäߦde1'#~ɵoiIe@8$@H  7o/TV"t\¯Br|etOGcC@H t? JrF:uNr5\?n#j1d˱=XuXW&zq}%׀?)tI[Σcp5v*oVk#J$/|E3`vSH]BxF"GtM̮}6$4P9 u- 8iʲv: b $#Af`ƌ&a%5Pɬ` ;u)9pB"ۓpܿOӉW<=د,*|/Rª` ,&zfPaJY¡N"YΘ.R4s7M7ALϚ+ml>WVaj8XqcEo㓢OC"r evQĖm@H <)XadU1T3+.gVa0`FQU#-*h ~rpU]*e]FPP_@xn$Du4jY] fekkrIAS{'*+@,ϊ{5D$etp p{tev0@dEyxBE~:[`& XxAaSٛ|ƔxX4?zԴuH460G{_~jS`@H # ~muatq;'U>9JPWvdGO>xw/;R y*?rNwP{W}rΑHvkL8'eeʺ맢x|F_o<9KwQUGJ~Ɗఽv]qQt@ ϓ IDATH "`: KC!%P*c |kՆMOamٚ > 7 s;d>O͹MH޺UwtR߱#9CBBK?b O<;=u@H .#!s@%$ Q@a$7rB\DAAHj"N{5p@?ʇ7`xV\Kq}=e t&u 1-u׼ v0/O 7~MJgBTk\׿4m7k c_ <@H Nj\`PuX 갺;OE8"!j"@| PΏҭ{Ċ`#<$~ bp-fW|5I_M 6{roI9y{v΍L&?ݷQܛ^MM7-x4ȧϑZhԙ;tMmw,BH $Мۢ" Q* `Ajp/>457K@c7%N@á~QSSyP+%N?.Hػf`<4o7(g6삃]mM$@U~m'.`-\` C %Pn(d+Cr63_}z+ #{!pۚ=+{9@4'`2CZpbٿvG%s9WX7SZp4gXGH $h߮yw{rT qGHLz.d^p! Dž7ýC՜5yc}^<2Vl˗~_󪢗׭ݜ-zZr9fN&=bvόKi\$7zPf=@S8fZтb}/vEzmS+/_>~IE3|_xޕj0(XH ! 7oS! i 4p6+7vM&s Dpz (..N;y#oOMp)q=8uZtzzPÌv _I=} C}L3c}/v^=\Μk?\V]#M_=eY_R{.# ._XE ng&c4ОuPL~o'.L[oYa &±:ظ '@jj_v+x_{\1zF@$<^1C{z_ÚmR'=8ZOU2u/6flx{-p%uzԊĎ;W|sv W4(u`)MDP:"[ML 3hPMD&" ˎ?`7!VxԩM.l2(Cܤ<##44_hD >S91wުb;sLlVwό=17p5#<|^/8=Zjk4H%V<¯'s@5>WBbe08Y0B!_ЃUڝpO6@`cPw7<8cccY; g܆ P?ݻp .~W\PN!8 "6!Zļ^nz:V[Cut0PX"񅕽>WX s!U<p] pЃ tBzzo%f :]L"h ?<l8%T##^{/ !cXk+ꠘ bm/s{A~Sx<:Z{Lߦy@ 1Cs8{X }zуs:Qݽ^wUufUj 7* Ɨ?%pf=pMg/ Ib-d A 8XSA'@?!C$}{S>zV3g΄se\ 8 =x`aa!h_8`/`pBeBkbӼ_,4!"'Z1 q XKÅaB"= ,h5<>g|x>yuD Tuժb.\4Spa (bJadYF+\7a.C d f t#:yD;3n~o3|Ãx!L`U2d\\\-[/@jZ[[+Y&𬠇Xh˂kmŵ9h~ erC=x@#<|^/zpMrB%#1%όKhW  T3LwUCE. %l|0+u pM/Ƭ `uQf+w<…8ٟ9 "FBH kpV>|B!$h5 6żb_$ =-Oy~P] W72_/2A̹vRg0wQ7:-G>x<!@tX:cN)!nS+7V `*0mqC2t0D?8>]VO % :t0$m t?Dp!0Ćq!p&@ƐP6p&m!]d % fWaα3'BMm4 rT?1^ac@xUp|x>Cn^pJa0՜DPn^GDQka5d :x!w 0UJ& ::6䥦Zا?鎎5N=LOɮ0kSc-9qoad%_yn}.SgT % h{ l"'gO+[Z\|C~Ro5 fY`/p@H G\B3z#ٜ9:Rg0(EA1X~ fBL#^[1z`3'Nh~]%K]9qր'(͝WUDZQBF[Sݾ#;5yR]?⻗Up诺sd<;a!߶^s\E{^nyƑW ` K Q * ] 'qW6-TcWKWǐ~u;8JJJ`U5 - !p/@H nEkpk(Tb1pֳgO׾nb*X5` wpolЉA'/_f@H $@s'a8G$@H $` P;_N QRIY*%R0biPM7,YdL1H !k~iR2ci?~N紝;3>|繗뺾u~ <]SWE %@ P%@ PM@+*nt|J(J(JS# 3F>5>%@ P%@ PMObΏ$+Uk# ).kߧeF6moQ>%@ P%@ P̃\bDv̦K} K'.D- Ee[1=8D*80B/t +7yfrus--ǺUWe\;k1Z/ }uM~!f.q7&sjsSIb5)buaX+x@ n~5hVWAbw% T.S@9׸Zuuk]x:yJnUg^ێq;c;C5Չ~&mY>XMJIQ%@ P@%Ka^i6f* üVo/Ew'OL%e_ɎW$i͉90T,)_,aRIIU`qX|얜g1 z ?e5oMX똲ɤv;L7?uLF-yaMV}GC̲đ]LY"n2 Sp;xN3.fQE(J(Jj=eΝ{|x-`Vob#v/_Tar2T4a?߃ͅЮH*q2.Rae L$L70mu;fa*J n!nm3;3b2| 쳉uGdĘ6|"Q!ZykU7Ǵ2|_G 73jxX£g6ι8Ul - DXUY}2Xo{: !OF˟dx'o?uϧzWdٷ{'́"ݰZ_ch&Ր}$96ZbgM+ Hga)~|[mmϹ$Z-K\@m] D<W}܀2JHB'b-B]zi^2 Jub4o2 uQ1=CQĭAo.3@4r('%@ P%@ 4mƄSg1g`-mʵFl4=âىWi%0WƓOdn{ҷ{ N9J`;os΃|#rC1=MmVTH4<|gI2$"U:"\L?H,A%xl{i-Lr3K*-PUjacϝЯY 3d8s2ˠ9]98턬6\Tc8Kd62rg5+Uh29~ 2uLdX g%1* aa^D)5/ρV: {Pi/ e6(J9ˋ_X۾F|5Q""n `MNnUJ(Jhp>/=|ִul?4L -RsL[XNlȋUkЮ|q=(7e@*8X!)1'ǦF+Vr7_aAmv +pǙC,0\DjhSsv]wuؗ/ZEe_LY)t Ild$FΝ!e9Y*re4(Ͻ (\QVcm'y0`Mg'Sq ̓؍[xiF֯a+pJY&S۰I-aJ!>J^inKڎ2+5)22nwٮÐ>ROqxW :oN>a͕='g&u̇6.wẳfyaO_&yӡ-R7rNd5 MS(0Lcg}%$%jGLYHR+Dv\3ĭJ5`I P%@ PM}YÄ^'o9z,4 e)b\@N X0xo&;j,3cr]WFw% VÎo&}!YAHJszE~pB*cۺ8g ݳSzZ=nI`g6y弤ųJp(7oYs=<ܭ@uu2ZTt{&R9ٔeEA&0ƺ9Ql_o爈ѩү]71 AyScTK[9 0spT4Xx龻g!L\y_䃕֭&|Z6V-BXa˴T?ꐃ`t\< @R$yf+gmZBz^+UƊc;Yk=p::O7/pq[O(D6 #opUMTr7+ i3pZp6Un^µWSU7B uZQ ȍ&G_QF= Mn:{xBfM]5L#@U@ T>U1SPSWX蘩މ)J(J7񇛪ToJ(J(JQt7|߾Q}i'J(J(J MX}:%@ P%@ P%[#:.%@ P%@ P@%;V7RIENDB`PKXDD(xEE*celery-1.0-archived/_static/searchtools.js/* * searchtools.js_t * ~~~~~~~~~~~~~~~~ * * Sphinx JavaScript utilties for the full-text search. * * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ /** * Porter Stemmer */ var Stemmer = function() { var step2list = { ational: 'ate', tional: 'tion', enci: 'ence', anci: 'ance', izer: 'ize', bli: 'ble', alli: 'al', entli: 'ent', eli: 'e', ousli: 'ous', ization: 'ize', ation: 'ate', ator: 'ate', alism: 'al', iveness: 'ive', fulness: 'ful', ousness: 'ous', aliti: 'al', iviti: 'ive', biliti: 'ble', logi: 'log' }; var step3list = { icate: 'ic', ative: '', alize: 'al', iciti: 'ic', ical: 'ic', ful: '', ness: '' }; var c = "[^aeiou]"; // consonant var v = "[aeiouy]"; // vowel var C = c + "[^aeiouy]*"; // consonant sequence var V = v + "[aeiou]*"; // vowel sequence var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 var s_v = "^(" + C + ")?" + v; // vowel in stem this.stemWord = function (w) { var stem; var suffix; var firstch; var origword = w; if (w.length < 3) return w; var re; var re2; var re3; var re4; firstch = w.substr(0,1); if (firstch == "y") w = firstch.toUpperCase() + w.substr(1); // Step 1a re = /^(.+?)(ss|i)es$/; re2 = /^(.+?)([^s])s$/; if (re.test(w)) w = w.replace(re,"$1$2"); else if (re2.test(w)) w = w.replace(re2,"$1$2"); // Step 1b re = /^(.+?)eed$/; re2 = /^(.+?)(ed|ing)$/; if (re.test(w)) { var fp = re.exec(w); re = new RegExp(mgr0); if (re.test(fp[1])) { re = /.$/; w = w.replace(re,""); } } else if (re2.test(w)) { var fp = re2.exec(w); stem = fp[1]; re2 = new RegExp(s_v); if (re2.test(stem)) { w = stem; re2 = /(at|bl|iz)$/; re3 = new RegExp("([^aeiouylsz])\\1$"); re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); if (re2.test(w)) w = w + "e"; else if (re3.test(w)) { re = /.$/; w = w.replace(re,""); } else if (re4.test(w)) w = w + "e"; } } // Step 1c re = /^(.+?)y$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = new RegExp(s_v); if (re.test(stem)) w = stem + "i"; } // Step 2 re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; suffix = fp[2]; re = new RegExp(mgr0); if (re.test(stem)) w = stem + step2list[suffix]; } // Step 3 re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; suffix = fp[2]; re = new RegExp(mgr0); if (re.test(stem)) w = stem + step3list[suffix]; } // Step 4 re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; re2 = /^(.+?)(s|t)(ion)$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = new RegExp(mgr1); if (re.test(stem)) w = stem; } else if (re2.test(w)) { var fp = re2.exec(w); stem = fp[1] + fp[2]; re2 = new RegExp(mgr1); if (re2.test(stem)) w = stem; } // Step 5 re = /^(.+?)e$/; if (re.test(w)) { var fp = re.exec(w); stem = fp[1]; re = new RegExp(mgr1); re2 = new RegExp(meq1); re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) w = stem; } re = /ll$/; re2 = new RegExp(mgr1); if (re.test(w) && re2.test(w)) { re = /.$/; w = w.replace(re,""); } // and turn initial Y back to y if (firstch == "y") w = firstch.toLowerCase() + w.substr(1); return w; } } /** * Simple result scoring code. */ var Scorer = { // Implement the following function to further tweak the score for each result // The function takes a result array [filename, title, anchor, descr, score] // and returns the new score. /* score: function(result) { return result[4]; }, */ // query matches the full name of an object objNameMatch: 11, // or matches in the last dotted part of the object name objPartialMatch: 6, // Additive scores depending on the priority of the object objPrio: {0: 15, // used to be importantResults 1: 5, // used to be objectResults 2: -5}, // used to be unimportantResults // Used when the priority is not in the mapping. objPrioDefault: 0, // query found in title title: 15, // query found in terms term: 5 }; /** * Search Module */ var Search = { _index : null, _queued_query : null, _pulse_status : -1, init : function() { var params = $.getQueryParameters(); if (params.q) { var query = params.q[0]; $('input[name="q"]')[0].value = query; this.performSearch(query); } }, loadIndex : function(url) { $.ajax({type: "GET", url: url, data: null, dataType: "script", cache: true, complete: function(jqxhr, textstatus) { if (textstatus != "success") { document.getElementById("searchindexloader").src = url; } }}); }, setIndex : function(index) { var q; this._index = index; if ((q = this._queued_query) !== null) { this._queued_query = null; Search.query(q); } }, hasIndex : function() { return this._index !== null; }, deferQuery : function(query) { this._queued_query = query; }, stopPulse : function() { this._pulse_status = 0; }, startPulse : function() { if (this._pulse_status >= 0) return; function pulse() { var i; Search._pulse_status = (Search._pulse_status + 1) % 4; var dotString = ''; for (i = 0; i < Search._pulse_status; i++) dotString += '.'; Search.dots.text(dotString); if (Search._pulse_status > -1) window.setTimeout(pulse, 500); } pulse(); }, /** * perform a search for something (or wait until index is loaded) */ performSearch : function(query) { // create the required interface elements this.out = $('#search-results'); this.title = $('

' + _('Searching') + '

').appendTo(this.out); this.dots = $('').appendTo(this.title); this.status = $('

').appendTo(this.out); this.output = $('
PKXDDq"Y*Y*5celery-1.0-archived/reference/celery.bin.celeryd.html Celery Worker Daemon - celery.bin.celeryd — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Celery Worker Daemon - celery.bin.celeryd

PKXDDy\ . .=celery-1.0-archived/reference/celery.contrib.test_runner.html Contrib: Test runner - celery.contrib.test_runner — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Contrib: Test runner - celery.contrib.test_runner

celery.contrib.test_runner.run_tests(test_labels, *args, **kwargs)

Django test runner allowing testing of celery delayed tasks.

All tasks are run locally, not in a worker.

To use this runner set settings.TEST_RUNNER:

TEST_RUNNER = "celery.contrib.test_runner.run_tests"
PKXDDb**3celery-1.0-archived/reference/celery.task.base.html Defining Tasks - celery.task.base — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Defining Tasks - celery.task.base

PKXDD7334celery-1.0-archived/reference/celery.exceptions.html Exceptions - celery.exceptions — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Exceptions - celery.exceptions

Common Exceptions

exception celery.exceptions.AlreadyRegistered

The task is already registered.

exception celery.exceptions.ImproperlyConfigured

Celery is somehow improperly configured.

exception celery.exceptions.MaxRetriesExceededError

The tasks max restart limit has been exceeded.

exception celery.exceptions.NotRegistered(message, *args, **kwargs)

The task is not registered.

exception celery.exceptions.RetryTaskError(message, exc, *args, **kwargs)

The task is to be retried later.

exception celery.exceptions.TimeoutError

The operation timed out.

PKXDDI0**3celery-1.0-archived/reference/celery.task.http.html HTTP Callback Tasks - celery.task.http — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

HTTP Callback Tasks - celery.task.http

PKXDDiLG5G50celery-1.0-archived/reference/celery.states.html Task States - celery.states — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Task States - celery.states

Task States

celery.states.PENDING

Task is waiting for execution or unknown.

celery.states.STARTED

Task has been started.

celery.states.SUCCESS

Task has been successfully executed.

celery.states.FAILURE

Task execution resulted in failure.

celery.states.RETRY

Task is being retried.

celery.states.RETRY = 'RETRY'
celery.states.READY_STATES

Set of states meaning the task result is ready (has been executed).

celery.states.UNREADY_STATES

Set of states meaning the task result is not ready (has not been executed).

celery.states.EXCEPTION_STATES

Set of states meaning the task returned an exception.

celery.states.ALL_STATES

Set of all possible states.

PKXDDBY44;celery-1.0-archived/reference/celery.loaders.djangoapp.html Django Loader - celery.loaders.djangoapp — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Django Loader - celery.loaders.djangoapp

class celery.loaders.djangoapp.Loader

The Django loader.

on_task_init(task_id, task)

This method is called before a task is executed.

Does everything necessary for Django to work in a long-living, multiprocessing environment.

on_worker_init()

Called when the worker starts.

Automatically discovers any tasks.py files in the applications listed in INSTALLED_APPS.

read_configuration()

Load configuration from Django settings.

celery.loaders.djangoapp.autodiscover()

Include tasks for all applications in INSTALLED_APPS.

Given an application name and a module name, tries to find that module in the application.

PKXDD*t*t*6celery-1.0-archived/reference/celery.task.control.html Remote Management of Workers - celery.task.control — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Remote Management of Workers - celery.task.control

PKXDDEd**8celery-1.0-archived/reference/celery.task.schedules.html Periodic Task Schedule Behaviors - celery.task.schedules — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Periodic Task Schedule Behaviors - celery.task.schedules

PKXDDW))4celery-1.0-archived/reference/celery.decorators.html Task Decorators - celery.decorators — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Task Decorators - celery.decorators

PKXDDa771celery-1.0-archived/reference/celery.signals.html Signals - celery.signals — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Signals - celery.signals

task_sent

Triggered when a task has been sent to the broker. Note that this is executed in the client process, the one sending the task, not in the worker.

Provides arguments:

  • task_id

    Id of the task to be executed.

  • task

    The task being executed.

  • args

    the tasks positional arguments.

  • kwargs

    The tasks keyword arguments.

  • eta

    The time to execute the task.

  • taskset

    Id of the taskset this task is part of (if any).

task_prerun

Triggered before a task is executed.

Provides arguments:

  • task_id

    Id of the task to be executed.

  • task

    The task being executed.

  • args

    the tasks positional arguments.

  • kwargs

    The tasks keyword arguments.

task_postrun

Triggered after a task has been executed.

Provides arguments:

  • task_id

    Id of the task to be executed.

  • task

    The task being executed.

  • args

    The tasks positional arguments.

  • kwargs

    The tasks keyword arguments.

  • retval

    The return value of the task.

worker_init

Triggered before the worker is started.

worker_ready

Triggered when the worker is ready to accept work.

worker_shutdown

Triggered when the worker is about to shut down.

PKXDDΓ]**8celery-1.0-archived/reference/celery.bin.celeryinit.html Celery Initialize - celery.bin.celeryinit — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Celery Initialize - celery.bin.celeryinit

PKXDD2.2.1celery-1.0-archived/reference/celery.loaders.html Loaders - celery.loaders — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Loaders - celery.loaders

celery.loaders.current_loader()

Detect and return the current loader.

celery.loaders.get_loader_cls(loader)

Get loader class by name/alias

celery.loaders.load_settings()

Load the global settings object.

PKXDDwʺ))0celery-1.0-archived/reference/celery.events.html Events - celery.events — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Events - celery.events

PKXDDY^[3[36celery-1.0-archived/reference/celery.loaders.base.html Loader Base Classes - celery.loaders.base — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Loader Base Classes - celery.loaders.base

class celery.loaders.base.BaseLoader

The base class for loaders.

Loaders handles to following things:

  • Reading celery client/worker configurations.

  • What happens when a task starts?

    See on_task_init().

  • What happens when the worker starts?

    See on_worker_init().

  • What modules are imported to find tasks?

conf

Loader configuration.

on_task_init(task_id, task)

This method is called before a task is executed.

on_worker_init()

This method is called when the worker (celeryd) starts.

PKXDD{-PE*E*7celery-1.0-archived/reference/celery.task.builtins.html Built-in Task Classes - celery.task.builtins — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Built-in Task Classes - celery.task.builtins

PKXDDﵚ))/celery-1.0-archived/reference/celery.views.html Django Views - celery.views — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Django Views - celery.views

PKXDDCmm.celery-1.0-archived/reference/celery.conf.html Configuration - celery.conf — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Configuration - celery.conf

QUEUES

Queue name/options mapping.

DEFAULT_QUEUE

Name of the default queue.

DEFAULT_EXCHANGE

Default exchange.

DEFAULT_EXCHANGE_TYPE

Default exchange type.

DEFAULT_DELIVERY_MODE

Default delivery mode ("persistent" or "non-persistent"). Default is "persistent".

DEFAULT_ROUTING_KEY

Default routing key used when sending tasks.

BROKER_CONNECTION_TIMEOUT

The timeout in seconds before we give up establishing a connection to the AMQP server.

BROADCAST_QUEUE

Name prefix for the queue used when listening for broadcast messages. The workers hostname will be appended to the prefix to create the final queue name.

Default is "celeryctl".

BROADCAST_EXCHANGE

Name of the exchange used for broadcast messages.

Default is "celeryctl".

BROADCAST_EXCHANGE_TYPE

Exchange type used for broadcast messages. Default is "fanout".

EVENT_QUEUE

Name of queue used to listen for event messages. Default is "celeryevent".

EVENT_EXCHANGE

Exchange used to send event messages. Default is "celeryevent".

EVENT_EXCHANGE_TYPE

Exchange type used for the event exchange. Default is "topic".

EVENT_ROUTING_KEY

Routing key used for events. Default is "celeryevent".

EVENT_SERIALIZER

Type of serialization method used to serialize events. Default is "json".

RESULT_EXCHANGE

Exchange used by the AMQP result backend to publish task results. Default is "celeryresult".

CELERY_SEND_TASK_ERROR_EMAILS

If set to True, errors in tasks will be sent to admins by e-mail. If unset, it will send the e-mails if settings.DEBUG is True.

ALWAYS_EAGER

Always execute tasks locally, don’t send to the queue.

TASK_RESULT_EXPIRES

Task tombstone expire time in seconds.

IGNORE_RESULT

If enabled, the default behavior will be to not store task results.

TRACK_STARTED

If enabled, the default behavior will be to track when tasks starts by storing the STARTED state.

ACKS_LATE

If enabled, the default behavior will be to acknowledge task messages after the task is executed.

STORE_ERRORS_EVEN_IF_IGNORED

If enabled, task errors will be stored even though Task.ignore_result is enabled.

MAX_CACHED_RESULTS

Total number of results to store before results are evicted from the result cache.

BROKER_CONNECTION_RETRY

Automatically try to re-establish the connection to the AMQP broker if it’s lost.

BROKER_CONNECTION_MAX_RETRIES

Maximum number of retries before we give up re-establishing a connection to the broker.

If this is set to 0 or None, we will retry forever.

Default is 100 retries.

TASK_SERIALIZER

A string identifying the default serialization method to use. Can be pickle (default), json, yaml, or any custom serialization methods that have been registered with carrot.serialization.registry.

Default is pickle.

RESULT_BACKEND

The backend used to store task results (tombstones).

CELERY_CACHE_BACKEND

Use a custom cache backend for celery. If not set the django-global cache backend in CACHE_BACKEND will be used.

SEND_EVENTS

If set, celery will send events that can be captured by monitors like celerymon. Default is: False.

DEFAULT_RATE_LIMIT

The default rate limit applied to all tasks which doesn’t have a custom rate limit defined. (Default: None)

DISABLE_RATE_LIMITS

If True all rate limits will be disabled and all tasks will be executed as soon as possible.

CELERYBEAT_LOG_LEVEL

Default log level for celerybeat. Default is: INFO.

CELERYBEAT_LOG_FILE

Default log file for celerybeat. Default is: None (stderr)

CELERYBEAT_SCHEDULE_FILENAME

Name of the persistent schedule database file. Default is: celerybeat-schedule.

CELERYBEAT_MAX_LOOP_INTERVAL

The maximum number of seconds celerybeat is allowed to sleep between checking the schedule. The default is 5 minutes, which means celerybeat can only sleep a maximum of 5 minutes after checking the schedule run-times for a periodic task to apply. If you change the run_times of periodic tasks at run-time, you may consider lowering this value for changes to take effect faster (A value of 5 minutes, means the changes will take effect in 5 minutes at maximum).

CELERYMON_LOG_LEVEL

Default log level for celerymon. Default is: INFO.

CELERYMON_LOG_FILE

Default log file for celerymon. Default is: None (stderr)

LOG_LEVELS

Mapping of log level names to logging module constants.

CELERYD_LOG_FORMAT

The format to use for log messages.

CELERYD_TASK_LOG_FORMAT

The format to use for task log messages.

CELERYD_LOG_FILE

Filename of the daemon log file. Default is: None (stderr)

CELERYD_LOG_LEVEL

Default log level for daemons. (WARN)

CELERYD_CONCURRENCY

The number of concurrent worker processes. If set to 0, the total number of available CPUs/cores will be used.

CELERYD_PREFETCH_MULTIPLIER

The number of concurrent workers is multipled by this number to yield the wanted AMQP QoS message prefetch count.

CELERYD_POOL

Name of the task pool class used by the worker. Default is "celery.worker.pool.TaskPool".

CELERYD_LISTENER

Name of the listener class used by the worker. Default is "celery.worker.listener.CarrotListener".

CELERYD_MEDIATOR

Name of the mediator class used by the worker. Default is "celery.worker.controllers.Mediator".

CELERYD_ETA_SCHEDULER

Name of the ETA scheduler class used by the worker. Default is "celery.worker.controllers.ScheduleController".

PKXDDcO))1celery-1.0-archived/reference/celery.execute.html Executing Tasks - celery.execute — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Executing Tasks - celery.execute

PKXDDsr**;celery-1.0-archived/reference/celery.contrib.abortable.html Contrib: Abortable tasks - celery.contrib.abortable — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Contrib: Abortable tasks - celery.contrib.abortable

PKXDDf*0*09celery-1.0-archived/reference/celery.loaders.default.html Default Loader - celery.loaders.default — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Default Loader - celery.loaders.default

class celery.loaders.default.Loader

The default loader.

See the FAQ for example usage.

on_worker_init()

Imports modules at worker init so tasks can be registered and used by the worked.

The list of modules to import is taken from the CELERY_IMPORTS setting in celeryconf.py.

read_configuration()

Read configuration from celeryconfig.py and configure celery and Django so it can be used by regular Python.

PKXDDjY772celery-1.0-archived/reference/celery.registry.html Task Registry - celery.registry — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Task Registry - celery.registry

celery.registry

class celery.registry.TaskRegistry

Site registry for tasks.

exception NotRegistered(message, *args, **kwargs)

The task is not registered.

TaskRegistry.filter_types(type)

Return all tasks of a specific type.

TaskRegistry.periodic()

Get all periodic task types.

TaskRegistry.register(task)

Register a task in the task registry.

The task will be automatically instantiated if not already an instance.

TaskRegistry.regular()

Get all regular task types.

TaskRegistry.unregister(name)

Unregister task by name.

Parameters:name – name of the task to unregister, or a celery.task.base.Task with a valid name attribute.
Raises celery.exceptions.NotRegistered:
 if the task has not been registered.
PKXDD**8celery-1.0-archived/reference/celery.bin.celerybeat.html Celery Periodic Task Server - celery.bin.celerybeat — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Celery Periodic Task Server - celery.bin.celerybeat

PKXDD)))0celery-1.0-archived/reference/celery.result.html Task Result - celery.result — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Task Result - celery.result

PKXDD(**3celery-1.0-archived/reference/celery.messaging.html Messaging - celery.messaging — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Messaging - celery.messaging

PKXDDw&**5celery-1.0-archived/reference/celery.bin.camqadm.html caqmadm: AMQP API Command-line Shell - celery.bin.camqadm — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

caqmadm: AMQP API Command-line Shell - celery.bin.camqadm

PKXDD{R**.celery-1.0-archived/reference/celery.task.html Task Information and Utilities - celery.task — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Task Information and Utilities - celery.task

PKXDD?77(celery-1.0-archived/reference/index.html API Reference — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

PKXDD` Q!!-celery-1.0-archived/cookbook/daemonizing.html Running celeryd as a daemon — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Running celeryd as a daemon

Celery does not daemonize itself, please use one of the following daemonization tools.

start-stop-daemon

launchd (OS X)

PKXDDId-d-.celery-1.0-archived/cookbook/unit-testing.html Unit Testing — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Unit Testing

Testing with Django

The problem that you’ll first run in to when trying to write a test that runs a task is that Django’s test runner doesn’t use the same database that your celery daemon is using. If you’re using the database backend, this means that your tombstones won’t show up in your test database and you won’t be able to check on your tasks to get the return value or check the status.

There are two ways to get around this. You can either take advantage of CELERY_ALWAYS_EAGER = True to skip the daemon, or you can avoid testing anything that needs to check the status or result of a task.

Using a custom test runner to test with celery

If you’re going the CELERY_ALWAYS_EAGER route, which is probably better than just never testing some parts of your app, a custom Django test runner does the trick. Celery provides a simple test runner, but it’s easy enough to roll your own if you have other things that need to be done. http://docs.djangoproject.com/en/dev/topics/testing/#defining-a-test-runner

For this example, we’ll use the celery.contrib.test_runner to test the add task from the User Guide: Tasks examples.

To enable the test runner, set the following settings:

TEST_RUNNER = 'celery.contrib.test_runner.run_tests'

Then we can write our actually test in a tests.py somewhere:

from django.test import TestCase
from myapp.tasks import add

class AddTestCase(TestCase):

    def testNoError(self):
        """Test that the ``add`` task runs with no errors,
        and returns the correct result."""
        result = add.delay(8, 8)

        self.assertEquals(result.get(), 16)
        self.assertTrue(result.successful())

This test assumes that you put your example add task in maypp.tasks so of course adjust the import for wherever you actually put the class.

PKXDDҗܠ1313'celery-1.0-archived/cookbook/tasks.html Creating Tasks — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Creating Tasks

Ensuring a task is only executed one at a time

You can accomplish this by using a lock.

In this example we’ll be using the cache framework to set a lock that is accessible for all workers.

It’s part of an imaginary RSS feed importer called djangofeeds. The task takes a feed URL as a single argument, and imports that feed into a Django model called Feed. We ensure that it’s not possible for two or more workers to import the same feed at the same time by setting a cache key consisting of the md5sum of the feed URL.

The cache key expires after some time in case something unexpected happens (you never know, right?)

from celery.task import Task
from django.core.cache import cache
from django.utils.hashcompat import md5_constructor as md5
from djangofeeds.models import Feed

LOCK_EXPIRE = 60 * 5 # Lock expires in 5 minutes

class FeedImporter(Task):
    name = "feed.import"

    def run(self, feed_url, **kwargs):
        logger = self.get_logger(**kwargs)

        # The cache key consists of the task name and the MD5 digest
        # of the feed URL.
        feed_url_digest = md5(feed_url).hexdigest()
        lock_id = "%s-lock-%s" % (self.name, feed_url_hexdigest)

        # cache.add fails if if the key already exists
        acquire_lock = lambda: cache.add(lock_id, "true", LOCK_EXPIRE)
        # memcache delete is very slow, but we have to use it to take
        # advantage of using add() for atomic locking
        release_lock = lambda: cache.delete(lock_id)

        logger.debug("Importing feed: %s" % feed_url)
        if aquire_lock():
            try:
                feed = Feed.objects.import_feed(feed_url)
            finally:
                release_lock()
            return feed.url

        logger.debug(
            "Feed %s is already being imported by another worker" % (
                feed_url))
        return
PKXDD,k!!'celery-1.0-archived/cookbook/index.html Cookbook — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Cookbook

This page contains common recipes and techniques. Whenever a setting is mentioned, you should use celeryconf.py if using regular Python, or settings.py if running under Django.

PKXDD=007celery-1.0-archived/getting-started/periodic-tasks.html Periodic Tasks — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Periodic Tasks

You can schedule tasks to run at intervals like cron. Here’s an example of a periodic task:

from celery.task import PeriodicTask
from celery.registry import tasks
from datetime import timedelta

class MyPeriodicTask(PeriodicTask):
    run_every = timedelta(seconds=30)

    def run(self, **kwargs):
        logger = self.get_logger(**kwargs)
        logger.info("Running periodic task!")
>>> tasks.register(MyPeriodicTask)

If you want a little more control over when the task is executed, for example, a particular time of day or day of the week, you can use crontab to set the run_every property:

from celery.task import PeriodicTask
from celery.task.schedules import crontab

class EveryMondayMorningTask(PeriodicTask):
    run_every = crontab(hour=7, minute=30, day_of_week=1)

    def run(self, **kwargs):
        logger = self.get_logger(**kwargs)
        logger.info("Execute every Monday at 7:30AM.")

If you want to use periodic tasks you need to start the celerybeat service. You have to make sure only one instance of this server is running at any time, or else you will end up with multiple executions of the same task.

To start the celerybeat service:

$ celerybeat

or if using Django:

$ python manage.py celerybeat

You can also start celerybeat with celeryd by using the -B option, this is convenient if you only have one server:

$ celeryd -B

or if using Django:

$ python manage.py celeryd  -B
PKXDD5fZ@@@celery-1.0-archived/getting-started/first-steps-with-django.html First steps with Django — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

First steps with Django

Configuring your Django project to use Celery

You only need three simple steps to use celery with your Django project.

  1. Add celery to INSTALLED_APPS.

  2. Create the celery database tables:

    $ python manage.py syncdb
  3. Configure celery to use the AMQP user and virtual host we created

    before, by adding the following to your settings.py:

    BROKER_HOST = "localhost"
    BROKER_PORT = 5672
    BROKER_USER = "myuser"
    BROKER_PASSWORD = "mypassword"
    BROKER_VHOST = "myvhost"
    

That’s it.

There are more options available, like how many processes you want to work in parallel (the CELERY_CONCURRENCY setting). You can also configure the backend used for storing task statuses. For now though, this should do. For all of the options available, please see the configuration directive reference.

Note: If you’re using SQLite as the Django database back-end, celeryd will only be able to process one task at a time, this is because SQLite doesn’t allow concurrent writes.

Running the celery worker server

To test this we’ll be running the worker server in the foreground, so we can see what’s going on without consulting the logfile:

$ python manage.py celeryd

However, in production you probably want to run the worker in the background as a daemon. To do this you need to use to tools provided by your platform. See daemon mode reference.

For a complete listing of the command line options available, use the help command:

$ python manage.py help celeryd

Defining and executing tasks

Please note: All the tasks have to be stored in a real module, they can’t be defined in the python shell or ipython/bpython. This is because the celery worker server needs access to the task function to be able to run it. Put them in the tasks module of your Django application. The worker server will automatically load any tasks.py file for all of the applications listed in settings.INSTALLED_APPS. Executing tasks using delay and apply_async can be done from the python shell, but keep in mind that since arguments are pickled, you can’t use custom classes defined in the shell session.

This is a task that adds two numbers:

from celery.decorators import task

@task()
def add(x, y):
    return x + y

To execute this task, we can use the delay method of the task class. This is a handy shortcut to the apply_async method which gives greater control of the task execution. See Executing Tasks for more information.

>>> from myapp.tasks import MyTask
>>> MyTask.delay(some_arg="foo")

At this point, the task has been sent to the message broker. The message broker will hold on to the task until a celery worker server has successfully picked it up.

Note: If everything is just hanging when you execute delay, please check that RabbitMQ is running, and that the user/password has access to the virtual host you configured earlier.

Right now we have to check the celery worker log files to know what happened with the task. This is because we didn’t keep the AsyncResult object returned by delay.

The AsyncResult lets us find the state of the task, wait for the task to finish and get its return value (or exception if the task failed).

So, let’s execute the task again, but this time we’ll keep track of the task:

>>> result = add.delay(4, 4)
>>> result.ready() # returns True if the task has finished processing.
False
>>> result.result # task is not ready, so no return value yet.
None
>>> result.get()   # Waits until the task is done and returns the retval.
8
>>> result.result # direct access to result, doesn't re-raise errors.
8
>>> result.successful() # returns True if the task didn't end in failure.
True

If the task raises an exception, the return value of result.successful() will be False, and result.result will contain the exception instance raised by the task.

PKXDDXnz''2celery-1.0-archived/getting-started/resources.html Resources — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Resources

Getting Help

Mailing list

For discussions about the usage, development, and future of celery, please join the celery-users mailing list.

IRC

Come chat with us on IRC. The #celery channel is located at the Freenode network.

Bug tracker

If you have any suggestions, bug reports or annoyances please report them to our issue tracker at http://github.com/ask/celery/issues/

Contributing

Development of celery happens at Github: http://github.com/ask/celery

You are highly encouraged to participate in the development of celery. If you don’t like Github (for some reason) you’re welcome to send regular patches.

License

This software is licensed under the New BSD License. See the LICENSE file in the top distribution directory for the full license text.

PKXDDH)=166<celery-1.0-archived/getting-started/broker-installation.html Broker Installation — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Broker Installation

Installing RabbitMQ

See Installing RabbitMQ over at RabbitMQ’s website. For Mac OS X see Installing RabbitMQ on OS X.

Setting up RabbitMQ

To use celery we need to create a RabbitMQ user, a virtual host and allow that user access to that virtual host:

$ rabbitmqctl add_user myuser mypassword

$ rabbitmqctl add_vhost myvhost

$ rabbitmqctl set_permissions -p myvhost myuser "" ".*" ".*"

See the RabbitMQ Admin Guide for more information about access control.

Installing RabbitMQ on OS X

The easiest way to install RabbitMQ on Snow Leopard is using Homebrew; the new and shiny package management system for OS X.

In this example we’ll install homebrew into /lol, but you can choose whichever destination, even in your home directory if you want, as one of the strengths of homebrew is that it’s relocateable.

Homebrew is actually a git repository, so to install homebrew, you first need to install git. Download and install from the disk image at http://code.google.com/p/git-osx-installer/downloads/list?can=3

When git is installed you can finally clone the repo, storing it at the /lol location:

$ git clone git://github.com/mxcl/homebrew /lol

Brew comes with a simple utility called brew, used to install, remove and query packages. To use it you first have to add it to PATH, by adding the following line to the end of your ~/.profile:

export PATH="/lol/bin:/lol/sbin:$PATH"

Save your profile and reload it:

$ source ~/.profile

Finally, we can install rabbitmq using brew:

$ brew install rabbitmq

Configuring the system hostname

If you’re using a DHCP server that is giving you a random hostname, you need to permanently configure the hostname. This is because RabbitMQ uses the hostname to communicate with nodes.

Use the scutil command to permanently set your hostname:

sudo scutil --set HostName myhost.local

Then add that hostname to /etc/hosts so it’s possible to resolve it back into an IP address:

127.0.0.1       localhost myhost myhost.local

If you start the rabbitmq server, your rabbit node should now be rabbit@myhost, as verified by rabbitmqctl:

$ sudo rabbitmqctl status
Status of node rabbit@myhost ...
[{running_applications,[{rabbit,"RabbitMQ","1.7.1"},
                    {mnesia,"MNESIA  CXC 138 12","4.4.12"},
                    {os_mon,"CPO  CXC 138 46","2.2.4"},
                    {sasl,"SASL  CXC 138 11","2.1.8"},
                    {stdlib,"ERTS  CXC 138 10","1.16.4"},
                    {kernel,"ERTS  CXC 138 10","2.13.4"}]},
{nodes,[rabbit@myhost]},
{running_nodes,[rabbit@myhost]}]
...done.

This is especially important if your DHCP server gives you a hostname starting with an IP address, (e.g. 23.10.112.31.comcast.net), because then RabbitMQ will try to use rabbit@23, which is an illegal hostname.

Starting/Stopping the RabbitMQ server

To start the server:

$ sudo rabbitmq-server

you can also run it in the background by adding the -detached option (note: only one dash):

$ sudo rabbitmq-server -detached

Never use kill to stop the RabbitMQ server, but rather use the rabbitmqctl command:

$ sudo rabbitmqctl stop

When the server is running, you can continue reading Setting up RabbitMQ.

PKXDDjCC@celery-1.0-archived/getting-started/first-steps-with-celery.html First steps with Celery — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

First steps with Celery

Creating a simple task

In this example we are creating a simple task that adds two numbers. Tasks are defined in a normal python module. The module can be named whatever you like, but the convention is to call it tasks.py.

Our addition task looks like this:

tasks.py:

from celery.decorators import task

@task
def add(x, y):
    return x + y

All celery tasks are classes that inherit from the Task class. In this case we’re using a decorator that wraps the add function in an appropriate class for us automatically. The full documentation on how to create tasks and task classes are in Executing Tasks.

Configuration

Celery is configured by using a configuration module. By convention, this module is called celeryconfig.py. This module must be in the Python path so it can be imported.

You can set a custom name for the configuration module with the CELERY_CONFIG_MODULE variable. In these examples we use the default name.

Let’s create our celeryconfig.py.

  1. Configure how we communicate with the broker:

    BROKER_HOST = "localhost"
    BROKER_PORT = 5672
    BROKER_USER = "myuser"
    BROKER_PASSWORD = "mypassword"
    BROKER_VHOST = "myvhost"
    
  2. In this example we don’t want to store the results of the tasks, so we’ll use the simplest backend available; the AMQP backend:

    CELERY_RESULT_BACKEND = "amqp"
    
  3. Finally, we list the modules to import, that is, all the modules that contain tasks. This is so celery knows about what tasks it can be asked to perform. We only have a single task module, tasks.py, which we added earlier:

    CELERY_IMPORTS = ("tasks", )
    

That’s it.

There are more options available, like how many processes you want to process work in parallel (the CELERY_CONCURRENCY setting), and we could use a persistent result store backend, but for now, this should do. For all of the options available, see the configuration directive reference.

Running the celery worker server

To test we will run the worker server in the foreground, so we can see what’s going on in the terminal:

$ PYTHONPATH="." celeryd --loglevel=INFO

However, in production you probably want to run the worker in the background as a daemon. To do this you need to use to tools provided by your platform, or something like supervisord.

For a complete listing of the command line options available, use the help command:

$  PYTHONPATH="." celeryd --help

For info on how to run celery as standalone daemon, see daemon mode reference

Executing the task

Whenever we want to execute our task, we can use the delay method of the task class.

This is a handy shortcut to the apply_async method which gives greater control of the task execution. See Executing Tasks for more information.

>>> from tasks import add
>>> add.delay(4, 4)
<AsyncResult: 889143a6-39a2-4e52-837b-d80d33efb22d>

At this point, the task has been sent to the message broker. The message broker will hold on to the task until a celery worker server has successfully picked it up.

Note: If everything is just hanging when you execute delay, please check that RabbitMQ is running, and that the user/password has access to the virtual host you configured earlier.

Right now we have to check the celery worker log files to know what happened with the task. This is because we didn’t keep the AsyncResult object returned by delay.

The AsyncResult lets us find the state of the task, wait for the task to finish and get its return value (or exception if the task failed).

So, let’s execute the task again, but this time we’ll keep track of the task:

>>> result = add.delay(4, 4)
>>> result.ready() # returns True if the task has finished processing.
False
>>> result.result # task is not ready, so no return value yet.
None
>>> result.get()   # Waits until the task is done and returns the retval.
8
>>> result.result # direct access to result, doesn't re-raise errors.
8
>>> result.successful() # returns True if the task didn't end in failure.
True

If the task raises an exception, the return value of result.successful() will be False, and result.result will contain the exception instance raised by the task.

That’s all for now! After this you should probably read the User Guide.

PKXDD:r[FF5celery-1.0-archived/getting-started/introduction.html Introduction — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

Introduction

http://cloud.github.com/downloads/ask/celery/celery_favicon_128.png
Version:1.0.6
Web:http://celeryproject.org/
Download:http://pypi.python.org/pypi/celery/
Source:http://github.com/ask/celery/
Keywords:task queue, job queue, asynchronous, rabbitmq, amqp, redis, django, python, webhooks, queue, distributed

Celery is a task queue/job queue based on distributed message passing. It is focused on real-time operation, but supports scheduling as well.

The execution units, called tasks, are executed concurrently on a single or more worker servers. Tasks can execute asynchronously (in the background) or synchronously (wait until ready).

Celery is already used in production to process millions of tasks a day.

Celery was originally created for use with Django, but is now usable from any Python project. It can also operate with other languages via webhooks.

The recommended message broker is RabbitMQ, but support for Redis and databases is also available.

Overview

This is a high level overview of the architecture.

http://cloud.github.com/downloads/ask/celery/Celery-Overview-v4.jpg

The broker pushes tasks to the worker servers. A worker server is a networked machine running celeryd. This can be one or more machines, depending on the workload.

The result of the task can be stored for later retrieval (called its “tombstone”).

Example

You probably want to see some code by now, so here’s an example task adding two numbers:

from celery.decorators import task

@task
def add(x, y):
    return x + y

You can execute the task in the background, or wait for it to finish:

>>> result = add.delay(4, 4)
>>> result.wait() # wait for and return the result
8

Simple!

Features

Messaging Supported brokers include RabbitMQ, Stomp, Redis, and most common SQL databases.
Robust Using RabbitMQ, celery survives most error scenarios, and your tasks will never be lost.
Distributed Runs on one or more machines. Supports clustering when used in combination with RabbitMQ. You can set up new workers without central configuration (e.g. use your dads laptop while the queue is temporarily overloaded).
Concurrency Tasks are executed in parallel using the multiprocessing module.
Scheduling Supports recurring tasks like cron, or specifying an exact date or countdown for when after the task should be executed.
Performance Able to execute tasks while the user waits.
Return Values Task return values can be saved to the selected result store backend. You can wait for the result, retrieve it later, or ignore it.
Result Stores Database, MongoDB, Redis, Tokyo Tyrant, AMQP (high performance).
Webhooks Your tasks can also be HTTP callbacks, enabling cross-language communication.
Rate limiting Supports rate limiting by using the token bucket algorithm, which accounts for bursts of traffic. Rate limits can be set for each task type, or globally for all.
Routing Using AMQP you can route tasks arbitrarily to different workers.
Remote-control You can rate limit and delete (revoke) tasks remotely.
Monitoring You can capture everything happening with the workers in real-time by subscribing to events. A real-time web monitor is in development.
Serialization Supports Pickle, JSON, YAML, or easily defined custom schemes. One task invocation can have a different scheme than another.
Tracebacks Errors and tracebacks are stored and can be investigated after the fact.
UUID Every task has an UUID (Universally Unique Identifier), which is the task id used to query task status and return value.
Retries Tasks can be retried if they fail, with configurable maximum number of retries, and delays between each retry.
Task Sets A Task set is a task consisting of several sub-tasks. You can find out how many, or if all of the sub-tasks has been executed, and even retrieve the results in order. Progress bars, anyone?
Made for Web You can query status and results via URLs, enabling the ability to poll task status using Ajax.
Error e-mails Can be configured to send e-mails to the administrators when tasks fails.
Supervised Pool workers are supervised and automatically replaced if they crash.

Documentation

The latest documentation with user guides, tutorials and API reference is hosted at Github.

Installation

You can install celery either via the Python Package Index (PyPI) or from source.

To install using pip,:

$ pip install celery

To install using easy_install,:

$ easy_install celery

Downloading and installing from source

Download the latest version of celery from http://pypi.python.org/pypi/celery/

You can install it by doing the following,:

$ tar xvfz celery-0.0.0.tar.gz
$ cd celery-0.0.0
$ python setup.py build
# python setup.py install # as root

Using the development version

You can clone the repository by doing the following:

$ git clone git://github.com/ask/celery.git
PKXDDn++.celery-1.0-archived/getting-started/index.html Getting Started — Celery 1.0.6 (stable) documentation

Celery 1.0.6 (stable) documentation

PKXDD‘33.celery-1.0-archived/_sources/configuration.txt============================ Configuration and defaults ============================ This document describes the configuration options available. If you're using celery in a Django project these settings should be defined in the project's ``settings.py`` file. In a regular Python environment, that is using the default loader, you must create the ``celeryconfig.py`` module and make sure it is available on the Python path. Example configuration file ========================== This is an example configuration file to get you started. It should contain all you need to run a basic celery set-up. .. code-block:: python CELERY_RESULT_BACKEND = "database" DATABASE_ENGINE = "sqlite3" DATABASE_NAME = "mydatabase.db" BROKER_HOST = "localhost" BROKER_PORT = 5672 BROKER_VHOST = "/" BROKER_USER = "guest" BROKER_PASSWORD = "guest" ## If you're doing mostly I/O you can have more processes, ## but if mostly spending CPU, try to keep it close to the ## number of CPUs on your machine. If not set, the number of CPUs/cores ## available will be used. # CELERYD_CONCURRENCY = 8 # CELERYD_LOG_FILE = "celeryd.log" # CELERYD_LOG_LEVEL = "INFO" Concurrency settings ==================== * CELERYD_CONCURRENCY The number of concurrent worker processes, executing tasks simultaneously. Defaults to the number of CPUs/cores available. * CELERYD_PREFETCH_MULTIPLIER How many messages to prefetch at a time multiplied by the number of concurrent processes. The default is 4 (four messages for each process). The default setting seems pretty good here. However, if you have very long running tasks waiting in the queue and you have to start the workers, note that the first worker to start will receive four times the number of messages initially. Thus the tasks may not be fairly balanced among the workers. Task result backend settings ============================ * CELERY_RESULT_BACKEND The backend used to store task results (tombstones). Can be one of the following: * database (default) Use a relational database supported by the Django ORM. * cache Use `memcached`_ to store the results. * mongodb Use `MongoDB`_ to store the results. * redis Use `Redis`_ to store the results. * tyrant Use `Tokyo Tyrant`_ to store the results. * amqp Send results back as AMQP messages (**WARNING** While very fast, you must make sure you only receive the result once. See :doc:`userguide/executing`). .. _`memcached`: http://memcached.org .. _`MongoDB`: http://mongodb.org .. _`Redis`: http://code.google.com/p/redis/ .. _`Tokyo Tyrant`: http://1978th.net/tokyotyrant/ Database backend settings ========================= Please see the Django ORM database settings documentation: http://docs.djangoproject.com/en/dev/ref/settings/#database-engine If you use this backend, make sure to initialize the database tables after configuration. When using celery with a Django project this means executing:: $ python manage.py syncdb When using celery in a regular Python environment you have to execute:: $ celeryinit Example configuration --------------------- .. code-block:: python CELERY_RESULT_BACKEND = "database" DATABASE_ENGINE = "mysql" DATABASE_USER = "myusername" DATABASE_PASSWORD = "mypassword" DATABASE_NAME = "mydatabase" DATABASE_HOST = "localhost" AMQP backend settings ===================== The AMQP backend does not have any settings yet. Example configuration --------------------- CELERY_RESULT_BACKEND = "amqp" Cache backend settings ====================== Please see the documentation for the Django cache framework settings: http://docs.djangoproject.com/en/dev/topics/cache/#memcached To use a custom cache backend for Celery, while using another for Django, you should use the ``CELERY_CACHE_BACKEND`` setting instead of the regular django ``CACHE_BACKEND`` setting. Example configuration --------------------- Using a single memcached server: .. code-block:: python CACHE_BACKEND = 'memcached://127.0.0.1:11211/' Using multiple memcached servers: .. code-block:: python CELERY_RESULT_BACKEND = "cache" CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11211/' Tokyo Tyrant backend settings ============================= **NOTE** The Tokyo Tyrant backend requires the :mod:`pytyrant` library: http://pypi.python.org/pypi/pytyrant/ This backend requires the following configuration directives to be set: * TT_HOST Hostname of the Tokyo Tyrant server. * TT_PORT The port the Tokyo Tyrant server is listening to. Example configuration --------------------- .. code-block:: python CELERY_RESULT_BACKEND = "tyrant" TT_HOST = "localhost" TT_PORT = 1978 Redis backend settings ====================== **NOTE** The Redis backend requires the :mod:`redis` library: http://pypi.python.org/pypi/redis/0.5.5 To install the redis package use ``pip`` or ``easy_install``:: $ pip install redis This backend requires the following configuration directives to be set: * REDIS_HOST Hostname of the Redis database server. e.g. ``"localhost"``. * REDIS_PORT Port to the Redis database server. e.g. ``6379``. Also, the following optional configuration directives are available: * REDIS_DB Name of the database to use. Default is ``celery_results``. * REDIS_PASSWORD Password used to connect to the database. Example configuration --------------------- .. code-block:: python CELERY_RESULT_BACKEND = "redis" REDIS_HOST = "localhost" REDIS_PORT = 6379 REDIS_DATABASE = "celery_results" REDIS_CONNECT_RETRY=True MongoDB backend settings ======================== **NOTE** The MongoDB backend requires the :mod:`pymongo` library: http://github.com/mongodb/mongo-python-driver/tree/master * CELERY_MONGODB_BACKEND_SETTINGS This is a dict supporting the following keys: * host Hostname of the MongoDB server. Defaults to "localhost". * port The port the MongoDB server is listening to. Defaults to 27017. * user User name to authenticate to the MongoDB server as (optional). * password Password to authenticate to the MongoDB server (optional). * database The database name to connect to. Defaults to "celery". * taskmeta_collection The collection name to store task meta data. Defaults to "celery_taskmeta". Example configuration --------------------- .. code-block:: python CELERY_RESULT_BACKEND = "mongodb" CELERY_MONGODB_BACKEND_SETTINGS = { "host": "192.168.1.100", "port": 30000, "database": "mydb", "taskmeta_collection": "my_taskmeta_collection", } Messaging settings ================== Routing ------- * CELERY_QUEUES The mapping of queues the worker consumes from. This is a dictionary of queue name/options. See :doc:`userguide/routing` for more information. The default is a queue/exchange/binding key of ``"celery"``, with exchange type ``direct``. You don't have to care about this unless you want custom routing facilities. * CELERY_DEFAULT_QUEUE The queue used by default, if no custom queue is specified. This queue must be listed in ``CELERY_QUEUES``. The default is: ``celery``. * CELERY_DEFAULT_EXCHANGE Name of the default exchange to use when no custom exchange is specified. The default is: ``celery``. * CELERY_DEFAULT_EXCHANGE_TYPE Default exchange type used when no custom exchange is specified. The default is: ``direct``. * CELERY_DEFAULT_ROUTING_KEY The default routing key used when sending tasks. The default is: ``celery``. Connection ---------- * CELERY_BROKER_CONNECTION_TIMEOUT The timeout in seconds before we give up establishing a connection to the AMQP server. Default is 4 seconds. * CELERY_BROKER_CONNECTION_RETRY Automatically try to re-establish the connection to the AMQP broker if it's lost. The time between retries is increased for each retry, and is not exhausted before ``CELERY_BROKER_CONNECTION_MAX_RETRIES`` is exceeded. This behavior is on by default. * CELERY_BROKER_CONNECTION_MAX_RETRIES Maximum number of retries before we give up re-establishing a connection to the AMQP broker. If this is set to ``0`` or ``None``, we will retry forever. Default is 100 retries. Task execution settings ======================= * CELERY_ALWAYS_EAGER If this is ``True``, all tasks will be executed locally by blocking until it is finished. ``apply_async`` and ``Task.delay`` will return a :class:`celery.result.EagerResult` which emulates the behavior of :class:`celery.result.AsyncResult`, except the result has already been evaluated. Tasks will never be sent to the queue, but executed locally instead. * CELERY_IGNORE_RESULT Whether to store the task return values or not (tombstones). If you still want to store errors, just not successful return values, you can set ``CELERY_STORE_ERRORS_EVEN_IF_IGNORED``. * CELERY_TASK_RESULT_EXPIRES Time (in seconds, or a :class:`datetime.timedelta` object) for when after stored task tombstones are deleted. **NOTE**: For the moment this only works with the database, cache and MongoDB * CELERY_TRACK_STARTED If ``True`` the task will report its status as "started" when the task is executed by a worker. The default value is ``False`` as the normal behaviour is to not report that level of granularity. Tasks are either pending, finished, or waiting to be retried. Having a "started" status can be useful for when there are long running tasks and there is a need to report which task is currently running. backends. * CELERY_TASK_SERIALIZER A string identifying the default serialization method to use. Can be ``pickle`` (default), ``json``, ``yaml``, or any custom serialization methods that have been registered with :mod:`carrot.serialization.registry`. Default is ``pickle``. * CELERY_DEFAULT_RATE_LIMIT The global default rate limit for tasks. This value is used for tasks that does not have a custom rate limit The default is no rate limit. * CELERY_DISABLE_RATE_LIMITS Disable all rate limits, even if tasks has explicit rate limits set. Worker: celeryd =============== * CELERY_IMPORTS A sequence of modules to import when the celery daemon starts. This is useful to add tasks if you are not using django or cannot use task auto-discovery. * CELERY_SEND_EVENTS Send events so the worker can be monitored by tools like ``celerymon``. * CELERY_SEND_TASK_ERROR_EMAILS If set to ``True``, errors in tasks will be sent to admins by e-mail. If unset, it will send the e-mails if ``settings.DEBUG`` is False. * CELERY_STORE_ERRORS_EVEN_IF_IGNORED If set, the worker stores all task errors in the result store even if ``Task.ignore_result`` is on. Logging ------- * CELERYD_LOG_FILE The default file name the worker daemon logs messages to, can be overridden using the `--logfile`` option to ``celeryd``. The default is ``None`` (``stderr``) Can also be set via the ``--logfile`` argument. * CELERYD_LOG_LEVEL Worker log level, can be any of ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``, ``CRITICAL``. Can also be set via the ``--loglevel`` argument. See the :mod:`logging` module for more information. * CELERYD_LOG_FORMAT The format to use for log messages. Can be overridden using the ``--loglevel`` option to ``celeryd``. Default is ``[%(asctime)s: %(levelname)s/%(processName)s] %(message)s`` See the Python :mod:`logging` module for more information about log formats. Periodic Task Server: celerybeat ================================ * CELERYBEAT_SCHEDULE_FILENAME Name of the file celerybeat stores the current schedule in. Can be a relative or absolute path, but be aware that the suffix ``.db`` will be appended to the file name. Can also be set via the ``--schedule`` argument. * CELERYBEAT_MAX_LOOP_INTERVAL The maximum number of seconds celerybeat can sleep between checking the schedule. Default is 300 seconds (5 minutes). * CELERYBEAT_LOG_FILE The default file name to log messages to, can be overridden using the `--logfile`` option. The default is ``None`` (``stderr``). Can also be set via the ``--logfile`` argument. * CELERYBEAT_LOG_LEVEL Logging level. Can be any of ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``, or ``CRITICAL``. Can also be set via the ``--loglevel`` argument. See the :mod:`logging` module for more information. Monitor Server: celerymon ========================= * CELERYMON_LOG_FILE The default file name to log messages to, can be overridden using the `--logfile`` option. The default is ``None`` (``stderr``) Can also be set via the ``--logfile`` argument. * CELERYMON_LOG_LEVEL Logging level. Can be any of ``DEBUG``, ``INFO``, ``WARNING``, ``ERROR``, or ``CRITICAL``. See the :mod:`logging` module for more information. PKXDDJ(ZZ*celery-1.0-archived/_sources/changelog.txt================ Change history ================ 1.0.6 [2010-06-30 09:57 A.M CEST] ================================= * RabbitMQ 1.8.0 has extended their exchange equivalence tests to include ``auto_delete`` and ``durable``. This broke the AMQP backend. If you've already used the AMQP backend this means you have to delete the previous definitions:: $ PYTHONPATH=. camqadm exchange.delete celeryresults or:: $ python manage.py camqadm exchange.delete celeryresults 1.0.5 [2010-06-01 02:36 P.M CEST] ================================= Critical -------- * SIGINT/Ctrl+C killed the pool, abrubtly terminating the currently executing tasks. Fixed by making the pool worker processes ignore :const:`SIGINT`. * Should not close the consumers before the pool is terminated, just cancel the consumers. Issue #122. http://github.com/ask/celery/issues/issue/122 * Now depends on :mod:`billiard` >= 0.3.1 * celeryd: Previously exceptions raised by worker components could stall startup, now it correctly logs the exceptions and shuts down. * celeryd: Prefetch counts was set too late. QoS is now set as early as possible, so celeryd can't slurp in all the messages at start-up. Changes ------- * :mod:`celery.contrib.abortable`: Abortable tasks. Tasks that defines steps of execution, the task can then be aborted after each step has completed. * :class:`~celery.events.EventDispatcher`: No longer creates AMQP channel if events are disabled * Added required RPM package names under ``[bdist_rpm]`` section, to support building RPMs from the sources using setup.py * Running unittests: :envvar:`NOSE_VERBOSE` environment var now enables verbose output from Nose. * :func:`celery.execute.apply`: Pass logfile/loglevel arguments as task kwargs. Issue #110 http://github.com/ask/celery/issues/issue/110 * celery.execute.apply: Should return exception, not :class:`~celery.datastructures.ExceptionInfo` on error. Issue #111 http://github.com/ask/celery/issues/issue/111 * Added new entries to the :doc:`FAQs `: * Should I use retry or acks_late? * Can I execute a task by name? 1.0.4 [2010-05-31 09:54 A.M CEST] ================================= * Changlog merged with 1.0.5 as the release was never announced. 1.0.3 [2010-05-15 03:00 P.M CEST] ================================= Important notes --------------- * Messages are now acked *just before* the task function is executed. This is the behavior we've wanted all along, but couldn't have because of limitations in the multiprocessing module. The previous behavior was not good, and the situation worsened with the release of 1.0.1, so this change will definitely improve reliability, performance and operations in general. For more information please see http://bit.ly/9hom6T * Database result backend: result now explicitly sets ``null=True`` as ``django-picklefield`` version 0.1.5 changed the default behavior right under our noses :( See: http://bit.ly/d5OwMr This means those who created their celery tables (via syncdb or celeryinit) with picklefield versions >= 0.1.5 has to alter their tables to allow the result field to be ``NULL`` manually. MySQL:: ALTER TABLE celery_taskmeta MODIFY result TEXT NULL * Removed ``Task.rate_limit_queue_type``, as it was not really useful and made it harder to refactor some parts. * Now depends on carrot >= 0.10.4 * Now depends on billiard >= 0.3.0 News ---- * AMQP backend: Added timeout support for ``result.get()`` / ``result.wait()``. * New task option: ``Task.acks_late`` (default: ``CELERY_ACKS_LATE``) Late ack means the task messages will be acknowledged **after** the task has been executed, not *just before*, which is the default behavior. Note that this means the tasks may be executed twice if the worker crashes in the middle of their execution. Not acceptable for most applications, but desirable for others. * Added crontab-like scheduling to periodic tasks. Like a cron job, you can specify units of time of when you would like the task to execute. While not a full implementation of cron's features, it should provide a fair degree of common scheduling needs. You can specify a minute (0-59), an hour (0-23), and/or a day of the week (0-6 where 0 is Sunday, or by names: sun, mon, tue, wed, thu, fri, sat). Examples: .. code-block:: python from celery.task.schedules import crontab from celery.decorators import periodic_task @periodic_task(run_every=crontab(hour=7, minute=30)) def every_morning(): print("Runs every morning at 7:30a.m") @periodic_task(run_every=crontab(hour=7, minute=30, day_of_week="mon")) def every_monday_morning(): print("Run every monday morning at 7:30a.m") @periodic_task(run_every=crontab(minutes=30)) def every_hour(): print("Runs every hour on the clock. e.g. 1:30, 2:30, 3:30 etc.") Note that this a late addition. While we have unittests, due to the nature of this feature we haven't been able to completely test this in practice, so consider this experimental. * ``TaskPool.apply_async``: Now supports the ``accept_callback`` argument. * ``apply_async``: Now raises :exc:`ValueError` if task args is not a list, or kwargs is not a tuple (http://github.com/ask/celery/issues/issue/95). * ``Task.max_retries`` can now be ``None``, which means it will retry forever. * Celerybeat: Now reuses the same connection when publishing large sets of tasks. * Modified the task locking example in the documentation to use ``cache.add`` for atomic locking. * Added experimental support for a *started* status on tasks. If ``Task.track_started`` is enabled the task will report its status as "started" when the task is executed by a worker. The default value is ``False`` as the normal behaviour is to not report that level of granularity. Tasks are either pending, finished, or waiting to be retried. Having a "started" status can be useful for when there are long running tasks and there is a need to report which task is currently running. The global default can be overridden by the ``CELERY_TRACK_STARTED`` setting. * User Guide: New section ``Tips and Best Practices``. Contributions welcome! Remote control commands ----------------------- * Remote control commands can now send replies back to the caller. Existing commands has been improved to send replies, and the client interface in ``celery.task.control`` has new keyword arguments: ``reply``, ``timeout`` and ``limit``. Where reply means it will wait for replies, timeout is the time in seconds to stop waiting for replies, and limit is the maximum number of replies to get. By default, it will wait for as many replies as possible for one second. * rate_limit(task_name, destination=all, reply=False, timeout=1, limit=0) Worker returns ``{"ok": message}`` on success, or ``{"failure": message}`` on failure. >>> from celery.task.control import rate_limit >>> rate_limit("tasks.add", "10/s", reply=True) [{'worker1': {'ok': 'new rate limit set successfully'}}, {'worker2': {'ok': 'new rate limit set successfully'}}] * ping(destination=all, reply=False, timeout=1, limit=0) Worker returns the simple message ``"pong"``. >>> from celery.task.control import ping >>> ping(reply=True) [{'worker1': 'pong'}, {'worker2': 'pong'}, * revoke(destination=all, reply=False, timeout=1, limit=0) Worker simply returns ``True``. >>> from celery.task.control import revoke >>> revoke("419e46eb-cf6a-4271-86a8-442b7124132c", reply=True) [{'worker1': True}, {'worker2'; True}] * You can now add your own remote control commands! Remote control commands are functions registered in the command registry. Registering a command is done using :meth:`celery.worker.control.Panel.register`: .. code-block:: python from celery.task.control import Panel @Panel.register def reset_broker_connection(panel, **kwargs): panel.listener.reset_connection() return {"ok": "connection re-established"} With this module imported in the worker, you can launch the command using ``celery.task.control.broadcast``:: >>> from celery.task.control import broadcast >>> broadcast("reset_broker_connection", reply=True) [{'worker1': {'ok': 'connection re-established'}, {'worker2': {'ok': 'connection re-established'}}] **TIP** You can choose the worker(s) to receive the command by using the ``destination`` argument:: >>> broadcast("reset_broker_connection", destination=["worker1"]) [{'worker1': {'ok': 'connection re-established'}] * New remote control command: ``dump_reserved`` Dumps tasks reserved by the worker, waiting to be executed:: >>> from celery.task.control import broadcast >>> broadcast("dump_reserved", reply=True) [{'myworker1': []}] * New remote control command: ``dump_schedule`` Dumps the workers currently registered ETA schedule. These are tasks with an ``eta`` (or ``countdown``) argument waiting to be executed by the worker. >>> from celery.task.control import broadcast >>> broadcast("dump_schedule", reply=True) [{'w1': []}, {'w3': []}, {'w2': ['0. 2010-05-12 11:06:00 pri0 ,)", kwargs:"{'page': 2}"}>']}, {'w4': ['0. 2010-05-12 11:00:00 pri0 ,)", kwargs:"{\'page\': 1}"}>', '1. 2010-05-12 11:12:00 pri0 ,)", kwargs:"{\'page\': 3}"}>']}] Fixes ----- * Mediator thread no longer blocks for more than 1 second. With rate limits enabled and when there was a lot of remaining time, the mediator thread could block shutdown (and potentially block other jobs from coming in). * Remote rate limits was not properly applied (http://github.com/ask/celery/issues/issue/98) * Now handles exceptions with unicode messages correctly in ``TaskWrapper.on_failure``. * Database backend: ``TaskMeta.result``: default value should be ``None`` not empty string. 1.0.2 [2010-03-31 12:50 P.M CET] ================================ * Deprecated: ``CELERY_BACKEND``, please use ``CELERY_RESULT_BACKEND`` instead. * We now use a custom logger in tasks. This logger supports task magic keyword arguments in formats. The default format for tasks (``CELERYD_TASK_LOG_FORMAT``) now includes the id and the name of tasks so the origin of task log messages can easily be traced. Example output:: [2010-03-25 13:11:20,317: INFO/PoolWorker-1] [tasks.add(a6e1c5ad-60d9-42a0-8b24-9e39363125a4)] Hello from add To revert to the previous behavior you can set:: CELERYD_TASK_LOG_FORMAT = """ [%(asctime)s: %(levelname)s/%(processName)s] %(message)s """.strip() * Unittests: Don't disable the django test database teardown, instead fixed the underlying issue which was caused by modifications to the ``DATABASE_NAME`` setting (http://github.com/ask/celery/issues/82). * Django Loader: New config ``CELERY_DB_REUSE_MAX`` (max number of tasks to reuse the same database connection) The default is to use a new connection for every task. We would very much like to reuse the connection, but a safe number of reuses is not known, and we don't have any way to handle the errors that might happen, which may even be database dependent. See: http://bit.ly/94fwdd * celeryd: The worker components are now configurable: ``CELERYD_POOL``, ``CELERYD_LISTENER``, ``CELERYD_MEDIATOR``, and ``CELERYD_ETA_SCHEDULER``. The default configuration is as follows: .. code-block:: python CELERYD_POOL = "celery.worker.pool.TaskPool" CELERYD_MEDIATOR = "celery.worker.controllers.Mediator" CELERYD_ETA_SCHEDULER = "celery.worker.controllers.ScheduleController" CELERYD_LISTENER = "celery.worker.listener.CarrotListener" The ``CELERYD_POOL`` setting makes it easy to swap out the multiprocessing pool with a threaded pool, or how about a twisted/eventlet pool? Consider the competition for the first pool plug-in started! * Debian init scripts: Use ``-a`` not ``&&`` (http://github.com/ask/celery/issues/82). * Debian init scripts: Now always preserves ``$CELERYD_OPTS`` from the ``/etc/default/celeryd`` and ``/etc/default/celerybeat``. * celery.beat.Scheduler: Fixed a bug where the schedule was not properly flushed to disk if the schedule had not been properly initialized. * celerybeat: Now syncs the schedule to disk when receiving the ``SIGTERM`` and ``SIGINT`` signals. * Control commands: Make sure keywords arguments are not in unicode. * ETA scheduler: Was missing a logger object, so the scheduler crashed when trying to log that a task had been revoked. * management.commands.camqadm: Fixed typo ``camqpadm`` -> ``camqadm`` (http://github.com/ask/celery/issues/83). * PeriodicTask.delta_resolution: Was not working for days and hours, now fixed by rounding to the nearest day/hour. * Fixed a potential infinite loop in ``BaseAsyncResult.__eq__``, although there is no evidence that it has ever been triggered. * celeryd: Now handles messages with encoding problems by acking them and emitting an error message. 1.0.1 [2010-02-24 07:05 P.M CET] ================================ * Tasks are now acknowledged early instead of late. This is done because messages can only be acked within the same connection channel, so if the connection is lost we would have to refetch the message again to acknowledge it. This might or might not affect you, but mostly those running tasks with a really long execution time are affected, as all tasks that has made it all the way into the pool needs to be executed before the worker can safely terminate (this is at most the number of pool workers, multiplied by the ``CELERYD_PREFETCH_MULTIPLIER`` setting.) We multiply the prefetch count by default to increase the performance at times with bursts of tasks with a short execution time. If this doesn't apply to your use case, you should be able to set the prefetch multiplier to zero, without sacrificing performance. Please note that a patch to :mod:`multiprocessing` is currently being worked on, this patch would enable us to use a better solution, and is scheduled for inclusion in the ``1.2.0`` release. * celeryd now shutdowns cleanly when receving the ``TERM`` signal. * celeryd now does a cold shutdown if the ``INT`` signal is received (Ctrl+C), this means it tries to terminate as soon as possible. * Caching of results now moved to the base backend classes, so no need to implement this functionality in the base classes. * Caches are now also limited in size, so their memory usage doesn't grow out of control. You can set the maximum number of results the cache can hold using the ``CELERY_MAX_CACHED_RESULTS`` setting (the default is five thousand results). In addition, you can refetch already retrieved results using ``backend.reload_task_result`` + ``backend.reload_taskset_result`` (that's for those who want to send results incrementally). * ``celeryd`` now works on Windows again. Note that if running with Django, you can't use ``project.settings`` as the settings module name, but the following should work:: $ python manage.py celeryd --settings=settings * Execution: ``.messaging.TaskPublisher.send_task`` now incorporates all the functionality apply_async previously did. Like converting countdowns to eta, so :func:`celery.execute.apply_async` is now simply a convenient front-end to :meth:`celery.messaging.TaskPublisher.send_task`, using the task classes default options. Also :func:`celery.execute.send_task` has been introduced, which can apply tasks using just the task name (useful if the client does not have the destination task in its task registry). Example: >>> from celery.execute import send_task >>> result = send_task("celery.ping", args=[], kwargs={}) >>> result.get() 'pong' * ``camqadm``: This is a new utility for command line access to the AMQP API. Excellent for deleting queues/bindings/exchanges, experimentation and testing:: $ camqadm 1> help Gives an interactive shell, type ``help`` for a list of commands. When using Django, use the management command instead:: $ python manage.py camqadm 1> help * Redis result backend: To conform to recent Redis API changes, the following settings has been deprecated: * ``REDIS_TIMEOUT`` * ``REDIS_CONNECT_RETRY`` These will emit a ``DeprecationWarning`` if used. A ``REDIS_PASSWORD`` setting has been added, so you can use the new simple authentication mechanism in Redis. * The redis result backend no longer calls ``SAVE`` when disconnecting, as this is apparently better handled by Redis itself. * If ``settings.DEBUG`` is on, celeryd now warns about the possible memory leak it can result in. * The ETA scheduler now sleeps at most two seconds between iterations. * The ETA scheduler now deletes any revoked tasks it might encounter. As revokes are not yet persistent, this is done to make sure the task is revoked even though it's currently being hold because its eta is e.g. a week into the future. * The ``task_id`` argument is now respected even if the task is executed eagerly (either using apply, or ``CELERY_ALWAYS_EAGER``). * The internal queues are now cleared if the connection is reset. * New magic keyword argument: ``delivery_info``. Used by retry() to resend the task to its original destination using the same exchange/routing_key. * Events: Fields was not passed by ``.send()`` (fixes the uuid keyerrors in celerymon) * Added ``--schedule``/``-s`` option to celeryd, so it is possible to specify a custom schedule filename when using an embedded celerybeat server (the ``-B``/``--beat``) option. * Better Python 2.4 compatibility. The test suite now passes. * task decorators: Now preserve docstring as ``cls.__doc__``, (was previously copied to ``cls.run.__doc__``) * The ``testproj`` directory has been renamed to ``tests`` and we're now using ``nose`` + ``django-nose`` for test discovery, and ``unittest2`` for test cases. * New pip requirements files available in ``contrib/requirements``. * TaskPublisher: Declarations are now done once (per process). * Added ``Task.delivery_mode`` and the ``CELERY_DEFAULT_DELIVERY_MODE`` setting. These can be used to mark messages non-persistent (i.e. so they are lost if the broker is restarted). * Now have our own ``ImproperlyConfigured`` exception, instead of using the Django one. * Improvements to the debian init scripts: Shows an error if the program is not executeable. Does not modify ``CELERYD`` when using django with virtualenv. 1.0.0 [2010-02-10 04:00 P.M CET] ================================ BACKWARD INCOMPATIBLE CHANGES ----------------------------- * Celery does not support detaching anymore, so you have to use the tools available on your platform, or something like supervisord to make celeryd/celerybeat/celerymon into background processes. We've had too many problems with celeryd daemonizing itself, so it was decided it has to be removed. Example startup scripts has been added to ``contrib/``: * Debian, Ubuntu, (start-stop-daemon) ``contrib/debian/init.d/celeryd`` ``contrib/debian/init.d/celerybeat`` * Mac OS X launchd ``contrib/mac/org.celeryq.celeryd.plist`` ``contrib/mac/org.celeryq.celerybeat.plist`` ``contrib/mac/org.celeryq.celerymon.plist`` * Supervisord (http://supervisord.org) ``contrib/supervisord/supervisord.conf`` In addition to ``--detach``, the following program arguments has been removed: ``--uid``, ``--gid``, ``--workdir``, ``--chroot``, ``--pidfile``, ``--umask``. All good daemonization tools should support equivalent functionality, so don't worry. Also the following configuration keys has been removed: ``CELERYD_PID_FILE``, ``CELERYBEAT_PID_FILE``, ``CELERYMON_PID_FILE``. * Default celeryd loglevel is now ``WARN``, to enable the previous log level start celeryd with ``--loglevel=INFO``. * Tasks are automatically registered. This means you no longer have to register your tasks manually. You don't have to change your old code right away, as it doesn't matter if a task is registered twice. If you don't want your task to be automatically registered you can set the ``abstract`` attribute .. code-block:: python class MyTask(Task): abstract = True By using ``abstract`` only tasks subclassing this task will be automatically registered (this works like the Django ORM). If you don't want subclasses to be registered either, you can set the ``autoregister`` attribute to ``False``. Incidentally, this change also fixes the problems with automatic name assignment and relative imports. So you also don't have to specify a task name anymore if you use relative imports. * You can no longer use regular functions as tasks. This change was added because it makes the internals a lot more clean and simple. However, you can now turn functions into tasks by using the ``@task`` decorator: .. code-block:: python from celery.decorators import task @task def add(x, y): return x + y See the User Guide: :doc:`userguide/tasks` for more information. * The periodic task system has been rewritten to a centralized solution. This means ``celeryd`` no longer schedules periodic tasks by default, but a new daemon has been introduced: ``celerybeat``. To launch the periodic task scheduler you have to run celerybeat:: $ celerybeat Make sure this is running on one server only, if you run it twice, all periodic tasks will also be executed twice. If you only have one worker server you can embed it into celeryd like this:: $ celeryd --beat # Embed celerybeat in celeryd. * The supervisor has been removed. This means the ``-S`` and ``--supervised`` options to ``celeryd`` is no longer supported. Please use something like http://supervisord.org instead. * ``TaskSet.join`` has been removed, use ``TaskSetResult.join`` instead. * The task status ``"DONE"`` has been renamed to `"SUCCESS"`. * ``AsyncResult.is_done`` has been removed, use ``AsyncResult.successful`` instead. * The worker no longer stores errors if ``Task.ignore_result`` is set, to revert to the previous behaviour set ``CELERY_STORE_ERRORS_EVEN_IF_IGNORED`` to ``True``. * The staticstics functionality has been removed in favor of events, so the ``-S`` and ``--statistics`` switches has been removed. * The module ``celery.task.strategy`` has been removed. * ``celery.discovery`` has been removed, and it's ``autodiscover`` function is now in ``celery.loaders.djangoapp``. Reason: Internal API. * ``CELERY_LOADER`` now needs loader class name in addition to module name, E.g. where you previously had: ``"celery.loaders.default"``, you now need ``"celery.loaders.default.Loader"``, using the previous syntax will result in a DeprecationWarning. * Detecting the loader is now lazy, and so is not done when importing ``celery.loaders``. To make this happen ``celery.loaders.settings`` has been renamed to ``load_settings`` and is now a function returning the settings object. ``celery.loaders.current_loader`` is now also a function, returning the current loader. So:: loader = current_loader needs to be changed to:: loader = current_loader() DEPRECATIONS ------------ * The following configuration variables has been renamed and will be deprecated in v1.2: * CELERYD_DAEMON_LOG_FORMAT -> CELERYD_LOG_FORMAT * CELERYD_DAEMON_LOG_LEVEL -> CELERYD_LOG_LEVEL * CELERY_AMQP_CONNECTION_TIMEOUT -> CELERY_BROKER_CONNECTION_TIMEOUT * CELERY_AMQP_CONNECTION_RETRY -> CELERY_BROKER_CONNECTION_RETRY * CELERY_AMQP_CONNECTION_MAX_RETRIES -> CELERY_BROKER_CONNECTION_MAX_RETRIES * SEND_CELERY_TASK_ERROR_EMAILS -> CELERY_SEND_TASK_ERROR_EMAILS * The public api names in celery.conf has also changed to a consistent naming scheme. * We now support consuming from an arbitrary number of queues. To do this we had to rename the configuration syntax. If you use any of the custom AMQP routing options (queue/exchange/routing_key, etc), you should read the new FAQ entry: http://bit.ly/aiWoH. The previous syntax is deprecated and scheduled for removal in v1.2. * ``TaskSet.run`` has been renamed to ``TaskSet.apply_async``. ``TaskSet.run`` has now been deprecated, and is scheduled for removal in v1.2. NEWS ---- * Rate limiting support (per task type, or globally). * New periodic task system. * Automatic registration. * New cool task decorator syntax. * celeryd now sends events if enabled with the ``-E`` argument. Excellent for monitoring tools, one is already in the making (http://github.com/ask/celerymon). Current events include: worker-heartbeat, task-[received/succeeded/failed/retried], worker-online, worker-offline. * You can now delete (revoke) tasks that has already been applied. * You can now set the hostname celeryd identifies as using the ``--hostname`` argument. * Cache backend now respects ``CELERY_TASK_RESULT_EXPIRES``. * Message format has been standardized and now uses ISO-8601 format for dates instead of datetime. * ``celeryd`` now responds to the ``HUP`` signal by restarting itself. * Periodic tasks are now scheduled on the clock. I.e. ``timedelta(hours=1)`` means every hour at :00 minutes, not every hour from the server starts. To revert to the previous behaviour you can set ``PeriodicTask.relative = True``. * Now supports passing execute options to a TaskSets list of args, e.g.: >>> ts = TaskSet(add, [([2, 2], {}, {"countdown": 1}), ... ([4, 4], {}, {"countdown": 2}), ... ([8, 8], {}, {"countdown": 3})]) >>> ts.run() * Got a 3x performance gain by setting the prefetch count to four times the concurrency, (from an average task round-trip of 0.1s to 0.03s!). A new setting has been added: ``CELERYD_PREFETCH_MULTIPLIER``, which is set to ``4`` by default. * Improved support for webhook tasks. ``celery.task.rest`` is now deprecated, replaced with the new and shiny :mod:`celery.task.http`. With more reflective names, sensible interface, and it's possible to override the methods used to perform HTTP requests. * The results of tasksets are now cached by storing it in the result backend. CHANGES ------- * Now depends on carrot >= 0.8.1 * New dependencies: billiard, python-dateutil, django-picklefield * No longer depends on python-daemon * The ``uuid`` distribution is added as a dependency when running Python 2.4. * Now remembers the previously detected loader by keeping it in the ``CELERY_LOADER`` environment variable. This may help on windows where fork emulation is used. * ETA no longer sends datetime objects, but uses ISO 8601 date format in a string for better compatibility with other platforms. * No longer sends error mails for retried tasks. * Task can now override the backend used to store results. * Refactored the ExecuteWrapper, ``apply`` and ``CELERY_ALWAYS_EAGER`` now also executes the task callbacks and signals. * Now using a proper scheduler for the tasks with an ETA. This means waiting eta tasks are sorted by time, so we don't have to poll the whole list all the time. * Now also imports modules listed in CELERY_IMPORTS when running with django (as documented). * Loglevel for stdout/stderr changed from INFO to ERROR * ImportErrors are now properly propogated when autodiscovering tasks. * You can now use ``celery.messaging.establish_connection`` to establish a connection to the broker. * When running as a separate service the periodic task scheduler does some smart moves to not poll too regularly. If you need faster poll times you can lower the value of ``CELERYBEAT_MAX_LOOP_INTERVAL``. * You can now change periodic task intervals at runtime, by making ``run_every`` a property, or subclassing ``PeriodicTask.is_due``. * The worker now supports control commands enabled through the use of a broadcast queue, you can remotely revoke tasks or set the rate limit for a task type. See :mod:`celery.task.control`. * The services now sets informative process names (as shown in ``ps`` listings) if the :mod:`setproctitle` module is installed. * :exc:`celery.exceptions.NotRegistered` now inherits from :exc:`KeyError`, and ``TaskRegistry.__getitem__``+``pop`` raises ``NotRegistered`` instead * You can set the loader via the ``CELERY_LOADER`` environment variable. * You can now set ``CELERY_IGNORE_RESULT`` to ignore task results by default (if enabled, tasks doesn't save results or errors to the backend used). * celeryd now correctly handles malformed messages by throwing away and acknowledging the message, instead of crashing. BUGS ---- * Fixed a race condition that could happen while storing task results in the database. DOCUMENTATION ------------- * Reference now split into two sections; API reference and internal module reference. 0.8.4 [2010-02-05 01:52 P.M CEST] --------------------------------- * Now emits a warning if the --detach argument is used. --detach should not be used anymore, as it has several not easily fixed bugs related to it. Instead, use something like start-stop-daemon, supervisord or launchd (os x). * Make sure logger class is process aware, even if running Python >= 2.6. * Error e-mails are not sent anymore when the task is retried. 0.8.3 [2009-12-22 09:43 A.M CEST] --------------------------------- * Fixed a possible race condition that could happen when storing/querying task results using the the database backend. * Now has console script entry points in the setup.py file, so tools like buildout will correctly install the programs celerybin and celeryinit. 0.8.2 [2009-11-20 03:40 P.M CEST] --------------------------------- * QOS Prefetch count was not applied properly, as it was set for every message received (which apparently behaves like, "receive one more"), instead of only set when our wanted value cahnged. 0.8.1 [2009-11-16 05:21 P.M CEST] ================================= VERY IMPORTANT NOTE ------------------- This release (with carrot 0.8.0) enables AMQP QoS (quality of service), which means the workers will only receive as many messages as it can handle at a time. As with any release, you should test this version upgrade on your development servers before rolling it out to production! IMPORTANT CHANGES ----------------- * If you're using Python < 2.6 and you use the multiprocessing backport, then multiprocessing version 2.6.2.1 is required. * All AMQP_* settings has been renamed to BROKER_*, and in addition AMQP_SERVER has been renamed to BROKER_HOST, so before where you had:: AMQP_SERVER = "localhost" AMQP_PORT = 5678 AMQP_USER = "myuser" AMQP_PASSWORD = "mypassword" AMQP_VHOST = "celery" You need to change that to:: BROKER_HOST = "localhost" BROKER_PORT = 5678 BROKER_USER = "myuser" BROKER_PASSWORD = "mypassword" BROKER_VHOST = "celery" * Custom carrot backends now need to include the backend class name, so before where you had:: CARROT_BACKEND = "mycustom.backend.module" you need to change it to:: CARROT_BACKEND = "mycustom.backend.module.Backend" where ``Backend`` is the class name. This is probably ``"Backend"``, as that was the previously implied name. * New version requirement for carrot: 0.8.0 CHANGES ------- * Incorporated the multiprocessing backport patch that fixes the ``processName`` error. * Ignore the result of PeriodicTask's by default. * Added a Redis result store backend * Allow /etc/default/celeryd to define additional options for the celeryd init script. * MongoDB periodic tasks issue when using different time than UTC fixed. * Windows specific: Negate test for available os.fork (thanks miracle2k) * Now tried to handle broken PID files. * Added a Django test runner to contrib that sets CELERY_ALWAYS_EAGER = True for testing with the database backend * Added a CELERY_CACHE_BACKEND setting for using something other than the django-global cache backend. * Use custom implementation of functools.partial (curry) for Python 2.4 support (Probably still problems with running on 2.4, but it will eventually be supported) * Prepare exception to pickle when saving RETRY status for all backends. * SQLite no concurrency limit should only be effective if the db backend is used. 0.8.0 [2009-09-22 03:06 P.M CEST] ================================= BACKWARD INCOMPATIBLE CHANGES ----------------------------- * Add traceback to result value on failure. **NOTE** If you use the database backend you have to re-create the database table ``celery_taskmeta``. Contact the mailinglist or IRC channel listed in README for help doing this. * Database tables are now only created if the database backend is used, so if you change back to the database backend at some point, be sure to initialize tables (django: ``syncdb``, python: ``celeryinit``). (Note: This is only the case when using Django 1.1 or higher) * Now depends on ``carrot`` version 0.6.0. * Now depends on python-daemon 1.4.8 IMPORTANT CHANGES ----------------- * Celery can now be used in pure Python (outside of a Django project). This means celery is no longer Django specific. For more information see the FAQ entry `Can I use celery without Django?`_. .. _`Can I use celery without Django?`: http://ask.github.com/celery/faq.html#can-i-use-celery-without-django * Celery now supports task retries. See `Cookbook: Retrying Tasks`_ for more information. .. _`Cookbook: Retrying Tasks`: http://ask.github.com/celery/cookbook/task-retries.html * We now have an AMQP result store backend. It uses messages to publish task return value and status. And it's incredibly fast! See http://github.com/ask/celery/issues/closed#issue/6 for more info! * AMQP QoS (prefetch count) implemented: This to not receive more messages than we can handle. * Now redirects stdout/stderr to the celeryd logfile when detached * Now uses ``inspect.getargspec`` to only pass default arguments the task supports. * Add Task.on_success, .on_retry, .on_failure handlers See :meth:`celery.task.base.Task.on_success`, :meth:`celery.task.base.Task.on_retry`, :meth:`celery.task.base.Task.on_failure`, * ``celery.utils.gen_unique_id``: Workaround for http://bugs.python.org/issue4607 * You can now customize what happens at worker start, at process init, etc by creating your own loaders. (see :mod:`celery.loaders.default`, :mod:`celery.loaders.djangoapp`, :mod:`celery.loaders`.) * Support for multiple AMQP exchanges and queues. This feature misses documentation and tests, so anyone interested is encouraged to improve this situation. * celeryd now survives a restart of the AMQP server! Automatically re-establish AMQP broker connection if it's lost. New settings: * AMQP_CONNECTION_RETRY Set to ``True`` to enable connection retries. * AMQP_CONNECTION_MAX_RETRIES. Maximum number of restarts before we give up. Default: ``100``. NEWS ---- * Fix an incompatibility between python-daemon and multiprocessing, which resulted in the ``[Errno 10] No child processes`` problem when detaching. * Fixed a possible DjangoUnicodeDecodeError being raised when saving pickled data to Django's memcached cache backend. * Better Windows compatibility. * New version of the pickled field (taken from http://www.djangosnippets.org/snippets/513/) * New signals introduced: ``task_sent``, ``task_prerun`` and ``task_postrun``, see :mod:`celery.signals` for more information. * ``TaskSetResult.join`` caused ``TypeError`` when ``timeout=None``. Thanks Jerzy Kozera. Closes #31 * ``views.apply`` should return ``HttpResponse`` instance. Thanks to Jerzy Kozera. Closes #32 * ``PeriodicTask``: Save conversion of ``run_every`` from ``int`` to ``timedelta`` to the class attribute instead of on the instance. * Exceptions has been moved to ``celery.exceptions``, but are still available in the previous module. * Try to rollback transaction and retry saving result if an error happens while setting task status with the database backend. * jail() refactored into :class:`celery.execute.ExecuteWrapper`. * ``views.apply`` now correctly sets mimetype to "application/json" * ``views.task_status`` now returns exception if status is RETRY * ``views.task_status`` now returns traceback if status is "FAILURE" or "RETRY" * Documented default task arguments. * Add a sensible __repr__ to ExceptionInfo for easier debugging * Fix documentation typo ``.. import map`` -> ``.. import dmap``. Thanks mikedizon 0.6.0 [2009-08-07 06:54 A.M CET] ================================ IMPORTANT CHANGES ----------------- * Fixed a bug where tasks raising unpickleable exceptions crashed pool workers. So if you've had pool workers mysteriously dissapearing, or problems with celeryd stopping working, this has been fixed in this version. * Fixed a race condition with periodic tasks. * The task pool is now supervised, so if a pool worker crashes, goes away or stops responding, it is automatically replaced with a new one. * Task.name is now automatically generated out of class module+name, e.g. ``"djangotwitter.tasks.UpdateStatusesTask"``. Very convenient. No idea why we didn't do this before. Some documentation is updated to not manually specify a task name. NEWS ---- * Tested with Django 1.1 * New Tutorial: Creating a click counter using carrot and celery * Database entries for periodic tasks are now created at ``celeryd`` startup instead of for each check (which has been a forgotten TODO/XXX in the code for a long time) * New settings variable: ``CELERY_TASK_RESULT_EXPIRES`` Time (in seconds, or a `datetime.timedelta` object) for when after stored task results are deleted. For the moment this only works for the database backend. * ``celeryd`` now emits a debug log message for which periodic tasks has been launched. * The periodic task table is now locked for reading while getting periodic task status. (MySQL only so far, seeking patches for other engines) * A lot more debugging information is now available by turning on the ``DEBUG`` loglevel (``--loglevel=DEBUG``). * Functions/methods with a timeout argument now works correctly. * New: ``celery.strategy.even_time_distribution``: With an iterator yielding task args, kwargs tuples, evenly distribute the processing of its tasks throughout the time window available. * Log message ``Unknown task ignored...`` now has loglevel ``ERROR`` * Log message ``"Got task from broker"`` is now emitted for all tasks, even if the task has an ETA (estimated time of arrival). Also the message now includes the ETA for the task (if any). * Acknowledgement now happens in the pool callback. Can't do ack in the job target, as it's not pickleable (can't share AMQP connection, etc)). * Added note about .delay hanging in README * Tests now passing in Django 1.1 * Fixed discovery to make sure app is in INSTALLED_APPS * Previously overrided pool behaviour (process reap, wait until pool worker available, etc.) is now handled by ``multiprocessing.Pool`` itself. * Convert statistics data to unicode for use as kwargs. Thanks Lucy! 0.4.1 [2009-07-02 01:42 P.M CET] ================================ * Fixed a bug with parsing the message options (``mandatory``, ``routing_key``, ``priority``, ``immediate``) 0.4.0 [2009-07-01 07:29 P.M CET] ================================ * Adds eager execution. ``celery.execute.apply``|``Task.apply`` executes the function blocking until the task is done, for API compatiblity it returns an ``celery.result.EagerResult`` instance. You can configure celery to always run tasks locally by setting the ``CELERY_ALWAYS_EAGER`` setting to ``True``. * Now depends on ``anyjson``. * 99% coverage using python ``coverage`` 3.0. 0.3.20 [2009-06-25 08:42 P.M CET] ================================= * New arguments to ``apply_async`` (the advanced version of ``delay_task``), ``countdown`` and ``eta``; >>> # Run 10 seconds into the future. >>> res = apply_async(MyTask, countdown=10); >>> # Run 1 day from now >>> res = apply_async(MyTask, eta=datetime.now() + ... timedelta(days=1) * Now unlinks the pidfile if it's stale. * Lots of more tests. * Now compatible with carrot >= 0.5.0. * **IMPORTANT** The ``subtask_ids`` attribute on the ``TaskSetResult`` instance has been removed. To get this information instead use: >>> subtask_ids = [subtask.task_id for subtask in ts_res.subtasks] * ``Taskset.run()`` now respects extra message options from the task class. * Task: Add attribute ``ignore_result``: Don't store the status and return value. This means you can't use the ``celery.result.AsyncResult`` to check if the task is done, or get its return value. Only use if you need the performance and is able live without these features. Any exceptions raised will store the return value/status as usual. * Task: Add attribute ``disable_error_emails`` to disable sending error emails for that task. * Should now work on Windows (although running in the background won't work, so using the ``--detach`` argument results in an exception being raised.) * Added support for statistics for profiling and monitoring. To start sending statistics start ``celeryd`` with the ``--statistics`` option. Then after a while you can dump the results by running ``python manage.py celerystats``. See ``celery.monitoring`` for more information. * The celery daemon can now be supervised (i.e it is automatically restarted if it crashes). To use this start celeryd with the ``--supervised`` option (or alternatively ``-S``). * views.apply: View applying a task. Example:: http://e.com/celery/apply/task_name/arg1/arg2//?kwarg1=a&kwarg2=b **NOTE** Use with caution, preferably not make this publicly accessible without ensuring your code is safe! * Refactored ``celery.task``. It's now split into three modules: * celery.task Contains ``apply_async``, ``delay_task``, ``discard_all``, and task shortcuts, plus imports objects from ``celery.task.base`` and ``celery.task.builtins`` * celery.task.base Contains task base classes: ``Task``, ``PeriodicTask``, ``TaskSet``, ``AsynchronousMapTask``, ``ExecuteRemoteTask``. * celery.task.builtins Built-in tasks: ``PingTask``, ``DeleteExpiredTaskMetaTask``. 0.3.7 [2008-06-16 11:41 P.M CET] -------------------------------- * **IMPORTANT** Now uses AMQP's ``basic.consume`` instead of ``basic.get``. This means we're no longer polling the broker for new messages. * **IMPORTANT** Default concurrency limit is now set to the number of CPUs available on the system. * **IMPORTANT** ``tasks.register``: Renamed ``task_name`` argument to ``name``, so >>> tasks.register(func, task_name="mytask") has to be replaced with: >>> tasks.register(func, name="mytask") * The daemon now correctly runs if the pidlock is stale. * Now compatible with carrot 0.4.5 * Default AMQP connnection timeout is now 4 seconds. * ``AsyncResult.read()`` was always returning ``True``. * Only use README as long_description if the file exists so easy_install doesn't break. * ``celery.view``: JSON responses now properly set its mime-type. * ``apply_async`` now has a ``connection`` keyword argument so you can re-use the same AMQP connection if you want to execute more than one task. * Handle failures in task_status view such that it won't throw 500s. * Fixed typo ``AMQP_SERVER`` in documentation to ``AMQP_HOST``. * Worker exception e-mails sent to admins now works properly. * No longer depends on ``django``, so installing ``celery`` won't affect the preferred Django version installed. * Now works with PostgreSQL (psycopg2) again by registering the ``PickledObject`` field. * ``celeryd``: Added ``--detach`` option as an alias to ``--daemon``, and it's the term used in the documentation from now on. * Make sure the pool and periodic task worker thread is terminated properly at exit. (So ``Ctrl-C`` works again). * Now depends on ``python-daemon``. * Removed dependency to ``simplejson`` * Cache Backend: Re-establishes connection for every task process if the Django cache backend is memcached/libmemcached. * Tyrant Backend: Now re-establishes the connection for every task executed. 0.3.3 [2009-06-08 01:07 P.M CET] ================================ * The ``PeriodicWorkController`` now sleeps for 1 second between checking for periodic tasks to execute. 0.3.2 [2009-06-08 01:07 P.M CET] ================================ * celeryd: Added option ``--discard``: Discard (delete!) all waiting messages in the queue. * celeryd: The ``--wakeup-after`` option was not handled as a float. 0.3.1 [2009-06-08 01:07 P.M CET] ================================ * The `PeriodicTask`` worker is now running in its own thread instead of blocking the ``TaskController`` loop. * Default ``QUEUE_WAKEUP_AFTER`` has been lowered to ``0.1`` (was ``0.3``) 0.3.0 [2009-06-08 12:41 P.M CET] ================================ **NOTE** This is a development version, for the stable release, please see versions 0.2.x. **VERY IMPORTANT:** Pickle is now the encoder used for serializing task arguments, so be sure to flush your task queue before you upgrade. * **IMPORTANT** TaskSet.run() now returns a celery.result.TaskSetResult instance, which lets you inspect the status and return values of a taskset as it was a single entity. * **IMPORTANT** Celery now depends on carrot >= 0.4.1. * The celery daemon now sends task errors to the registered admin e-mails. To turn off this feature, set ``SEND_CELERY_TASK_ERROR_EMAILS`` to ``False`` in your ``settings.py``. Thanks to Grégoire Cachet. * You can now run the celery daemon by using ``manage.py``:: $ python manage.py celeryd Thanks to Grégoire Cachet. * Added support for message priorities, topic exchanges, custom routing keys for tasks. This means we have introduced ``celery.task.apply_async``, a new way of executing tasks. You can use ``celery.task.delay`` and ``celery.Task.delay`` like usual, but if you want greater control over the message sent, you want ``celery.task.apply_async`` and ``celery.Task.apply_async``. This also means the AMQP configuration has changed. Some settings has been renamed, while others are new:: CELERY_AMQP_EXCHANGE CELERY_AMQP_PUBLISHER_ROUTING_KEY CELERY_AMQP_CONSUMER_ROUTING_KEY CELERY_AMQP_CONSUMER_QUEUE CELERY_AMQP_EXCHANGE_TYPE See the entry `Can I send some tasks to only some servers?`_ in the `FAQ`_ for more information. .. _`Can I send some tasks to only some servers?`: http://bit.ly/celery_AMQP_routing .. _`FAQ`: http://ask.github.com/celery/faq.html * Task errors are now logged using loglevel ``ERROR`` instead of ``INFO``, and backtraces are dumped. Thanks to Grégoire Cachet. * Make every new worker process re-establish it's Django DB connection, this solving the "MySQL connection died?" exceptions. Thanks to Vitaly Babiy and Jirka Vejrazka. * **IMOPORTANT** Now using pickle to encode task arguments. This means you now can pass complex python objects to tasks as arguments. * Removed dependency to ``yadayada``. * Added a FAQ, see ``docs/faq.rst``. * Now converts any unicode keys in task ``kwargs`` to regular strings. Thanks Vitaly Babiy. * Renamed the ``TaskDaemon`` to ``WorkController``. * ``celery.datastructures.TaskProcessQueue`` is now renamed to ``celery.pool.TaskPool``. * The pool algorithm has been refactored for greater performance and stability. 0.2.0 [2009-05-20 05:14 P.M CET] ================================ * Final release of 0.2.0 * Compatible with carrot version 0.4.0. * Fixes some syntax errors related to fetching results from the database backend. 0.2.0-pre3 [2009-05-20 05:14 P.M CET] ===================================== * *Internal release*. Improved handling of unpickled exceptions, ``get_result`` now tries to recreate something looking like the original exception. 0.2.0-pre2 [2009-05-20 01:56 P.M CET] ===================================== * Now handles unpickleable exceptions (like the dynimically generated subclasses of ``django.core.exception.MultipleObjectsReturned``). 0.2.0-pre1 [2009-05-20 12:33 P.M CET] ===================================== * It's getting quite stable, with a lot of new features, so bump version to 0.2. This is a pre-release. * ``celery.task.mark_as_read()`` and ``celery.task.mark_as_failure()`` has been removed. Use ``celery.backends.default_backend.mark_as_read()``, and ``celery.backends.default_backend.mark_as_failure()`` instead. 0.1.15 [2009-05-19 04:13 P.M CET] ================================= * The celery daemon was leaking AMQP connections, this should be fixed, if you have any problems with too many files open (like ``emfile`` errors in ``rabbit.log``, please contact us! 0.1.14 [2009-05-19 01:08 P.M CET] ================================= * Fixed a syntax error in the ``TaskSet`` class. (No such variable ``TimeOutError``). 0.1.13 [2009-05-19 12:36 P.M CET] ================================= * Forgot to add ``yadayada`` to install requirements. * Now deletes all expired task results, not just those marked as done. * Able to load the Tokyo Tyrant backend class without django configuration, can specify tyrant settings directly in the class constructor. * Improved API documentation * Now using the Sphinx documentation system, you can build the html documentation by doing :: $ cd docs $ make html and the result will be in ``docs/.build/html``. 0.1.12 [2009-05-18 04:38 P.M CET] ================================= * ``delay_task()`` etc. now returns ``celery.task.AsyncResult`` object, which lets you check the result and any failure that might have happened. It kind of works like the ``multiprocessing.AsyncResult`` class returned by ``multiprocessing.Pool.map_async``. * Added dmap() and dmap_async(). This works like the ``multiprocessing.Pool`` versions except they are tasks distributed to the celery server. Example: >>> from celery.task import dmap >>> import operator >>> dmap(operator.add, [[2, 2], [4, 4], [8, 8]]) >>> [4, 8, 16] >>> from celery.task import dmap_async >>> import operator >>> result = dmap_async(operator.add, [[2, 2], [4, 4], [8, 8]]) >>> result.ready() False >>> time.sleep(1) >>> result.ready() True >>> result.result [4, 8, 16] * Refactored the task metadata cache and database backends, and added a new backend for Tokyo Tyrant. You can set the backend in your django settings file. e.g:: CELERY_RESULT_BACKEND = "database"; # Uses the database CELERY_RESULT_BACKEND = "cache"; # Uses the django cache framework CELERY_RESULT_BACKEND = "tyrant"; # Uses Tokyo Tyrant TT_HOST = "localhost"; # Hostname for the Tokyo Tyrant server. TT_PORT = 6657; # Port of the Tokyo Tyrant server. 0.1.11 [2009-05-12 02:08 P.M CET] ================================= * The logging system was leaking file descriptors, resulting in servers stopping with the EMFILES (too many open files) error. (fixed) 0.1.10 [2009-05-11 12:46 P.M CET] ================================= * Tasks now supports both positional arguments and keyword arguments. * Requires carrot 0.3.8. * The daemon now tries to reconnect if the connection is lost. 0.1.8 [2009-05-07 12:27 P.M CET] ================================ * Better test coverage * More documentation * celeryd doesn't emit ``Queue is empty`` message if ``settings.CELERYD_EMPTY_MSG_EMIT_EVERY`` is 0. 0.1.7 [2009-04-30 1:50 P.M CET] =============================== * Added some unittests * Can now use the database for task metadata (like if the task has been executed or not). Set ``settings.CELERY_TASK_META`` * Can now run ``python setup.py test`` to run the unittests from within the ``tests`` project. * Can set the AMQP exchange/routing key/queue using ``settings.CELERY_AMQP_EXCHANGE``, ``settings.CELERY_AMQP_ROUTING_KEY``, and ``settings.CELERY_AMQP_CONSUMER_QUEUE``. 0.1.6 [2009-04-28 2:13 P.M CET] =============================== * Introducing ``TaskSet``. A set of subtasks is executed and you can find out how many, or if all them, are done (excellent for progress bars and such) * Now catches all exceptions when running ``Task.__call__``, so the daemon doesn't die. This does't happen for pure functions yet, only ``Task`` classes. * ``autodiscover()`` now works with zipped eggs. * celeryd: Now adds curernt working directory to ``sys.path`` for convenience. * The ``run_every`` attribute of ``PeriodicTask`` classes can now be a ``datetime.timedelta()`` object. * celeryd: You can now set the ``DJANGO_PROJECT_DIR`` variable for ``celeryd`` and it will add that to ``sys.path`` for easy launching. * Can now check if a task has been executed or not via HTTP. * You can do this by including the celery ``urls.py`` into your project, >>> url(r'^celery/$', include("celery.urls")) then visiting the following url,:: http://mysite/celery/$task_id/done/ this will return a JSON dictionary like e.g: >>> {"task": {"id": $task_id, "executed": true}} * ``delay_task`` now returns string id, not ``uuid.UUID`` instance. * Now has ``PeriodicTasks``, to have ``cron`` like functionality. * Project changed name from ``crunchy`` to ``celery``. The details of the name change request is in ``docs/name_change_request.txt``. 0.1.0 [2009-04-24 11:28 A.M CET] ================================ * Initial release PKXDDO(&P&celery-1.0-archived/_sources/index.txt================================= Celery - Distributed Task Queue ================================= Contents: .. toctree:: :maxdepth: 2 getting-started/index userguide/index configuration cookbook/index tutorials/index faq reference/index internals/index changelog links Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` PKXDDϺu&celery-1.0-archived/_sources/links.txt=================== Interesting Links =================== celery ------ * IRC logs from ``#celery`` (Freenode): http://botland.oebfare.com/logger/celery/ AMQP ---- * `RabbitMQ-shovel`: Message Relocation Equipment (as a plug-in to RabbitMQ) * `Shovel`_: An AMQP Relay (generic AMQP shovel) .. _`RabbitMQ-shovel`: http://bit.ly/b1hVW2 .. _`Shovel`: http://bit.ly/xFEde RabbitMQ -------- * `Trixx`_: Administration and Monitoring tool for `RabbitMQ`_ (in development). * `Cony`_: HTTP based service for providing insight into running `RabbitMQ`_ processes. * `RabbitMQ Munin Plug-ins`_: Use `Munin`_ to monitor `RabbitMQ`_, and alert on critical events. .. _`Trixx`: http://github.com/aaronfeng/trixx/tree/master .. _`Cony`: http://github.com/gmr/Cony/tree/master .. _`RabbitMQ`: http://rabbitmq.com/ .. _`RabbitMQ Munin Plug-ins`: http://github.com/ask/rabbitmq-munin/ .. _`Munin`: http://munin.projects.linpro.no/ PKXDD6}pp$celery-1.0-archived/_sources/faq.txt============================ Frequently Asked Questions ============================ General ======= What kinds of things should I use celery for? --------------------------------------------- **Answer:** `Queue everything and delight everyone`_ is a good article describing why you would use a queue in a web context. .. _`Queue everything and delight everyone`: http://decafbad.com/blog/2008/07/04/queue-everything-and-delight-everyone These are some common use cases: * Running something in the background. For example, to finish the web request as soon as possible, then update the users page incrementally. This gives the user the impression of good performane and "snappiness", even though the real work might actually take some time. * Running something after the web request has finished. * Making sure something is done, by executing it asynchronously and using retries. * Scheduling periodic work. And to some degree: * Distributed computing. * Parallel execution. Misconceptions ============== Is celery dependent on pickle? ------------------------------ **Answer:** No. Celery can support any serialization scheme and has support for JSON/YAML and Pickle by default. You can even send one task using pickle, and another one with JSON seamlessly, this is because every task is associated with a content-type. The default serialization scheme is pickle because it's the most used, and it has support for sending complex objects as task arguments. You can set a global default serializer, the default serializer for a particular Task, or even what serializer to use when sending a single task instance. Is celery for Django only? -------------------------- **Answer:** No. You can use all of the features without using Django. Why is Django a dependency? --------------------------- Celery uses the Django ORM for database access when using the database result backend, the Django cache framework when using the cache result backend, and the Django signal dispatch mechanisms for signaling. This doesn't mean you need to have a Django project to use celery, it just means that sometimes we use internal Django components. The long term plan is to replace these with other solutions, (e.g. `SQLAlchemy`_ as the ORM, and `louie`_, for signaling). The celery distribution will be split into two: * celery The core. Using SQLAlchemy for the database backend. * django-celery Celery integration for Django, using the Django ORM for the database backend. We're currently seeking people with `SQLAlchemy`_ experience, so please contact the project if you want this done sooner. The reason for the split is for purity only. It shouldn't affect you much as a user, so please don't worry about the Django dependency, just have a good time using celery. .. _`SQLAlchemy`: http://www.sqlalchemy.org/ .. _`louie`: http://pypi.python.org/pypi/Louie/ Do I have to use AMQP/RabbitMQ? ------------------------------- **Answer**: No. You can also use Redis or an SQL database, see `Using other queues`_. .. _`Using other queues`: http://ask.github.com/celery/tutorials/otherqueues.html Redis or a database won't perform as well as an AMQP broker. If you have strict reliability requirements you are encouraged to use RabbitMQ or another AMQP broker. Redis/database also use polling, so they are likely to consume more resources. However, if you for some reason are not able to use AMQP, feel free to use these alternatives. They will probably work fine for most use cases, and note that the above points are not specific to celery; If using Redis/database as a queue worked fine for you before, it probably will now. You can always upgrade later if you need to. Is celery multi-lingual? ------------------------ **Answer:** Yes. celeryd is an implementation of celery in python. If the language has an AMQP client, there shouldn't be much work to create a worker in your language. A celery worker is just a program connecting to the broker to consume messages. There's no other communication involved. Also, there's another way to be language indepedent, and that is to use REST tasks, instead of your tasks being functions, they're URLs. With this information you can even create simple web servers that enable preloading of code. See: `User Guide: Remote Tasks`_. .. _`User Guide: Remote Tasks`: http://ask.github.com/celery/userguide/remote-tasks.html Troubleshooting =============== MySQL is throwing deadlock errors, what can I do? ------------------------------------------------- **Answer:** MySQL has default isolation level set to ``REPEATABLE-READ``, if you don't really need that, set it to ``READ-COMMITTED``. You can do that by adding the following to your ``my.cnf``:: [mysqld] transaction-isolation = READ-COMMITTED For more information about InnoDBs transaction model see `MySQL - The InnoDB Transaction Model and Locking`_ in the MySQL user manual. (Thanks to Honza Kral and Anton Tsigularov for this solution) .. _`MySQL - The InnoDB Transaction Model and Locking`: http://dev.mysql.com/doc/refman/5.1/en/innodb-transaction-model.html celeryd is not doing anything, just hanging -------------------------------------------- **Answer:** See `MySQL is throwing deadlock errors, what can I do?`_. or `Why is Task.delay/apply\* just hanging?`. Why is Task.delay/apply\*/celeryd just hanging? ----------------------------------------------- **Answer:** There is a bug in some AMQP clients that will make it hang if it's not able to authenticate the current user, the password doesn't match or the user does not have access to the virtual host specified. Be sure to check your broker logs (for RabbitMQ that is ``/var/log/rabbitmq/rabbit.log`` on most systems), it usually contains a message describing the reason. Why won't celeryd run on FreeBSD? --------------------------------- **Answer:** multiprocessing.Pool requires a working POSIX semaphore implementation which isn't enabled in FreeBSD by default. You have to enable POSIX semaphores in the kernel and manually recompile multiprocessing. Luckily, Viktor Petersson has written a tutorial to get you started with Celery on FreeBSD here: http://www.playingwithwire.com/2009/10/how-to-get-celeryd-to-work-on-freebsd/ I'm having ``IntegrityError: Duplicate Key`` errors. Why? --------------------------------------------------------- **Answer:** See `MySQL is throwing deadlock errors, what can I do?`_. Thanks to howsthedotcom. Why aren't my tasks processed? ------------------------------ **Answer:** With RabbitMQ you can see how many consumers are currently receiving tasks by running the following command:: $ rabbitmqctl list_queues -p name messages consumers Listing queues ... celery 2891 2 This shows that there's 2891 messages waiting to be processed in the task queue, and there are two consumers processing them. One reason that the queue is never emptied could be that you have a stale celery process taking the messages hostage. This could happen if celeryd wasn't properly shut down. When a message is recieved by a worker the broker waits for it to be acknowledged before marking the message as processed. The broker will not re-send that message to another consumer until the consumer is shut down properly. If you hit this problem you have to kill all workers manually and restart them:: ps auxww | grep celeryd | awk '{print $2}' | xargs kill You might have to wait a while until all workers have finished the work they're doing. If it's still hanging after a long time you can kill them by force with:: ps auxww | grep celeryd | awk '{print $2}' | xargs kill -9 Why won't my Task run? ---------------------- **Answer:** Did you register the task in the applications ``tasks.py`` module? (or in some other module Django loads by default, like ``models.py``?). Also there might be syntax errors preventing the tasks module being imported. You can find out if celery is able to run the task by executing the task manually: >>> from myapp.tasks import MyPeriodicTask >>> MyPeriodicTask.delay() Watch celeryds logfile to see if it's able to find the task, or if some other error is happening. Why won't my Periodic Task run? ------------------------------- **Answer:** See `Why won't my Task run?`_. How do I discard all waiting tasks? ------------------------------------ **Answer:** Use ``celery.task.discard_all()``, like this: >>> from celery.task import discard_all >>> discard_all() 1753 The number ``1753`` is the number of messages deleted. You can also start celeryd with the ``--discard`` argument which will accomplish the same thing. I've discarded messages, but there are still messages left in the queue? ------------------------------------------------------------------------ **Answer:** Tasks are acknowledged (removed from the queue) as soon as they are actually executed. After the worker has received a task, it will take some time until it is actually executed, especially if there are a lot of tasks already waiting for execution. Messages that are not acknowledged are hold on to by the worker until it closes the connection to the broker (AMQP server). When that connection is closed (e.g because the worker was stopped) the tasks will be re-sent by the broker to the next available worker (or the same worker when it has been restarted), so to properly purge the queue of waiting tasks you have to stop all the workers, and then discard the tasks using ``discard_all``. Windows: The ``-B`` / ``--beat`` option to celeryd doesn't work? ---------------------------------------------------------------- **Answer**: That's right. Run ``celerybeat`` and ``celeryd`` as separate services instead. Tasks ===== How can I reuse the same connection when applying tasks? -------------------------------------------------------- **Answer**: See :doc:`userguide/executing`. Can I execute a task by name? ----------------------------- **Answer**: Yes. Use :func:`celery.execute.send_task`. You can also execute a task by name from any language that has an AMQP client. >>> from celery.execute import send_task >>> send_task("tasks.add", args=[2, 2], kwargs={}) Results ======= How dow I get the result of a task if I have the ID that points there? ---------------------------------------------------------------------- **Answer**: Use ``Task.AsyncResult``:: >>> result = MyTask.AsyncResult(task_id) >>> result.get() This will give you a :class:`celery.result.BaseAsyncResult` instance using the tasks current result backend. If you need to specify a custom result backend you should use :class:`celery.result.BaseAsyncResult` directly:: >>> from celery.result import BaseAsyncResult >>> result = BaseAsyncResult(task_id, backend=...) >>> result.get() Brokers ======= Why is RabbitMQ crashing? ------------------------- RabbitMQ will crash if it runs out of memory. This will be fixed in a future release of RabbitMQ. please refer to the RabbitMQ FAQ: http://www.rabbitmq.com/faq.html#node-runs-out-of-memory Some common Celery misconfigurations can crash RabbitMQ: * Events. Running ``celeryd`` with the ``-E``/``--events`` option will send messages for events happening inside of the worker. If these event messages are not consumed, you will eventually run out of memory. Events should only be enabled if you have an active monitor consuming them. * AMQP backend results. When running with the AMQP result backend, every task result will be sent as a message. If you don't collect these results, they will build up and RabbitMQ will eventually run out of memory. If you don't use the results for a task, make sure you set the ``ignore_result`` option: .. code-block python @task(ignore_result=True) def mytask(): ... class MyTask(Task): ignore_result = True Results can also be disabled globally using the ``CELERY_IGNORE_RESULT`` setting. Can I use celery with ActiveMQ/STOMP? ------------------------------------- **Answer**: Yes, but this is somewhat experimental for now. It is working ok in a test configuration, but it has not been tested in production like RabbitMQ has. If you have any problems with using STOMP and celery, please report the bugs to the issue tracker: http://github.com/ask/celery/issues/ First you have to use the ``master`` branch of ``celery``:: $ git clone git://github.com/ask/celery.git $ cd celery $ sudo python setup.py install $ cd .. Then you need to install the ``stompbackend`` branch of ``carrot``:: $ git clone git://github.com/ask/carrot.git $ cd carrot $ git checkout stompbackend $ sudo python setup.py install $ cd .. And my fork of ``python-stomp`` which adds non-blocking support:: $ hg clone http://bitbucket.org/asksol/python-stomp/ $ cd python-stomp $ sudo python setup.py install $ cd .. In this example we will use a queue called ``celery`` which we created in the ActiveMQ web admin interface. **Note**: For ActiveMQ the queue name has to have ``"/queue/"`` prepended to it. i.e. the queue ``celery`` becomes ``/queue/celery``. Since a STOMP queue is a single named entity and it doesn't have the routing capabilities of AMQP you need to set both the ``queue``, and ``exchange`` settings to your queue name. This is a minor inconvenience since carrot needs to maintain the same interface for both AMQP and STOMP (obviously the one with the most capabilities won). Use the following specific settings in your ``settings.py``: .. code-block:: python # Makes python-stomp the default backend for carrot. CARROT_BACKEND = "stomp" # STOMP hostname and port settings. BROKER_HOST = "localhost" BROKER_PORT = 61613 # The queue name to use (both queue and exchange must be set to the # same queue name when using STOMP) CELERY_DEFAULT_QUEUE = "/queue/celery" CELERY_DEFAULT_EXCHANGE = "/queue/celery" CELERY_QUEUES = { "/queue/celery": {"exchange": "/queue/celery"} } Now you can go on reading the tutorial in the README, ignoring any AMQP specific options. What features are not supported when using STOMP? -------------------------------------------------- This is a (possible incomplete) list of features not available when using the STOMP backend: * routing keys * exchange types (direct, topic, headers, etc) * immediate * mandatory Features ======== How can I run a task once another task has finished? ---------------------------------------------------- **Answer**: You can safely launch a task inside a task. Also, a common pattern is to use callback tasks: .. code-block:: python @task() def add(x, y, callback=None): result = x + y if callback: callback.delay(result) return result @task(ignore_result=True) def log_result(result, **kwargs): logger = log_result.get_logger(**kwargs) logger.info("log_result got: %s" % (result, )) >>> add.delay(2, 2, callback=log_result) Can I cancel the execution of a task? ------------------------------------- **Answer**: Yes. Use ``result.revoke``:: >>> result = add.apply_async(args=[2, 2], countdown=120) >>> result.revoke() or if you only have the task id:: >>> from celery.task.control import revoke >>> revoke(task_id) Why aren't my remote control commands received by all workers? -------------------------------------------------------------- **Answer**: To receive broadcast remote control commands, every ``celeryd`` uses its hostname to create a unique queue name to listen to, so if you have more than one worker with the same hostname, the control commands will be recieved in round-robin between them. To work around this you can explicitly set the hostname for every worker using the ``--hostname`` argument to ``celeryd``:: $ celeryd --hostname=$(hostname).1 $ celeryd --hostname=$(hostname).2 etc, etc. Can I send some tasks to only some servers? -------------------------------------------- **Answer:** Yes. You can route tasks to an arbitrary server using AMQP, and a worker can bind to as many queues as it wants. Say you have two servers, ``x``, and ``y`` that handles regular tasks, and one server ``z``, that only handles feed related tasks, you can use this configuration: * Servers ``x`` and ``y``: settings.py: .. code-block:: python CELERY_DEFAULT_QUEUE = "regular_tasks" CELERY_QUEUES = { "regular_tasks": { "binding_key": "task.#", }, } CELERY_DEFAULT_EXCHANGE = "tasks" CELERY_DEFAULT_EXCHANGE_TYPE = "topic" CELERY_DEFAULT_ROUTING_KEY = "task.regular" * Server ``z``: settings.py: .. code-block:: python CELERY_DEFAULT_QUEUE = "feed_tasks" CELERY_QUEUES = { "feed_tasks": { "binding_key": "feed.#", }, } CELERY_DEFAULT_EXCHANGE = "tasks" CELERY_DEFAULT_ROUTING_KEY = "task.regular" CELERY_DEFAULT_EXCHANGE_TYPE = "topic" ``CELERY_QUEUES`` is a map of queue names and their exchange/type/binding_key, if you don't set exchange or exchange type, they will be taken from the ``CELERY_DEFAULT_EXCHANGE``/``CELERY_DEFAULT_EXCHANGE_TYPE`` settings. Now to make a Task run on the ``z`` server you need to set its ``routing_key`` attribute so it starts with the words ``"task.feed."``: .. code-block:: python from feedaggregator.models import Feed from celery.decorators import task @task(routing_key="feed.importer") def import_feed(feed_url): Feed.objects.import_feed(feed_url) or if subclassing the ``Task`` class directly: .. code-block:: python class FeedImportTask(Task): routing_key = "feed.importer" def run(self, feed_url): Feed.objects.import_feed(feed_url) You can also override this using the ``routing_key`` argument to :func:`celery.task.apply_async`: >>> from myapp.tasks import RefreshFeedTask >>> RefreshFeedTask.apply_async(args=["http://cnn.com/rss"], ... routing_key="feed.importer") If you want, you can even have your feed processing worker handle regular tasks as well, maybe in times when there's a lot of work to do. Just add a new queue to server ``z``'s ``CELERY_QUEUES``: .. code-block:: python CELERY_QUEUES = { "feed_tasks": { "binding_key": "feed.#", }, "regular_tasks": { "binding_key": "task.#", }, } Since the default exchange is ``tasks``, they will both use the same exchange. If you have another queue but on another exchange you want to add, just specify a custom exchange and exchange type: .. code-block:: python CELERY_QUEUES = { "feed_tasks": { "binding_key": "feed.#", }, "regular_tasks": { "binding_key": "task.#", } "image_tasks": { "binding_key": "image.compress", "exchange": "mediatasks", "exchange_type": "direct", }, } If you're confused about these terms, you should read up on AMQP and RabbitMQ. `Rabbits and Warrens`_ is an excellent blog post describing queues and exchanges. There's also AMQP in 10 minutes*: `Flexible Routing Model`_, and `Standard Exchange Types`_. For users of RabbitMQ the `RabbitMQ FAQ`_ could also be useful as a source of information. .. _`Rabbits and Warrens`: http://blogs.digitar.com/jjww/2009/01/rabbits-and-warrens/ .. _`Flexible Routing Model`: http://bit.ly/95XFO1 .. _`Standard Exchange Types`: http://bit.ly/EEWca .. _`RabbitMQ FAQ`: http://www.rabbitmq.com/faq.html Can I use celery without Django? -------------------------------- **Answer:** Yes. Celery uses something called loaders to read/setup configuration, import modules that register tasks and to decide what happens when a task is executed. Currently there are two loaders, the default loader and the Django loader. If you want to use celery without a Django project, you either have to use the default loader, or write a loader of your own. The rest of this answer describes how to use the default loader. While it is possible to use Celery from outside of Django, we still need Django itself to run, this is to use the ORM and cache-framework. Duplicating these features would be time consuming and mostly pointless, so while me might rewrite these in the future, this is a good solution in the mean time. Install Django using your favorite install tool, ``easy_install``, ``pip``, or whatever:: # easy_install django # as root You need a configuration file named ``celeryconfig.py``, either in the directory you run ``celeryd`` in, or in a Python library path where it is able to find it. The configuration file can contain any of the settings described in :mod:`celery.conf`. In addition; if you're using the database backend you have to configure the database. Here is an example configuration using the database backend with MySQL: .. code-block:: python # Broker configuration BROKER_HOST = "localhost" BROKER_PORT = "5672" BROKER_VHOST = "celery" BROKER_USER = "celery" BROKER_PASSWORD = "celerysecret" CARROT_BACKEND="amqp" # Using the database backend. CELERY_RESULT_BACKEND = "database" DATABASE_ENGINE = "mysql" # see Django docs for a description of these. DATABASE_NAME = "mydb" DATABASE_HOST = "mydb.example.org" DATABASE_USER = "myuser" DATABASE_PASSWORD = "mysecret" # Number of processes that processes tasks simultaneously. CELERYD_CONCURRENCY = 8 # Modules to import when celeryd starts. # This must import every module where you register tasks so celeryd # is able to find and run them. CELERY_IMPORTS = ("mytaskmodule1", "mytaskmodule2") With this configuration file in the current directory you have to run ``celeryinit`` to create the database tables:: $ celeryinit At this point you should be able to successfully run ``celeryd``:: $ celeryd --loglevel=INFO and send a task from a python shell (note that it must be able to import ``celeryconfig.py``): >>> from celery.task.builtins import PingTask >>> result = PingTask.apply_async() >>> result.get() 'pong' The celery test-suite is failing -------------------------------- **Answer**: If you're running tests from your Django project, and the celery test suite is failing in that context, then follow the steps below. If the celery tests are failing in another context, please report an issue to our issue tracker at GitHub: http://github.com/ask/celery/issues/ That Django is running tests for all applications in ``INSTALLED_APPS`` by default is a pet peeve for many. You should use a test runner that either 1) Explicitly lists the apps you want to run tests for, or 2) Make a test runner that skips tests for apps you don't want to run. For example the test runner that celery is using: http://bit.ly/NVKep To use this test runner, add the following to your ``settings.py``: .. code-block:: python TEST_RUNNER = "celery.tests.runners.run_tests" TEST_APPS = ( "app1", "app2", "app3", "app4", ) Or, if you just want to skip the celery tests: .. code-block:: python INSTALLED_APPS = (.....) TEST_RUNNER = "celery.tests.runners.run_tests" TEST_APPS = filter(lambda k: k != "celery", INSTALLED_APPS) Can I change the interval of a periodic task at runtime? -------------------------------------------------------- **Answer**: Yes. You can override ``PeriodicTask.is_due`` or turn ``PeriodicTask.run_every`` into a property: .. code-block:: python class MyPeriodic(PeriodicTask): def run(self): # ... @property def run_every(self): return get_interval_from_database(...) Does celery support task priorities? ------------------------------------ **Answer**: No. In theory, yes, as AMQP supports priorities. However RabbitMQ doesn't implement them yet. The usual way to prioritize work in celery, is to route high priority tasks to different servers. In the real world this may actually work better than per message priorities. You can use this in combination with rate limiting to achieve a highly performant system. Should I use retry or acks_late? -------------------------------- **Answer**: Depends. It's not necessarily one or the other, you may want to use both. ``Task.retry`` is used to retry tasks, notably for expected errors that is catchable with the ``try:`` block. The AMQP transaction is not used for these errors: **if the task raises an exception it is still acked!**. The ``acks_late`` setting would be used when you need the task to be executed again if the worker (for some reason) crashes mid-execution. It's important to note that the worker is not known to crash, and if it does it is usually an unrecoverable error that requires human intervention (bug in the worker, or task code). In an ideal world you could safely retry any task that has failed, but this is rarely the case. Imagine the following task: .. code-block:: python @task() def process_upload(filename, tmpfile): # Increment a file count stored in a database increment_file_counter() add_file_metadata_to_db(filename, tmpfile) copy_file_to_destination(filename, tmpfile) If this crashed in the middle of copying the file to its destination the world would contain incomplete state. This is not a critical scenario of course, but you can probably imagine something far more sinister. So for ease of programming we have less reliability; It's a good default, users who require it and know what they are doing can still enable acks_late (and in the future hopefully use manual acknowledgement) In addition ``Task.retry`` has features not available in AMQP transactions: delay between retries, max retries, etc. So use retry for Python errors, and if your task is reentrant combine that with ``acks_late`` if that level of reliability is required. Can I schedule tasks to execute at a specific time? --------------------------------------------------- .. module:: celery.task.base **Answer**: Yes. You can use the ``eta`` argument of :meth:`Task.apply_async`. Or to schedule a periodic task at a specific time, use the :class:`celery.task.schedules.crontab` schedule behavior: .. code-block:: python from celery.task.schedules import crontab from celery.decorators import periodic_task @periodic_task(run_every=crontab(hours=7, minute=30, day_of_week="mon")) def every_monday_morning(): print("This is run every monday morning at 7:30") How do I shut down ``celeryd`` safely? -------------------------------------- **Answer**: Use the ``TERM`` signal, and celery will finish all currently executing jobs and shut down as soon as possible. No tasks should be lost. You should never stop ``celeryd`` with the ``KILL`` signal (``-9``), unless you've tried ``TERM`` a few times and waited a few minutes to let it get a chance to shut down. As if you do tasks may be terminated mid-execution, and they will not be re-run unless you have the ``acks_late`` option set. (``Task.acks_late`` / ``CELERY_ACKS_LATE``). How do I run celeryd in the background on [platform]? ----------------------------------------------------- **Answer**: Please see :doc:`cookbook/daemonizing`. Django ====== Generating a template in a task doesn't seem to respect my i18n settings? ------------------------------------------------------------------------- **Answer**: To enable the Django translation machinery you need to activate it with a language. **Note**: Be sure to reset to the previous language when done. >>> from django.utils import translation >>> prev_language = translation.get_language() >>> translation.activate(language) >>> try: ... render_template() ... finally: translation.activate(prev_language) The common pattern here would be for the task to take a ``language`` argument: .. code-block:: python from celery.decorators import task from django.utils import translation from django.template.loader import render_to_string @task() def generate_report(template="report.html", language=None): prev_language = translation.get_language() language and translation.activate(language) try: report = render_to_string(template) finally: translation.activate(prev_language) save_report_somewhere(report) PKXDD  6celery-1.0-archived/_sources/internals/moduleindex.txt============== Module Index ============== Worker ====== celery.worker ------------- * :class:`celery.worker.WorkController` This is the worker's main process. It starts and stops all the components required by the worker: Pool, Mediator, Scheduler, ClockService, and Listener. celery.worker.job ----------------- celery.worker.pool ------------------ celery.worker.listener ---------------------- celery.worker.controllers ------------------------- celery.worker.scheduler ----------------------- celery.worker.buckets --------------------- celery.worker.heartbeat ----------------------- celery.worker.revoke -------------------- celery.worker.control --------------------- * celery.worker.registry * celery.worker.builtins Tasks ===== celery.decorators ----------------- celery.registry --------------- celery.task ----------- celery.task.base ---------------- celery.task.http ---------------- celery.task.rest ---------------- Backward compatible interface to :mod:`celery.task.http`. Will be deprecated in future versions. celery.task.control ------------------- celery.task.builtins -------------------- Execution ========= celery.execute -------------- celery.execute.trace -------------------- celery.result ------------- celery.states ------------- celery.signals Messaging ========= celery.messaging ---------------- Django-specific =============== celery.models ------------- celery.managers --------------- celery.views ------------ celery.urls ----------- celery.management Result backends =============== celery.backends --------------- celery.backends.base -------------------- celery.backends.amqp -------------------- celery.backends.database ------------------------ Loaders ======= celery.loaders -------------- Loader autodetection, and working with the currently selected loader. celery.loaders.base - Loader base classes ----------------------------------------- celery.loaders.default - The default loader ------------------------------------------- celery.loaders.djangoapp - The Django loader -------------------------------------------- CeleryBeat ========== celery.beat ----------- Events ====== celery.events ------------- Logging ======= celery.log ---------- celery.utils.patch ------------------ Configuration ============= celery.conf ----------- Miscellaneous ============= celery.datastructures --------------------- celery.exceptions ----------------- celery.platform --------------- celery.utils ------------ celery.utils.info ----------------- celery.utils.compat ------------------- PKXDDԸ 6celery-1.0-archived/_sources/internals/deprecation.txt============================= Celery Deprecation Timeline ============================= * 1.2 * The following settings will be removed: ===================================== ===================================== **Setting name** **Replace with** ===================================== ===================================== ``CELERY_AMQP_CONSUMER_QUEUES`` ``CELERY_QUEUES`` ``CELERY_AMQP_CONSUMER_QUEUES`` ``CELERY_QUEUES`` ``CELERY_AMQP_EXCHANGE`` ``CELERY_DEFAULT_EXCHANGE`` ``CELERY_AMQP_EXCHANGE_TYPE`` ``CELERY_DEFAULT_AMQP_EXCHANGE_TYPE`` ``CELERY_AMQP_CONSUMER_ROUTING_KEY`` ``CELERY_QUEUES`` ``CELERY_AMQP_PUBLISHER_ROUTING_KEY`` ``CELERY_DEFAULT_ROUTING_KEY`` ===================================== ===================================== * ``CELERY_LOADER`` definitions without class name. E.g. ``celery.loaders.default``, needs to include the class name: ``celery.loaders.default.Loader``. * :meth:`TaskSet.run`. Use :meth:`celery.task.base.TaskSet.apply_async` instead. * The module :mod:`celery.task.rest`; use :mod:`celery.task.http` instead. PKXDD$Y3celery-1.0-archived/_sources/internals/protocol.txt======================= Task Message Protocol ======================= * task ``string`` Name of the task. **required** * id ``string`` Unique id of the task (UUID). **required** * args ``list`` List of arguments. Will be an empty list if not provided. * kwargs ``dictionary`` Dictionary of keyword arguments. Will be an empty dictionary if not provided. * retries ``int`` Current number of times this task has been retried. Defaults to ``0`` if not specified. * eta ``string`` (ISO 8601) Estimated time of arrival. This is the date and time in ISO 8601 format. If not provided the message is not scheduled, but will be executed asap. Example ======= This is an example invocation of the ``celery.task.PingTask`` task in JSON format:: {"task": "celery.task.PingTask", "args": [], "kwargs": {}, "retries": 0, "eta": "2009-11-17T12:30:56.527191"} Serialization ============= The protocol supports several serialization formats using the ``content_type`` message header. The MIME-types supported by default are shown in the following table. =============== ================================= Scheme MIME Type =============== ================================= json application/json yaml application/x-yaml pickle application/x-python-serialize =============== ================================= PKXDDօ;0celery-1.0-archived/_sources/internals/index.txt=========== Internals =========== :Release: |version| :Date: |today| .. toctree:: :maxdepth: 2 deprecation worker protocol events moduleindex reference/index PKXDD01celery-1.0-archived/_sources/internals/worker.txt======================= Internals: The worker ======================= **NOTE** This describes the internals of the development version, not the current release. The worker consists of 4 main components: the broker listener, the scheduler, the mediator and the task pool. All these components runs in parallel working with two data structures: the ready queue and the ETA schedule. .. image:: http://cloud.github.com/downloads/ask/celery/Celery1.0-inside-worker.jpg Data structures =============== ready_queue ----------- The ready queue is either an instance of :class:`Queue.Queue`, or `celery.buckets.TaskBucket`. The latter if rate limiting is enabled. eta_schedule ------------ The ETA schedule is a heap queue sorted by time. Components ========== CarrotListener -------------- Receives messages from the broker using ``carrot``. When a message is received it's converted into a :class:`celery.worker.job.TaskWrapper` object. Tasks with an ETA are entered into the ``eta_schedule``, messages that can be immediately processed are moved directly to the ``ready_queue``. ScheduleController ------------------ The schedule controller is running the ``eta_schedule``. If the scheduled tasks eta has passed it is moved to the ``ready_queue``, otherwise the thread sleeps until the eta is met (remember that the schedule is sorted by time). Mediator -------- The mediator simply moves tasks in the ``ready_queue`` over to the task pool for execution using :meth:`celery.worker.job.TaskWrapper.execute_using_pool`. TaskPool -------- This is a slightly modified :class:`multiprocessing.Pool`. It mostly works the same way, except it makes sure all of the workers are running at all times. If a worker is missing, it replaces it with a new one. PKXDDA0*PP1celery-1.0-archived/_sources/internals/events.txt======================= List of Worker Events ======================= This is the list of events sent by the worker. The monitor uses these to visualize the state of the cluster. Task Events ----------- * task-received(uuid, name, args, kwargs, retries, eta, hostname, timestamp) Sent when the worker receives a task. * task-accepted(uuid, hostname, timestamp) Sent just before the worker executes the task. * task-succeeded(uuid, result, runtime, hostname, timestamp) Sent if the task executed successfully. Runtime is the time it took to execute the task using the pool. (Time starting from the task is sent to the pool, and ending when the pool result handlers callback is called). * task-failed(uuid, exception, traceback, hostname, timestamp) Sent if the execution of the task failed. * task-retried(uuid, exception, traceback, hostname, delay, timestamp) Sent if the task failed, but will be retried in the future. (**NOT IMPLEMENTED**) Worker Events ------------- * worker-online(hostname, timestamp) The worker has connected to the broker and is online. * worker-heartbeat(hostname, timestamp) Sent every minute, if the worker has not sent a heartbeat in 2 minutes, it's considered to be offline. * worker-offline(hostname, timestamp) The worker has disconnected from the broker. PKXDD! Jcelery-1.0-archived/_sources/internals/reference/celery.worker.control.txt======================================== Worker Control - celery.worker.control ======================================== .. currentmodule:: celery.worker.control .. automodule:: celery.worker.control :members: PKXDD2pDcelery-1.0-archived/_sources/internals/reference/celery.platform.txt===================================== Platform Specific - celery.platform ===================================== .. currentmodule:: celery.platform .. automodule:: celery.platform :members: PKXDDmBAcelery-1.0-archived/_sources/internals/reference/celery.utils.txt======================================== Multiprocessing Worker - celery.worker ======================================== .. currentmodule:: celery.utils .. automodule:: celery.utils :members: PKXDD@Kcelery-1.0-archived/_sources/internals/reference/celery.worker.listener.txt================================================== Worker Message Listener - celery.worker.listener ================================================== .. currentmodule:: celery.worker.listener .. automodule:: celery.worker.listener :members: PKXDDۧKcelery-1.0-archived/_sources/internals/reference/celery.backends.tyrant.txt=============================================== Backend: Tokyo Tyrant - celery.backends.tyrant =============================================== .. currentmodule:: celery.backends.tyrant .. automodule:: celery.backends.tyrant :members: PKXDDe<<Scelery-1.0-archived/_sources/internals/reference/celery.worker.control.builtins.txt=================================================================== Built-in Remote Control Commands - celery.worker.control.builtins =================================================================== .. currentmodule:: celery.worker.control.builtins .. automodule:: celery.worker.control.builtins :members: PKXDD.+Bcelery-1.0-archived/_sources/internals/reference/celery.worker.txt======================================== Multiprocessing Worker - celery.worker ======================================== .. currentmodule:: celery.worker .. automodule:: celery.worker :members: PKXDD WDcelery-1.0-archived/_sources/internals/reference/celery.managers.txt======================================== Django Model Managers - celery.managers ======================================== .. currentmodule:: celery.managers .. automodule:: celery.managers :members: PKXDD'HKcelery-1.0-archived/_sources/internals/reference/celery.utils.timeutils.txt================================================== Time and Date Utilities - celery.utils.timeutils ================================================== .. currentmodule:: celery.utils.timeutils .. automodule:: celery.utils.timeutils :members: PKXDD2Lcelery-1.0-archived/_sources/internals/reference/celery.backends.mongodb.txt============================================ Backend: MongoDB - celery.backends.mongodb ============================================ .. currentmodule:: celery.backends.mongodb .. automodule:: celery.backends.mongodb :members: PKXDDC Jcelery-1.0-archived/_sources/internals/reference/celery.worker.buckets.txt====================================================== Token Bucket (rate limiting) - celery.worker.buckets ====================================================== .. currentmodule:: celery.worker.buckets .. automodule:: celery.worker.buckets :members: PKXDD$G;Icelery-1.0-archived/_sources/internals/reference/celery.backends.base.txt===================================== Backend: Base - celery.backends.base ===================================== .. currentmodule:: celery.backends.base .. automodule:: celery.backends.base :members: PKXDD7Bcelery-1.0-archived/_sources/internals/reference/celery.models.txt=============================== Django Models - celery.models =============================== .. data:: TASK_STATUS_PENDING The string status of a pending task. .. data:: TASK_STATUS_RETRY The string status of a task which is to be retried. .. data:: TASK_STATUS_FAILURE The string status of a failed task. .. data:: TASK_STATUS_DONE The string status of a task that was successfully executed. .. data:: TASK_STATUSES List of possible task statuses. .. data:: TASK_STATUSES_CHOICES Django choice tuple of possible task statuses, for usage in model/form fields ``choices`` argument. .. class:: TaskMeta Model for storing the result and status of a task. *Note* Only used if you're running the ``database`` backend. .. attribute:: task_id The unique task id. .. attribute:: status The current status for this task. .. attribute:: result The result after successful/failed execution. If the task failed, this contains the execption it raised. .. attribute:: date_done The date this task changed status. .. class:: PeriodicTaskMeta Metadata model for periodic tasks. .. attribute:: name The name of this task, as registered in the task registry. .. attribute:: last_run_at The date this periodic task was last run. Used to find out when it should be run next. .. attribute:: total_run_count The number of times this periodic task has been run. .. attribute:: task The class/function for this task. .. method:: delay() Delay the execution of a periodic task, and increment its total run count. PKXDDZIcelery-1.0-archived/_sources/internals/reference/celery.backends.amqp.txt======================================= Backend: AMQP - celery.backends.amqp ======================================= .. currentmodule:: celery.backends.amqp .. automodule:: celery.backends.amqp :members: PKXDD#_Lcelery-1.0-archived/_sources/internals/reference/celery.backends.pyredis.txt========================================== Backend: Redis - celery.backends.pyredis ========================================== .. currentmodule:: celery.backends.pyredis .. automodule:: celery.backends.pyredis :members: PKXDDmJcelery-1.0-archived/_sources/internals/reference/celery.datastructures.txt======================================= Datastructures - celery.datastructures ======================================= .. currentmodule:: celery.datastructures .. automodule:: celery.datastructures :members: PKXDDJ6Fcelery-1.0-archived/_sources/internals/reference/celery.worker.job.txt===================================== Executable Jobs - celery.worker.job ===================================== .. currentmodule:: celery.worker.job .. automodule:: celery.worker.job :members: PKXDDLcelery-1.0-archived/_sources/internals/reference/celery.worker.scheduler.txt============================================ Worker Scheduler - celery.worker.scheduler ============================================ .. currentmodule:: celery.worker.scheduler .. automodule:: celery.worker.scheduler :members: PKXDDm4IIcelery-1.0-archived/_sources/internals/reference/celery.execute.trace.txt========================================== Tracing Execution - celery.execute.trace ========================================== .. currentmodule:: celery.execute.trace .. automodule:: celery.execute.trace :members: PKXDD~ѻGcelery-1.0-archived/_sources/internals/reference/celery.worker.pool.txt================================ Task Pool - celery.worker.pool ================================ .. currentmodule:: celery.worker.pool .. automodule:: celery.worker.pool :members: PKXDD<:celery-1.0-archived/_sources/internals/reference/index.txt=========================== Internal Module Reference =========================== :Release: |version| :Date: |today| .. toctree:: :maxdepth: 2 celery.worker celery.worker.listener celery.worker.job celery.worker.controllers celery.worker.buckets celery.worker.scheduler celery.worker.pool celery.worker.heartbeat celery.worker.control celery.worker.control.builtins celery.worker.control.registry celery.worker.revoke celery.beat celery.backends celery.backends.base celery.backends.amqp celery.backends.database celery.backends.cache celery.backends.mongodb celery.backends.pyredis celery.backends.tyrant celery.execute.trace celery.datastructures celery.log celery.utils celery.utils.timeutils celery.utils.info celery.utils.compat celery.utils.patch celery.platform celery.managers celery.models PKXDDiҹ@celery-1.0-archived/_sources/internals/reference/celery.beat.txt======================================== Clock Service - celery.beat ======================================== .. currentmodule:: celery.beat .. automodule:: celery.beat :members: PKXDDumMcelery-1.0-archived/_sources/internals/reference/celery.backends.database.txt============================================= Backend: Database - celery.backends.database ============================================= .. currentmodule:: celery.backends.database .. automodule:: celery.backends.database :members: PKXDDwFcelery-1.0-archived/_sources/internals/reference/celery.utils.info.txt==================================== Debugging Info - celery.utils.info ==================================== .. currentmodule:: celery.utils.info .. automodule:: celery.utils.info :members: PKXDDK7aNcelery-1.0-archived/_sources/internals/reference/celery.worker.controllers.txt======================================================= Worker Controller Threads - celery.worker.controllers ======================================================= .. currentmodule:: celery.worker.controllers .. automodule:: celery.worker.controllers :members: PKXDDm99Scelery-1.0-archived/_sources/internals/reference/celery.worker.control.registry.txt================================================================== Remote Control Command Registry - celery.worker.control.registry ================================================================== .. currentmodule:: celery.worker.control.registry .. automodule:: celery.worker.control.registry :members: PKXDDrBbHcelery-1.0-archived/_sources/internals/reference/celery.utils.compat.txt============================================ Python Compatibility - celery.utils.compat ============================================ .. currentmodule:: celery.utils.compat .. automodule:: celery.utils.compat :members: PKXDD8QJcelery-1.0-archived/_sources/internals/reference/celery.backends.cache.txt======================================= Backend: Cache - celery.backends.cache ======================================= .. currentmodule:: celery.backends.cache .. automodule:: celery.backends.cache :members: PKXDDɨ\Gcelery-1.0-archived/_sources/internals/reference/celery.utils.patch.txt============================================ Compatibility Patches - celery.utils.patch ============================================ .. currentmodule:: celery.utils.patch .. automodule:: celery.utils.patch :members: PKXDD&Lcelery-1.0-archived/_sources/internals/reference/celery.worker.heartbeat.txt============================================= Worker Heartbeats - celery.worker.heartbeat ============================================= .. currentmodule:: celery.worker.heartbeat .. automodule:: celery.worker.heartbeat :members: PKXDD<Dcelery-1.0-archived/_sources/internals/reference/celery.backends.txt=========================== Backends - celery.backends =========================== .. currentmodule:: celery.backends .. automodule:: celery.backends :members: PKXDD\n)__Icelery-1.0-archived/_sources/internals/reference/celery.worker.revoke.txt============================================== Worker Revoked Tasks - celery.worker.revoke ============================================== .. data:: revoked A :class:`celery.datastructures.LimitedSet` containing revoked task ids. Items expire after one hour, and the structure can only hold 10000 expired items at a time (about 300kb). PKXDDpӔ?celery-1.0-archived/_sources/internals/reference/celery.log.txt========================== Logging - celery.log ========================== .. currentmodule:: celery.log .. automodule:: celery.log :members: PKXDD9A4celery-1.0-archived/_sources/userguide/executing.txt================= Executing Tasks ================= Executing tasks is done with ``apply_async``, and its shortcut: ``delay``. ``delay`` is simple and convenient, as it looks like calling a regular function: .. code-block:: python Task.delay(arg1, arg2, kwarg1="x", kwarg2="y") The same thing using ``apply_async`` is written like this: .. code-block:: python Task.apply_async(args=[arg1, arg2], kwargs={"kwarg1": "x", "kwarg2": "y"}) But ``delay`` doesn't give you as much control as using ``apply_async``. With ``apply_async`` you can override the execution options available as attributes on the ``Task`` class: ``routing_key``, ``exchange``, ``immediate``, ``mandatory``, ``priority``, and ``serializer``. In addition you can set a countdown/eta, or provide a custom broker connection. Let's go over these in more detail. The following examples use this simple task, which adds together two numbers: .. code-block:: python @task def add(x, y): return x + y ETA and countdown ----------------- The ETA (estimated time of arrival) lets you set a specific date and time that is the earliest time at which your task will execute. ``countdown`` is a shortcut to set this by seconds in the future. .. code-block:: python >>> result = add.apply_async(args=[10, 10], countdown=3) >>> result.get() # this takes at least 3 seconds to return 20 Note that your task is guaranteed to be executed at some time *after* the specified date and time has passed, but not necessarily at that exact time. While ``countdown`` is an integer, ``eta`` must be a ``datetime`` object, specifying an exact date and time in the future. This is good if you already have a ``datetime`` object and need to modify it with a ``timedelta``, or when using time in seconds is not very readable. .. code-block:: python from datetime import datetime, timedelta def quickban(username): """Ban user for 24 hours.""" ban(username) tomorrow = datetime.now() + timedelta(days=1) UnbanTask.apply_async(args=[username], eta=tomorrow) Serializers ----------- Data passed between celery and workers has to be serialized to be transferred. The default serializer is :mod:`pickle`, but you can change this for each task. There is built-in support for using ``pickle``, ``JSON`` and ``YAML``, and you can add your own custom serializers by registering them into the carrot serializer registry. The default serializer (pickle) supports Python objects, like ``datetime`` and any custom datatypes you define yourself. But since pickle has poor support outside of the Python language, you need to choose another serializer if you need to communicate with other languages. In that case, ``JSON`` is a very popular choice. The serialization method is sent with the message, so the worker knows how to deserialize any task. Of course, if you use a custom serializer, this must also be registered in the worker. When sending a task the serialization method is taken from the following places in order: The ``serializer`` argument to ``apply_async``, the Task's ``serializer`` attribute, and finally the global default ``CELERY_SERIALIZER`` configuration directive. .. code-block:: python >>> add.apply_async(args=[10, 10], serializer="json") Connections and connection timeouts. ------------------------------------ Currently there is no support for broker connection pools in celery, so this is something you need to be aware of when sending more than one task at a time, as ``apply_async``/``delay`` establishes and closes a connection every time. If you need to send more than one task at the same time, it's a good idea to establish the connection yourself and pass it to ``apply_async``: .. code-block:: python from celery.messaging import establish_connection numbers = [(2, 2), (4, 4), (8, 8), (16, 16)] results = [] connection = establish_connection() try: for args in numbers: res = add.apply_async(args=args, connection=connection) results.append(res) finally: connection.close() print([res.get() for res in results]) In Python 2.5 and above, you can use the ``with`` statement: .. code-block:: python from __future__ import with_statement from celery.messaging import establish_connection numbers = [(2, 2), (4, 4), (8, 8), (16, 16)] results = [] with establish_connection() as connection: for args in numbers: res = add.apply_async(args=args, connection=connection) results.append(res) print([res.get() for res in results]) The connection timeout is the number of seconds to wait before we give up establishing the connection. You can set this with the ``connect_timeout`` argument to ``apply_async``: .. code-block:: python add.apply_async([10, 10], connect_timeout=3) Or if you handle the connection manually: .. code-block:: python connection = establish_connection(connect_timeout=3) Routing options --------------- Celery uses the AMQP routing mechanisms to route tasks to different workers. You can route tasks using the following entities: exchange, queue and routing key. Messages (tasks) are sent to exchanges, a queue binds to an exchange with a routing key. Let's look at an example: Our application has a lot of tasks, some process video, others process images, and some gather collective intelligence about users. Some of these have higher priority than others so we want to make sure the high priority tasks get sent to powerful machines, while low priority tasks are sent to dedicated machines that can handle these at their own pace. For the sake of example we have only one exchange called ``tasks``. There are different types of exchanges that matches the routing key in different ways, the exchange types are: * direct Matches the routing key exactly. * topic In the topic exchange the routing key is made up of words separated by dots (``.``). Words can be matched by the wild cards ``*`` and ``#``, where ``*`` matches one exact word, and ``#`` matches one or many. For example, ``*.stock.#`` matches the routing keys ``usd.stock`` and ``euro.stock.db`` but not ``stock.nasdaq``. (there are also other exchange types, but these are not used by celery) So, we create three queues, ``video``, ``image`` and ``lowpri`` that bind to our ``tasks`` exchange. For the queues we use the following binding keys:: video: video.# image: image.# lowpri: misc.# Now we can send our tasks to different worker machines, by making the workers listen to different queues: .. code-block:: python >>> CompressVideoTask.apply_async(args=[filename], ... routing_key="video.compress") >>> ImageRotateTask.apply_async(args=[filename, 360], routing_key="image.rotate") >>> ImageCropTask.apply_async(args=[filename, selection], routing_key="image.crop") >>> UpdateReccomendationsTask.apply_async(routing_key="misc.recommend") Later, if the crop task is consuming a lot of resources, we can bind some new workers to handle just the ``"image.crop"`` task, by creating a new queue that binds to ``"image.crop``". AMQP options ------------ * mandatory This sets the delivery to be mandatory. An exception will be raised if there are no running workers able to take on the task. * immediate Request immediate delivery. Will raise an exception if the task cannot be routed to a worker immediately. * priority A number between ``0`` and ``9``, where ``0`` is the highest priority. Note that RabbitMQ does not implement AMQP priorities, and maybe your broker does not either, consult your broker's documentation for more information. PKXDDt1I I 2celery-1.0-archived/_sources/userguide/routing.txt=============== Routing Tasks =============== **NOTE** This document refers to functionality only available in brokers using AMQP. Other brokers may implement some functionality, see their respective documenation for more information, or contact the `mailinglist`_. .. _`mailinglist`: http://groups.google.com/group/celery-users AMQP Primer =========== Messages -------- A message consists of headers and a body. Celery uses headers to store the content type of the message and its content encoding. In Celery the content type is usually the serialization format used to serialize the message, and the body contains the name of the task to execute, the task id (UUID), the arguments to execute it with and some additional metadata - like the number of retries and its ETA (if any). This is an example task message represented as a Python dictionary: .. code-block:: python {"task": "myapp.tasks.add", "id": "args": [4, 4], "kwargs": {}} Producers, consumers and brokers -------------------------------- The client sending messages is typically called a *publisher*, or a *producer*, while the entity receiving messages is called a *consumer*. The *broker* is the message server, routing messages from producers to consumers. You are likely to see these terms used a lot in AMQP related material. Exchanges, queues and routing keys. ----------------------------------- TODO Mindblowing one-line simple explanation here. TODO 1. Messages are sent to exchanges. 2. An exchange routes messages to one or more queues. Several exchange types exists, providing different ways to do routing. 3. The message waits in the queue until someone consumes from it. 4. The message is deleted from the queue when it has been acknowledged. The steps required to send and receive messages are: 1. Create an exchange 2. Create a queue 3. Bind the queue to the exchange. Celery automatically creates the entities necessary for the queues in ``CELERY_QUEUES`` to work (unless the queue's ``auto_declare`` setting is set) Here's an example queue configuration with three queues; One for video, one for images and one default queue for everything else: .. code-block:: python CELERY_QUEUES = { "default": { "exchange": "default", "binding_key": "default"}, "videos": { "exchange": "media", "binding_key": "media.video", }, "images": { "exchange": "media", "binding_key": "media.image", } } CELERY_DEFAULT_QUEUE = "default" CELERY_DEFAULT_EXCHANGE_TYPE = "direct" CELERY_DEFAULT_ROUTING_KEY = "default" **NOTE**: In Celery the ``routing_key`` is the key used to send the message, while ``binding_key`` is the key the queue is bound with. In the AMQP API they are both referred to as a routing key. Exchange types -------------- The exchange type defines how the messages are routed through the exchange. The exchange types defined in the standard are ``direct``, ``topic``, ``fanout`` and ``headers``. Also non-standard exchange types are available as plugins to RabbitMQ, like the `last-value-cache plug-in`_ by Michael Bridgen. .. _`last-value-cache plug-in`: http://github.com/squaremo/rabbitmq-lvc-plugin Direct exchanges ~~~~~~~~~~~~~~~~ Direct exchanges match by exact routing keys, so a queue bound with the routing key ``video`` only receives messages with the same routing key. Topic exchanges ~~~~~~~~~~~~~~~ Topic exchanges matches routing keys using dot-separated words, and can include wildcard characters: ``*`` matches a single word, ``#`` matches zero or more words. With routing keys like ``usa.news``, ``usa.weather``, ``norway.news`` and ``norway.weather``, bindings could be ``*.news`` (all news), ``usa.#`` (all items in the USA) or ``usa.weather`` (all USA weather items). Related API commands -------------------- exchange.declare(exchange_name, type, passive, durable, auto_delete, internal) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Declares an exchange by name. * ``passive`` means the exchange won't be created, but you can use this to check if the exchange already exists. * Durable exchanges are persistent. That is - they survive a broker restart. * ``auto_delete`` means the queue will be deleted by the broker when there are no more queues using it. queue.declare(queue_name, passive, durable, exclusive, auto_delete) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Declares a queue by name. * exclusive queues can only be consumed from by the current connection. implies ``auto_delete``. queue.bind(queue_name, exchange_name, routing_key) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Binds a queue to an exchange with a routing key. Unbound queues will not receive messages, so this is necessary. queue.delete(name, if_unused, if_empty) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Deletes a queue and its binding. exchange.delete(name, if_unused) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Deletes an exchange. **NOTE**: Declaring does not necessarily mean "create". When you declare you *assert* that the entity exists and that it's operable. There is no rule as to whom should initially create the exchange/queue/binding, whether consumer or producer. Usually the first one to need it will be the one to create it. Hands-on with the API --------------------- Celery comes with a tool called ``camqadm`` (short for celery AMQP admin). It's used for simple admnistration tasks like creating/deleting queues and exchanges, purging queues and sending messages. In short it's for simple command-line access to the AMQP API. You can write commands directly in the arguments to ``camqadm``, or just start with no arguments to start it in shell-mode:: $ camqadm -> connecting to amqp://guest@localhost:5672/. -> connected. 1> Here ``1>`` is the prompt. The number is counting the number of commands you have executed. Type ``help`` for a list of commands. It also has autocompletion, so you can start typing a command and then hit the ``tab`` key to show a list of possible matches. Now let's create a queue we can send messages to:: 1> exchange.declare testexchange direct ok. 2> queue.declare testqueue ok. queue:testqueue messages:0 consumers:0. 3> queue.bind testqueue testexchange testkey ok. This created the direct exchange ``testexchange``, and a queue named ``testqueue``. The queue is bound to the exchange using the routing key ``testkey``. From now on all messages sent to the exchange ``testexchange`` with routing key ``testkey`` will be moved to this queue. We can send a message by using the ``basic.publish`` command:: 4> basic.publish "This is a message!" testexchange testkey ok. Now that the message is sent we can retrieve it again. We use the ``basic.get`` command here, which pops a single message off the queue, this command is not recommended for production as it implies polling, any real application would declare consumers instead. Pop a message off the queue:: 5> basic.get testqueue {'body': 'This is a message!', 'delivery_info': {'delivery_tag': 1, 'exchange': u'testexchange', 'message_count': 0, 'redelivered': False, 'routing_key': u'testkey'}, 'properties': {}} AMQP uses acknowledgment to signify that a message has been received and processed successfully. The message is sent to the next receiver if it has not been acknowledged before the client connection is closed. Note the delivery tag listed in the structure above; Within a connection channel, every received message has a unique delivery tag, This tag is used to acknowledge the message. Note that delivery tags are not unique across connections, so in another client the delivery tag ``1`` might point to a different message than in this channel. You can acknowledge the message we received using ``basic.ack``:: 6> basic.ack 1 ok. To clean up after our test session we should delete the entities we created:: 7> queue.delete testqueue ok. 0 messages deleted. 8> exchange.delete testexchange ok. PKXDD0celery-1.0-archived/_sources/userguide/index.txt============ User Guide ============ :Release: |version| :Date: |today| .. toctree:: :maxdepth: 2 tasks executing remote-tasks routing PKXDDU,]O]O0celery-1.0-archived/_sources/userguide/tasks.txt======= Tasks ======= .. module:: celery.task.base A task is a class that encapsulates a function and its execution options. Given a function ``create_user``, that takes two arguments: ``username`` and ``password``, you can create a task like this: .. code-block:: python from celery.task import Task class CreateUserTask(Task): def run(self, username, password): create_user(username, password) For convenience there is a shortcut decorator that turns any function into a task, ``celery.decorators.task``: .. code-block:: python from celery.decorators import task from django.contrib.auth import User @task def create_user(username, password): User.objects.create(username=username, password=password) The task decorator takes the same execution options the ``Task`` class does: .. code-block:: python @task(serializer="json") def create_user(username, password): User.objects.create(username=username, password=password) An alternative way to use the decorator is to give the function as an argument instead, but if you do this be sure to set the resulting tasks ``__name__`` attribute, so pickle is able to find it in reverse: .. code-block:: python create_user_task = task()(create_user) create_user_task.__name__ = "create_user_task" Default keyword arguments ========================= Celery supports a set of default arguments that can be forwarded to any task. Tasks can choose not to take these, or list the ones they want. The worker will do the right thing. The current default keyword arguments are: * logfile The log file, can be passed on to ``self.get_logger`` to gain access to the workers log file. See `Logging`_. * loglevel The loglevel used. * task_id The unique id of the executing task. * task_name Name of the executing task. * task_retries How many times the current task has been retried. An integer starting at ``0``. * task_is_eager Set to ``True`` if the task is executed locally in the client, and not by a worker. * delivery_info Additional message delivery information. This is a mapping containing the exchange and routing key used to deliver this task. It's used by e.g. :meth:`retry` to resend the task to the same destination queue. **NOTE** As some messaging backends doesn't have advanced routing capabilities, you can't trust the availability of keys in this mapping. Logging ======= You can use the workers logger to add diagnostic output to the worker log: .. code-block:: python class AddTask(Task): def run(self, x, y, **kwargs): logger = self.get_logger(**kwargs) logger.info("Adding %s + %s" % (x, y)) return x + y or using the decorator syntax: .. code-block:: python @task() def add(x, y, **kwargs): logger = add.get_logger(**kwargs) logger.info("Adding %s + %s" % (x, y)) return x + y There are several logging levels available, and the workers ``loglevel`` setting decides whether or not they will be written to the log file. Retrying a task if something fails ================================== Simply use :meth:`Task.retry` to re-send the task. It will do the right thing, and respect the :attr:`Task.max_retries` attribute: .. code-block:: python @task() def send_twitter_status(oauth, tweet, **kwargs): try: twitter = Twitter(oauth) twitter.update_status(tweet) except (Twitter.FailWhaleError, Twitter.LoginError), exc: send_twitter_status.retry(args=[oauth, tweet], kwargs=kwargs, exc=exc) Here we used the ``exc`` argument to pass the current exception to :meth:`Task.retry`. At each step of the retry this exception is available as the tombstone (result) of the task. When :attr:`Task.max_retries` has been exceeded this is the exception raised. However, if an ``exc`` argument is not provided the :exc:`RetryTaskError` exception is raised instead. **Important note:** The task has to take the magic keyword arguments in order for max retries to work properly, this is because it keeps track of the current number of retries using the ``task_retries`` keyword argument passed on to the task. In addition, it also uses the ``task_id`` keyword argument to use the same task id, and ``delivery_info`` to route the retried task to the same destination. Using a custom retry delay -------------------------- When a task is to be retried, it will wait for a given amount of time before doing so. The default delay is in the :attr:`Task.default_retry_delay` attribute on the task. By default this is set to 3 minutes. Note that the unit for setting the delay is in seconds (int or float). You can also provide the ``countdown`` argument to :meth:`Task.retry` to override this default. .. code-block:: python class MyTask(Task): default_retry_delay = 30 * 60 # retry in 30 minutes def run(self, x, y, **kwargs): try: ... except Exception, exc: self.retry([x, y], kwargs, exc=exc, countdown=60) # override the default and # - retry in 1 minute Task options ============ * name The name the task is registered as. You can set this name manually, or just use the default which is automatically generated using the module and class name. * abstract Abstract classes are not registered, but are used as the superclass when making new task types by subclassing. * max_retries The maximum number of attempted retries before giving up. If this is exceeded the :exc`celery.execptions.MaxRetriesExceeded` exception will be raised. Note that you have to retry manually, it's not something that happens automatically. * default_retry_delay Default time in seconds before a retry of the task should be executed. Can be either an ``int`` or a ``float``. Default is a 1 minute delay (``60 seconds``). * rate_limit Set the rate limit for this task type, that is, how many times in a given period of time is the task allowed to run. If this is ``None`` no rate limit is in effect. If it is an integer, it is interpreted as "tasks per second". The rate limits can be specified in seconds, minutes or hours by appending ``"/s"``, ``"/m"`` or "``/h"``" to the value. Example: ``"100/m" (hundred tasks a minute). Default is the ``CELERY_DEFAULT_RATE_LIMIT`` setting, which if not specified means rate limiting for tasks is turned off by default. * ignore_result Don't store the status and return value. This means you can't use the :class:`celery.result.AsyncResult` to check if the task is done, or get its return value. Only use if you need the performance and is able live without these features. Any exceptions raised will store the return value/status as usual. * disable_error_emails Disable error e-mails for this task. Default is ``False``. *Note:* You can also turn off error e-mails globally using the ``CELERY_SEND_TASK_ERROR_EMAILS`` setting. * serializer A string identifying the default serialization method to use. Defaults to the ``CELERY_TASK_SERIALIZER`` setting. Can be ``pickle`` ``json``, ``yaml``, or any custom serialization methods that have been registered with :mod:`carrot.serialization.registry`. Please see :doc:`executing` for more information. Message and routing options --------------------------- * routing_key Override the global default ``routing_key`` for this task. * exchange Override the global default ``exchange`` for this task. * mandatory If set, the task message has mandatory routing. By default the task is silently dropped by the broker if it can't be routed to a queue. However - If the task is mandatory, an exception will be raised instead. * immediate Request immediate delivery. If the task cannot be routed to a task worker immediately, an exception will be raised. This is instead of the default behavior, where the broker will accept and queue the task, but with no guarantee that the task will ever be executed. * priority The message priority. A number from ``0`` to ``9``, where ``0`` is the highest. **Note:** RabbitMQ does not support priorities yet. See :doc:`executing` for more information about the messaging options available. Example ======= Let's take a real wold example; A blog where comments posted needs to be filtered for spam. When the comment is created, the spam filter runs in the background, so the user doesn't have to wait for it to finish. We have a Django blog application allowing comments on blog posts. We'll describe parts of the models/views and tasks for this application. blog/models.py -------------- The comment model looks like this: .. code-block:: python from django.db import models from django.utils.translation import ugettext_lazy as _ class Comment(models.Model): name = models.CharField(_("name"), max_length=64) email_address = models.EmailField(_("e-mail address")) homepage = models.URLField(_("home page"), blank=True, verify_exists=False) comment = models.TextField(_("comment")) pub_date = models.DateTimeField(_("Published date"), editable=False, auto_add_now=True) is_spam = models.BooleanField(_("spam?"), default=False, editable=False) class Meta: verbose_name = _("comment") verbose_name_plural = _("comments") In the view where the comment is posted, we first write the comment to the database, then we launch the spam filter task in the background. blog/views.py ------------- .. code-block:: python from django import forms frmo django.http import HttpResponseRedirect from django.template.context import RequestContext from django.shortcuts import get_object_or_404, render_to_response from blog import tasks from blog.models import Comment class CommentForm(forms.ModelForm): class Meta: model = Comment def add_comment(request, slug, template_name="comments/create.html"): post = get_object_or_404(Entry, slug=slug) remote_addr = request.META.get("REMOTE_ADDR") if request.method == "post": form = CommentForm(request.POST, request.FILES) if form.is_valid(): comment = form.save() # Check spam asynchronously. tasks.spam_filter.delay(comment_id=comment.id, remote_addr=remote_addr) return HttpResponseRedirect(post.get_absolute_url()) else: form = CommentForm() context = RequestContext(request, {"form": form}) return render_to_response(template_name, context_instance=context) To filter spam in comments we use `Akismet`_, the service used to filter spam in comments posted to the free weblog platform `Wordpress`. `Akismet`_ is free for personal use, but for commercial use you need to pay. You have to sign up to their service to get an API key. To make API calls to `Akismet`_ we use the `akismet.py`_ library written by Michael Foord. blog/tasks.py ------------- .. code-block:: python from akismet import Akismet from celery.decorators import task from django.core.exceptions import ImproperlyConfigured from django.contrib.sites.models import Site from blog.models import Comment @task def spam_filter(comment_id, remote_addr=None, **kwargs): logger = spam_filter.get_logger(**kwargs) logger.info("Running spam filter for comment %s" % comment_id) comment = Comment.objects.get(pk=comment_id) current_domain = Site.objects.get_current().domain akismet = Akismet(settings.AKISMET_KEY, "http://%s" % domain) if not akismet.verify_key(): raise ImproperlyConfigured("Invalid AKISMET_KEY") is_spam = akismet.comment_check(user_ip=remote_addr, comment_content=comment.comment, comment_author=comment.name, comment_author_email=comment.email_address) if is_spam: comment.is_spam = True comment.save() return is_spam .. _`Akismet`: http://akismet.com/faq/ .. _`akismet.py`: http://www.voidspace.org.uk/downloads/akismet.py How it works ============ Here comes the technical details, this part isn't something you need to know, but you may be interested. All defined tasks are listed in a registry. The registry contains a list of task names and their task classes. You can investigate this registry yourself: .. code-block:: python >>> from celery import registry >>> from celery import task >>> registry.tasks {'celery.delete_expired_task_meta': , 'celery.execute_remote': , 'celery.task.rest.RESTProxyTask': , 'celery.task.rest.Task': , 'celery.map_async': , 'celery.ping': } This is the list of tasks built-in to celery. Note that we had to import ``celery.task`` first for these to show up. This is because the tasks will only be registered when the module they are defined in is imported. The default loader imports any modules listed in the ``CELERY_IMPORTS`` setting. If using Django it loads all ``tasks.py`` modules for the applications listed in ``INSTALLED_APPS``. If you want to do something special you can create your own loader to do what you want. The entity responsible for registering your task in the registry is a meta class, :class:`TaskType`. This is the default meta class for ``Task``. If you want to register your task manually you can set the ``abstract`` attribute: .. code-block:: python class MyTask(Task): abstract = True This way the task won't be registered, but any task subclassing it will. When tasks are sent, we don't send the function code, just the name of the task. When the worker receives the message it can just look it up in the task registry to find the execution code. This means that your workers should always be updated with the same software as the client. This is a drawback, but the alternative is a technical challenge that has yet to be solved. Tips and Best Practices ======================= Ignore results you don't want ----------------------------- If you don't care about the results of a task, be sure to set the ``ignore_result`` option, as storing results wastes time and resources. .. code-block:: python @task(ignore_result=True) def mytask(...) something() Results can even be disabled globally using the ``CELERY_IGNORE_RESULT`` setting. Disable rate limits if they're not used --------------------------------------- Disabling rate limits altogether is recommended if you don't have any tasks using them. This is because the rate limit subsystem introduces quite a lot of complexity. Set the ``CELERY_DISABLE_RATE_LIMITS`` setting to globally disable rate limits: .. code-block:: python CELERY_DISABLE_RATE_LIMITS = True Avoid launching synchronous subtasks ------------------------------------ Having a task wait for the result of another task is really inefficient, and may even cause a deadlock if the worker pool is exhausted. Make your design asynchronous instead, for example by using *callbacks*. Bad: .. code-block:: python @task() def update_page_info(url): page = fetch_page.delay(url).get() info = parse_page.delay(url, page).get() store_page_info.delay(url, info) @task() def fetch_page(url): return myhttplib.get(url) @task() def parse_page(url, page): return myparser.parse_document(page) @task() def store_page_info(url, info): return PageInfo.objects.create(url, info) Good: .. code-block:: python from functools import curry @task(ignore_result=True) def update_page_info(url): # fetch_page -> parse_page -> store_page callback = curry(parse_page.delay, callback=store_page_info) fetch_page.delay(url, callback=callback) @task(ignore_result=True) def fetch_page(url, callback=None): page = myparser.parse_document(page) if callback: callback(page) @task(ignore_result=True) def parse_page(url, page, callback=None): info = myparser.parse_document(page) if callback: callback(url, info) @task(ignore_result=True) def store_page_info(url, info): PageInfo.objects.create(url, info) Performance and Strategies ========================== Granularity ----------- The task's granularity is the degree of parallelization your task have. It's better to have many small tasks, than a few long running ones. With smaller tasks, you can process more tasks in parallel and the tasks won't run long enough to block the worker from processing other waiting tasks. However, there's a limit. Sending messages takes processing power and bandwidth. If your tasks are so short the overhead of passing them around is worse than just executing them in-line, you should reconsider your strategy. There is no universal answer here. Data locality ------------- The worker processing the task should be as close to the data as possible. The best would be to have a copy in memory, the worst being a full transfer from another continent. If the data is far away, you could try to run another worker at location, or if that's not possible, cache often used data, or preload data you know is going to be used. The easiest way to share data between workers is to use a distributed caching system, like `memcached`_. For more information about data-locality, please read http://research.microsoft.com/pubs/70001/tr-2003-24.pdf .. _`memcached`: http://memcached.org/ State ----- Since celery is a distributed system, you can't know in which process, or even on what machine the task will run. Indeed you can't even know if the task will run in a timely manner, so please be wary of the state you pass on to tasks. One gotcha is Django model objects. They shouldn't be passed on as arguments to task classes, it's almost always better to re-fetch the object from the database instead, as there are possible race conditions involved. Imagine the following scenario where you have an article and a task that automatically expands some abbreviations in it. .. code-block:: python class Article(models.Model): title = models.CharField() body = models.TextField() @task def expand_abbreviations(article): article.body.replace("MyCorp", "My Corporation") article.save() First, an author creates an article and saves it, then the author clicks on a button that initiates the abbreviation task. >>> article = Article.objects.get(id=102) >>> expand_abbreviations.delay(model_object) Now, the queue is very busy, so the task won't be run for another 2 minutes, in the meantime another author makes some changes to the article, when the task is finally run, the body of the article is reverted to the old version, because the task had the old body in its argument. Fixing the race condition is easy, just use the article id instead, and re-fetch the article in the task body: .. code-block:: python @task def expand_abbreviations(article_id) article = Article.objects.get(id=article_id) article.body.replace("MyCorp", "My Corporation") article.save() >>> expand_abbreviations(article_id) There might even be performance benefits to this approach, as sending large messages may be expensive. PKXDDE\ 7celery-1.0-archived/_sources/userguide/remote-tasks.txt================================ HTTP Callback Tasks (Webhooks) ================================ .. module:: celery.task.http Executing tasks on a web server ------------------------------- If you need to call into another language, framework or similar, you can do so by using HTTP callback tasks. The HTTP callback tasks use GET/POST arguments and a simple JSON response to return results. The scheme to call a task is:: GET http://example.com/mytask/?arg1=a&arg2=b&arg3=c or using POST:: POST http://example.com/mytask **Note:** POST data has to be form encoded. Whether to use GET or POST is up to you and your requirements. The web page should then return a response in the following format if the execution was successful:: {"status": "success", "retval": ....} or if there was an error:: {"status": "failure": "reason": "Invalid moon alignment."} With this information you could define a simple task in Django: .. code-block:: python from django.http import HttpResponse from anyjson import serialize def multiply(request): x = int(request.GET["x"]) y = int(request.GET["y"]) result = x * y response = {"status": "success", "retval": result} return HttpResponse(serialize(response), mimetype="application/json") or in Ruby on Rails: .. code-block:: ruby def multiply @x = params[:x].to_i @y = params[:y].to_i @status = {:status => "success", :retval => @x * @y} render :json => @status end You can easily port this scheme to any language/framework; new examples and libraries are very welcome. To execute the task you use the :class:`URL` class: >>> from celery.task.http import URL >>> res = URL("http://example.com/multiply").get_async(x=10, y=10) :class:`URL` is a shortcut to the :class:`HttpDispatchTask`. You can subclass this to extend the functionality. >>> from celery.task.http import HttpDispatchTask >>> res = HttpDispatchTask.delay(url="http://example.com/multiply", method="GET", x=10, y=10) >>> res.get() 100 The output of celeryd (or the logfile if you've enabled it) should show the task being processed:: [INFO/MainProcess] Task celery.task.http.HttpDispatchTask [f2cc8efc-2a14-40cd-85ad-f1c77c94beeb] processed: 100 Since applying tasks can be done via HTTP using the ``celery.views.apply`` view, executing tasks from other languages is easy. For an example service exposing tasks via HTTP you should have a look at ``examples/celery_http_gateway``. PKXDD&  7celery-1.0-archived/_sources/_theme/ADCTheme/README.txt============== How To Install ============== Install in Sphinx ----------------- Copy this directory into the ``sphinx/templates`` directory where Shpinx is installed. For example, a standard install of sphinx on Mac OS X is at ``/Library/Python/2.6/site-packages/Sphinx-0.6.3-py2.6.egg/`` Install Somewhere Else ---------------------- If you want to install this theme somewhere else, you will have to modify the ``conf.py`` file. :: templates_path = ['/absolute/path/to/dir/','relative/path/'] Install Directly in Your Documentation -------------------------------------- If you want to include the files directly in the documentation, so another person can build your documentation, it is easy. 1. Copy over everything in the ``static`` directory into the ``_static`` directory of your documentation's source folder. 2. Copy the ``layout.html`` file into the ``_templates`` directory of your documentation's source folder. 3. Alter your ``conf.py`` :: html_theme = 'basic' instead of ``'ADCtheme'``. Making Sphinx Use the Theme --------------------------- If you aren't installing the files directly into your documentation, edit the ``conf.py`` file and make the following setting: :: html_theme = 'ADCtheme' Screen Shots ------------ .. image:: http://github.com/coordt/ADCtheme/raw/master/static/scrn1.png .. image:: http://github.com/coordt/ADCtheme/raw/master/static/scrn2.png To Do ----- * Gotta get the javascript working so the Table of Contents is hide-able. * Probably lots of css cleanup.PKXDDaO<celery-1.0-archived/_sources/_theme/ADCThemePrint/README.txt============== How To Install ============== Install in Sphinx ----------------- Copy this directory into the ``sphinx/templates`` directory where Shpinx is installed. For example, a standard install of sphinx on Mac OS X is at ``/Library/Python/2.6/site-packages/Sphinx-0.6.3-py2.6.egg/`` Install Somewhere Else ---------------------- If you want to install this theme somewhere else, you will have to modify the ``conf.py`` file. :: templates_path = ['/absolute/path/to/dir/','relative/path/'] Making Sphinx Use the Theme --------------------------- Edit the ``conf.py`` file and make the following setting: :: html_theme = 'ADCtheme' Screen Shots ------------ .. image:: http://github.com/coordt/ADCtheme/raw/master/static/scrn1.png .. image:: http://github.com/coordt/ADCtheme/raw/master/static/scrn2.png To Do ----- * Gotta get the javascript working so the Table of Contents is hide-able. * Probably lots of css cleanup.PKXDD1Ṣ:celery-1.0-archived/_sources/releases/1.0/announcement.txt=============================== Celery 1.0 has been released! =============================== We're happy to announce the release of Celery 1.0. What is it? =========== Celery is a task queue/job queue based on distributed message passing. It is focused on real-time operation, but supports scheduling as well. The execution units, called tasks, are executed concurrently on one or more worker servers. Tasks can execute asynchronously (in the background) or synchronously (wait until ready). Celery is already used in production to process millions of tasks a day. Celery was originally created for use with Django, but is now usable from any Python project. It can also operate with other languages via webhooks. The recommended message broker is `RabbitMQ`_, but support for Redis and databases is also available. .. _`RabbitMQ`: http://rabbitmq.org Features -------- See http://ask.github.com/celery/getting-started/introduction.html#features Stable API ========== From this version on the public API is considered stable. This means there won't be any backwards incompatible changes in new minor versions. Changes to the API will be deprecated; so, for example, if we decided to remove a function that existed in Celery 1.0: * Celery 1.2 will contain a backwards-compatible replica of the function which will raise a ``PendingDeprecationWarning``. This warning is silent by default; you need to explicitly turn on display of these warnings. * Celery 1.4 will contain the backwards-compatible replica, but the warning will be promoted to a full-fledged ``DeprecationWarning``. This warning is loud by default, and will likely be quite annoying. * Celery 1.6 will remove the feature outright. See the `Celery Deprecation Timeline`_ for a list of pending removals. .. _`Celery Deprecation Timeline`: http://ask.github.com/celery/internals/deprecation.html What's new? =========== * Task decorators Write tasks as regular functions and decorate them. There are both :func:`task`, and :func:`periodic_task` decorators. * Tasks are automatically registered Registering the tasks manually was getting tedious, so now you don't have to anymore. You can still do it manually if you need to, just disable :attr:`Task.autoregister`. The concept of abstract task classes has also been introduced, this is like django models, where only the subclasses of an abstract task is registered. * Events If enabled, the worker will send events, telling you what tasks it executes, their results, and how long it took to execute them. It also sends out heartbeats, so listeners are able to detect nonfunctional workers. This is the basis for the new real-time web monitor we're working on (`celerymon`_). .. _`celerymon`: http://github.com/ask/celerymon/ * Rate limiting Global and per task rate limits. 10 tasks a second? or one an hour? You decide. It's using the awesome `token bucket algorithm`_, which is commonly used for network traffic shaping. It accounts for bursts of activity, so your workers won't be bored by having nothing to do. .. _`token bucket algorithm`: http://en.wikipedia.org/wiki/Token_bucket * New periodic task service. Periodic tasks are no longer dispatched by ``celeryd``, but instead by a separate service called ``celerybeat``. This is an optimized, centralized service dedicated to your periodic tasks, which means you don't have to worry about deadlocks or race conditions any more. But that does mean you have to make sure only one instance of this service is running at any one time. **TIP:** If you're only running a single ``celeryd`` server, you can embed ``celerybeat`` inside it. Just add the ``--beat`` argument. * Broadcast commands If you change your mind and don't want to run a task after all, you now have the option to revoke it. Also, you can rate limit tasks or even shut down the worker remotely. It doesn't have many commands yet, but we're waiting for broadcast commands to reach its full potential, so please share your ideas if you have any. * Multiple queues The worker is able to receive tasks on multiple queues at once. This opens up a lot of new possibilities when combined with the impressive routing support in AMQP. * Platform agnostic message format. The message format has been standardized and is now using the ISO-8601 format for dates instead of Python ``datetime`` objects. This means you can write task consumers in other languages than Python (``eceleryd`` anyone?) * Timely Periodic tasks are now scheduled on the clock, i.e. ``timedelta(hours=1)`` means every hour at :00 minutes, not every hour from the server starts. To revert to the previous behavior you have the option to enable :attr:`PeriodicTask.relative`. * ... and a lot more! To read about these and other changes in detail, please refer to the `changelog`_. This document contains crucial information for those upgrading from a previous version of Celery, so be sure to read the entire change set before you continue. .. _`changelog`: http://ask.github.com/celery/changelog.html **TIP:** If you install the :mod:`setproctitle` module you can see which task each worker process is currently executing in ``ps`` listings. Just install it using pip: ``pip install setproctitle``. Resources ========= * Homepage: http://celeryproject.org * Download: http://pypi.python.org/pypi/celery * Documentation: http://celeryproject.org/docs/ * Changelog: http://celeryproject.org/docs/changelog.html * Code: http://github.com/ask/celery/ * FAQ: http://ask.github.com/celery/faq.html * Mailing-list: http://groups.google.com/group/celery-users * IRC: #celery on irc.freenode.net. PKXDD¸zz7celery-1.0-archived/_sources/tutorials/clickcounter.txt============================================================ Tutorial: Creating a click counter using carrot and celery ============================================================ Introduction ============ A click counter should be easy, right? Just a simple view that increments a click in the DB and forwards you to the real destination. This would work well for most sites, but when traffic starts to increase, you are likely to bump into problems. One database write for every click is not good if you have millions of clicks a day. So what can you do? In this tutorial we will send the individual clicks as messages using ``carrot``, and then process them later with a ``celery`` periodic task. Celery and carrot is excellent in tandem, and while this might not be the perfect example, you'll at least see one example how of they can be used to solve a task. The model ========= The model is simple, ``Click`` has the URL as primary key and a number of clicks for that URL. Its manager, ``ClickManager`` implements the ``increment_clicks`` method, which takes a URL and by how much to increment its count by. *clickmuncher/models.py*: .. code-block:: python from django.db import models from django.utils.translation import ugettext_lazy as _ class ClickManager(models.Manager): def increment_clicks(self, for_url, increment_by=1): """Increment the click count for an URL. >>> Click.objects.increment_clicks("http://google.com", 10) """ click, created = self.get_or_create(url=for_url, defaults={"click_count": increment_by}) if not created: click.click_count += increment_by click.save() return click.click_count class Click(models.Model): url = models.URLField(_(u"URL"), verify_exists=False, unique=True) click_count = models.PositiveIntegerField(_(u"click_count"), default=0) objects = ClickManager() class Meta: verbose_name = _(u"URL clicks") verbose_name_plural = _(u"URL clicks") Using carrot to send clicks as messages ======================================== The model is normal django stuff, nothing new there. But now we get on to the messaging. It has been a tradition for me to put the projects messaging related code in its own ``messaging.py`` module, and I will continue to do so here so maybe you can adopt this practice. In this module we have two functions: * ``send_increment_clicks`` This function sends a simple message to the broker. The message body only contains the URL we want to increment as plain-text, so the exchange and routing key play a role here. We use an exchange called ``clicks``, with a routing key of ``increment_click``, so any consumer binding a queue to this exchange using this routing key will receive these messages. * ``process_clicks`` This function processes all currently gathered clicks sent using ``send_increment_clicks``. Instead of issuing one database query for every click it processes all of the messages first, calculates the new click count and issues one update per URL. A message that has been received will not be deleted from the broker until it has been acknowledged by the receiver, so if the receiver dies in the middle of processing the message, it will be re-sent at a later point in time. This guarantees delivery and we respect this feature here by not acknowledging the message until the clicks has actually been written to disk. **Note**: This could probably be optimized further with some hand-written SQL, but it will do for now. Let's say it's an exercise left for the picky reader, albeit a discouraged one if you can survive without doing it. On to the code... *clickmuncher/messaging.py*: .. code-block:: python from carrot.connection import DjangoBrokerConnection from carrot.messaging import Publisher, Consumer from clickmuncher.models import Click def send_increment_clicks(for_url): """Send a message for incrementing the click count for an URL.""" connection = DjangoBrokerConnection() publisher = Publisher(connection=connection, exchange="clicks", routing_key="increment_click", exchange_type="direct") publisher.send(for_url) publisher.close() connection.close() def process_clicks(): """Process all currently gathered clicks by saving them to the database.""" connection = DjangoBrokerConnection() consumer = Consumer(connection=connection, queue="clicks", exchange="clicks", routing_key="increment_click", exchange_type="direct") # First process the messages: save the number of clicks # for every URL. clicks_for_url = {} messages_for_url = {} for message in consumer.iterqueue(): url = message.body clicks_for_url[url] = clicks_for_url.get(url, 0) + 1 # We also need to keep the message objects so we can ack the # messages as processed when we are finished with them. if url in messages_for_url: messages_for_url[url].append(message) else: messages_for_url[url] = [message] # Then increment the clicks in the database so we only need # one UPDATE/INSERT for each URL. for url, click_count in clicks_for_urls.items(): Click.objects.increment_clicks(url, click_count) # Now that the clicks has been registered for this URL we can # acknowledge the messages [message.ack() for message in messages_for_url[url]] consumer.close() connection.close() View and URLs ============= This is also simple stuff, don't think I have to explain this code to you. The interface is as follows, if you have a link to http://google.com you would want to count the clicks for, you replace the URL with: http://mysite/clickmuncher/count/?u=http://google.com and the ``count`` view will send off an increment message and forward you to that site. *clickmuncher/views.py*: .. code-block:: python from django.http import HttpResponseRedirect from clickmuncher.messaging import send_increment_clicks def count(request): url = request.GET["u"] send_increment_clicks(url) return HttpResponseRedirect(url) *clickmuncher/urls.py*: .. code-block:: python from django.conf.urls.defaults import patterns, url from clickmuncher import views urlpatterns = patterns("", url(r'^$', views.count, name="clickmuncher-count"), ) Creating the periodic task ========================== Processing the clicks every 30 minutes is easy using celery periodic tasks. *clickmuncher/tasks.py*: .. code-block:: python from celery.task import PeriodicTask from clickmuncher.messaging import process_clicks from datetime import timedelta class ProcessClicksTask(PeriodicTask): run_every = timedelta(minutes=30) def run(self, \*\*kwargs): process_clicks() We subclass from :class:`celery.task.base.PeriodicTask`, set the ``run_every`` attribute and in the body of the task just call the ``process_clicks`` function we wrote earlier. Finishing ========= There are still ways to improve this application. The URLs could be cleaned so the URL http://google.com and http://google.com/ is the same. Maybe it's even possible to update the click count using a single UPDATE query? If you have any questions regarding this tutorial, please send a mail to the mailing-list or come join us in the #celery IRC channel at Freenode: http://celeryq.org/introduction.html#getting-help PKXDD| | 6celery-1.0-archived/_sources/tutorials/otherqueues.txt========================================================== Using Celery with Redis/Database as the messaging queue. ========================================================== There's a plug-in for celery that enables the use of Redis or an SQL database as the messaging queue. This is not part of celery itself, but exists as an extension to `carrot`_. .. _`carrot`: http://ask.github.com/carrot .. _`ghettoq`: http://ask.github.com/ghettoq Installation ============ You need to install the `ghettoq`_ library:: $ pip install -U ghettoq Redis ===== For the Redis support you have to install the Python redis client:: $ pip install -U redis Configuration ------------- Configuration is easy, set the carrot backend, and configure the location of your Redis database:: CARROT_BACKEND = "ghettoq.taproot.Redis" BROKER_HOST = "localhost" # Maps to redis host. BROKER_PORT = 6379 # Maps to redis port. BROKER_VHOST = "celery" # Maps to database name. Database ======== Configuration ------------- The database backend uses the Django ``DATABASE_*`` settings for database configuration values. #. Set your carrot backend:: CARROT_BACKEND = "ghettoq.taproot.Database" #. Add ``ghettoq`` to ``INSTALLED_APPS``:: INSTALLED_APPS = ("ghettoq", ) #. Verify you database settings:: DATABASE_ENGINE = "mysql" DATABASE_NAME = "mydb" DATABASE_USER = "myuser" DATABASE_PASSWORD = "secret" The above is just an example, if you haven't configured your database before you should read the Django database settings reference: http://docs.djangoproject.com/en/1.1/ref/settings/#database-engine #. Sync your database schema. When using Django:: $ python manage.py syncdb Or if you're not using django, but the default loader instead run ``celeryinit``:: $ celeryinit Important notes --------------- These message queues does not have the concept of exchanges and routing keys, there's only the queue entity. As a result of this you need to set the name of the exchange to be the same as the queue:: CELERY_DEFAULT_EXCHANGE = "tasks" or in a custom queue-mapping: .. code-block:: python CELERY_QUEUES = { "tasks": {"exchange": "tasks"}, "feeds": {"exchange": "feeds"}, } This isn't a problem if you use the default queue setting, as the default is already using the same name for queue/exchange. PKXDDTȕ0celery-1.0-archived/_sources/tutorials/index.txt=========== Tutorials =========== :Release: |version| :Date: |today| .. toctree:: :maxdepth: 2 external otherqueues clickcounter PKXDDTG 3celery-1.0-archived/_sources/tutorials/external.txt================================== External tutorials and resources ================================== Introduction to Celery ---------------------- Awesome slides from when `Idan Gazit`_ had a talk about Celery at `PyWeb-IL`_: http://www.slideshare.net/idangazit/an-introduction-to-celery .. _`Idan Gazit`: http://twitter.com/IdanGazit .. _`PyWeb-IL`: http://groups.google.com/group/pyweb-il .. raw:: html RabbitMQ, Celery and Django =========================== Great Celery tutorial by `Robert Pogorzelski`_ at his blog "Happy Stream of Thoughts": http://robertpogorzelski.com/blog/2009/09/10/rabbitmq-celery-and-django/ .. _`Robert Pogorzelski`: http://robertpogorzelski.com/ Message Queues, Django and Celery Quick Start ============================================= Celery tutorial by `Rich Leland`_, the installation section is Mac OS X specific: http://mathematism.com/2010/feb/16/message-queues-django-and-celery-quick-start/ .. _`Rich Leland`: http://twitter.com/richleland Background task processing and deferred execution in Django =========================================================== `Alon Swartz`_ writes about celery and RabbitMQ on his blog: http://www.turnkeylinux.org/blog/django-celery-rabbitmq .. _`Alon Swartz`: http://twitter.com/alonswartz Build a processing queue [...] in less than a day using RabbitMQ and Celery =========================================================================== Tutorial in 2 parts written by `Tim Bull`_: http://timbull.com/build-a-processing-queue-with-multi-threading .. _`Tim Bull`: http://twitter.com/timbull How to get celeryd to work on FreeBSD ===================================== Installing multiprocessing on FreeBSD isn't that easy, but thanks to `Viktor Petersson`_ we now have a step-to-step guide: http://www.playingwithwire.com/2009/10/how-to-get-celeryd-to-work-on-freebsd/ .. _`Viktor Petersson`: http://twitter.com/vpetersson Web-based 3D animation software =============================== Indy Chang Liu at `ThinkingCactus`_ uses Celery to render animations asynchronously (PDF): http://ojs.pythonpapers.org/index.php/tppm/article/viewFile/105/122 .. _`ThinkingCactus`: http://thinkingcactus.com/ RabbitMQ with Python and Ruby ============================= http://www.slideshare.net/hungryblank/rabbitmq-with-python-and-ruby-rupy-2009 PKXDD  6celery-1.0-archived/_sources/reference/celery.conf.txt============================ Configuration - celery.conf ============================ .. data:: QUEUES Queue name/options mapping. .. data:: DEFAULT_QUEUE Name of the default queue. .. data:: DEFAULT_EXCHANGE Default exchange. .. data:: DEFAULT_EXCHANGE_TYPE Default exchange type. .. data:: DEFAULT_DELIVERY_MODE Default delivery mode (``"persistent"`` or ``"non-persistent"``). Default is ``"persistent"``. .. data:: DEFAULT_ROUTING_KEY Default routing key used when sending tasks. .. data:: BROKER_CONNECTION_TIMEOUT The timeout in seconds before we give up establishing a connection to the AMQP server. .. data:: BROADCAST_QUEUE Name prefix for the queue used when listening for broadcast messages. The workers hostname will be appended to the prefix to create the final queue name. Default is ``"celeryctl"``. .. data:: BROADCAST_EXCHANGE Name of the exchange used for broadcast messages. Default is ``"celeryctl"``. .. data:: BROADCAST_EXCHANGE_TYPE Exchange type used for broadcast messages. Default is ``"fanout"``. .. data:: EVENT_QUEUE Name of queue used to listen for event messages. Default is ``"celeryevent"``. .. data:: EVENT_EXCHANGE Exchange used to send event messages. Default is ``"celeryevent"``. .. data:: EVENT_EXCHANGE_TYPE Exchange type used for the event exchange. Default is ``"topic"``. .. data:: EVENT_ROUTING_KEY Routing key used for events. Default is ``"celeryevent"``. .. data:: EVENT_SERIALIZER Type of serialization method used to serialize events. Default is ``"json"``. .. data:: RESULT_EXCHANGE Exchange used by the AMQP result backend to publish task results. Default is ``"celeryresult"``. .. data:: CELERY_SEND_TASK_ERROR_EMAILS If set to ``True``, errors in tasks will be sent to admins by e-mail. If unset, it will send the e-mails if ``settings.DEBUG`` is ``True``. .. data:: ALWAYS_EAGER Always execute tasks locally, don't send to the queue. .. data:: TASK_RESULT_EXPIRES Task tombstone expire time in seconds. .. data:: IGNORE_RESULT If enabled, the default behavior will be to not store task results. .. data:: TRACK_STARTED If enabled, the default behavior will be to track when tasks starts by storing the :const:`STARTED` state. .. data:: ACKS_LATE If enabled, the default behavior will be to acknowledge task messages after the task is executed. .. data:: STORE_ERRORS_EVEN_IF_IGNORED If enabled, task errors will be stored even though ``Task.ignore_result`` is enabled. .. data:: MAX_CACHED_RESULTS Total number of results to store before results are evicted from the result cache. .. data:: BROKER_CONNECTION_RETRY Automatically try to re-establish the connection to the AMQP broker if it's lost. .. data:: BROKER_CONNECTION_MAX_RETRIES Maximum number of retries before we give up re-establishing a connection to the broker. If this is set to ``0`` or ``None``, we will retry forever. Default is ``100`` retries. .. data:: TASK_SERIALIZER A string identifying the default serialization method to use. Can be ``pickle`` (default), ``json``, ``yaml``, or any custom serialization methods that have been registered with :mod:`carrot.serialization.registry`. Default is ``pickle``. .. data:: RESULT_BACKEND The backend used to store task results (tombstones). .. data:: CELERY_CACHE_BACKEND Use a custom cache backend for celery. If not set the django-global cache backend in ``CACHE_BACKEND`` will be used. .. data:: SEND_EVENTS If set, celery will send events that can be captured by monitors like ``celerymon``. Default is: ``False``. .. data:: DEFAULT_RATE_LIMIT The default rate limit applied to all tasks which doesn't have a custom rate limit defined. (Default: None) .. data:: DISABLE_RATE_LIMITS If ``True`` all rate limits will be disabled and all tasks will be executed as soon as possible. .. data:: CELERYBEAT_LOG_LEVEL Default log level for celerybeat. Default is: ``INFO``. .. data:: CELERYBEAT_LOG_FILE Default log file for celerybeat. Default is: ``None`` (stderr) .. data:: CELERYBEAT_SCHEDULE_FILENAME Name of the persistent schedule database file. Default is: ``celerybeat-schedule``. .. data:: CELERYBEAT_MAX_LOOP_INTERVAL The maximum number of seconds celerybeat is allowed to sleep between checking the schedule. The default is 5 minutes, which means celerybeat can only sleep a maximum of 5 minutes after checking the schedule run-times for a periodic task to apply. If you change the run_times of periodic tasks at run-time, you may consider lowering this value for changes to take effect faster (A value of 5 minutes, means the changes will take effect in 5 minutes at maximum). .. data:: CELERYMON_LOG_LEVEL Default log level for celerymon. Default is: ``INFO``. .. data:: CELERYMON_LOG_FILE Default log file for celerymon. Default is: ``None`` (stderr) .. data:: LOG_LEVELS Mapping of log level names to :mod:`logging` module constants. .. data:: CELERYD_LOG_FORMAT The format to use for log messages. .. data:: CELERYD_TASK_LOG_FORMAT The format to use for task log messages. .. data:: CELERYD_LOG_FILE Filename of the daemon log file. Default is: ``None`` (stderr) .. data:: CELERYD_LOG_LEVEL Default log level for daemons. (``WARN``) .. data:: CELERYD_CONCURRENCY The number of concurrent worker processes. If set to ``0``, the total number of available CPUs/cores will be used. .. data:: CELERYD_PREFETCH_MULTIPLIER The number of concurrent workers is multipled by this number to yield the wanted AMQP QoS message prefetch count. .. data:: CELERYD_POOL Name of the task pool class used by the worker. Default is ``"celery.worker.pool.TaskPool"``. .. data:: CELERYD_LISTENER Name of the listener class used by the worker. Default is ``"celery.worker.listener.CarrotListener"``. .. data:: CELERYD_MEDIATOR Name of the mediator class used by the worker. Default is ``"celery.worker.controllers.Mediator"``. .. data:: CELERYD_ETA_SCHEDULER Name of the ETA scheduler class used by the worker. Default is ``"celery.worker.controllers.ScheduleController"``. PKXDDgQyAcelery-1.0-archived/_sources/reference/celery.loaders.default.txt========================================= Default Loader - celery.loaders.default ========================================= .. currentmodule:: celery.loaders.default .. automodule:: celery.loaders.default :members: PKXDDݖ;celery-1.0-archived/_sources/reference/celery.task.base.txt=================================== Defining Tasks - celery.task.base =================================== .. currentmodule:: celery.task.base .. automodule:: celery.task.base :members: PKXDDShP  Ccelery-1.0-archived/_sources/reference/celery.contrib.abortable.txt======================================================= Contrib: Abortable tasks - celery.contrib.abortable ======================================================= .. currentmodule:: celery.contrib.abortable .. automodule:: celery.contrib.abortable :members: PKXDDQ7celery-1.0-archived/_sources/reference/celery.views.txt======================================== Django Views - celery.views ======================================== .. currentmodule:: celery.views .. automodule:: celery.views :members: PKXDDQh<celery-1.0-archived/_sources/reference/celery.decorators.txt===================================== Task Decorators - celery.decorators ===================================== .. currentmodule:: celery.decorators .. automodule:: celery.decorators :members: PKXDD-?9celery-1.0-archived/_sources/reference/celery.loaders.txt============================================ Loaders - celery.loaders ============================================ .. currentmodule:: celery.loaders .. automodule:: celery.loaders :members: PKXDD4l8celery-1.0-archived/_sources/reference/celery.result.txt============================= Task Result - celery.result ============================= .. currentmodule:: celery.result .. automodule:: celery.result :members: PKXDD<=celery-1.0-archived/_sources/reference/celery.bin.celeryd.txt========================================== Celery Worker Daemon - celery.bin.celeryd ========================================== .. currentmodule:: celery.bin.celeryd .. automodule:: celery.bin.celeryd :members: PKXDD]9celery-1.0-archived/_sources/reference/celery.signals.txt======================================== Signals - celery.signals ======================================== .. data:: task_sent Triggered when a task has been sent to the broker. Note that this is executed in the client process, the one sending the task, not in the worker. Provides arguments: * task_id Id of the task to be executed. * task The task being executed. * args the tasks positional arguments. * kwargs The tasks keyword arguments. * eta The time to execute the task. * taskset Id of the taskset this task is part of (if any). .. data:: task_prerun Triggered before a task is executed. Provides arguments: * task_id Id of the task to be executed. * task The task being executed. * args the tasks positional arguments. * kwargs The tasks keyword arguments. .. data:: task_postrun Triggered after a task has been executed. Provides arguments: * task_id Id of the task to be executed. * task The task being executed. * args The tasks positional arguments. * kwargs The tasks keyword arguments. * retval The return value of the task. .. data:: worker_init Triggered before the worker is started. .. data:: worker_ready Triggered when the worker is ready to accept work. .. data:: worker_shutdown Triggered when the worker is about to shut down. PKXDD?;celery-1.0-archived/_sources/reference/celery.task.http.txt======================================== HTTP Callback Tasks - celery.task.http ======================================== .. currentmodule:: celery.task.http .. automodule:: celery.task.http :members: PKXDDMy^:celery-1.0-archived/_sources/reference/celery.registry.txt================================ Task Registry - celery.registry ================================ .. currentmodule:: celery.registry .. automodule:: celery.registry :members: PKXDDW$Ecelery-1.0-archived/_sources/reference/celery.contrib.test_runner.txt=================================================== Contrib: Test runner - celery.contrib.test_runner =================================================== .. currentmodule:: celery.contrib.test_runner .. automodule:: celery.contrib.test_runner :members: PKXDDqQ?celery-1.0-archived/_sources/reference/celery.task.builtins.txt============================================== Built-in Task Classes - celery.task.builtins ============================================== .. currentmodule:: celery.task.builtins .. automodule:: celery.task.builtins :members: PKXDD&;%8celery-1.0-archived/_sources/reference/celery.states.txt============================= Task States - celery.states ============================= .. currentmodule:: celery.states .. automodule:: celery.states :members: PKXDD @celery-1.0-archived/_sources/reference/celery.task.schedules.txt========================================================== Periodic Task Schedule Behaviors - celery.task.schedules ========================================================== .. currentmodule:: celery.task.schedules .. automodule:: celery.task.schedules :members: PKXDD'6celery-1.0-archived/_sources/reference/celery.task.txt============================================== Task Information and Utilities - celery.task ============================================== .. currentmodule:: celery.task .. automodule:: celery.task :members: PKXDD+0celery-1.0-archived/_sources/reference/index.txt=============== API Reference =============== :Release: |version| :Date: |today| .. toctree:: :maxdepth: 2 celery.decorators celery.task.base celery.execute celery.result celery.task celery.conf celery.task.control celery.task.http celery.task.schedules celery.signals celery.exceptions celery.task.builtins celery.loaders celery.loaders.base celery.loaders.default celery.loaders.djangoapp celery.registry celery.states celery.messaging celery.contrib.test_runner celery.contrib.abortable celery.views celery.events celery.bin.celeryd celery.bin.celerybeat celery.bin.celeryinit celery.bin.camqadm PKXDDVG{Ccelery-1.0-archived/_sources/reference/celery.loaders.djangoapp.txt========================================== Django Loader - celery.loaders.djangoapp ========================================== .. currentmodule:: celery.loaders.djangoapp .. automodule:: celery.loaders.djangoapp :members: PKXDD b@celery-1.0-archived/_sources/reference/celery.bin.celerybeat.txt=================================================== Celery Periodic Task Server - celery.bin.celerybeat =================================================== .. currentmodule:: celery.bin.celerybeat .. automodule:: celery.bin.celerybeat :members: PKXDD;celery-1.0-archived/_sources/reference/celery.messaging.txt============================== Messaging - celery.messaging ============================== .. currentmodule:: celery.messaging .. automodule:: celery.messaging :members: PKXDDWN>celery-1.0-archived/_sources/reference/celery.loaders.base.txt=========================================== Loader Base Classes - celery.loaders.base =========================================== .. currentmodule:: celery.loaders.base .. automodule:: celery.loaders.base :members: PKXDDԙ8celery-1.0-archived/_sources/reference/celery.events.txt======================== Events - celery.events ======================== .. currentmodule:: celery.events .. automodule:: celery.events :members: PKXDDƦT  =celery-1.0-archived/_sources/reference/celery.bin.camqadm.txt=========================================================== caqmadm: AMQP API Command-line Shell - celery.bin.camqadm =========================================================== .. currentmodule:: celery.bin.camqadm .. automodule:: celery.bin.camqadm :members: PKXDD܁@celery-1.0-archived/_sources/reference/celery.bin.celeryinit.txt=========================================== Celery Initialize - celery.bin.celeryinit =========================================== .. currentmodule:: celery.bin.celeryinit .. automodule:: celery.bin.celeryinit :members: PKXDD|49celery-1.0-archived/_sources/reference/celery.execute.txt================================== Executing Tasks - celery.execute ================================== .. currentmodule:: celery.execute .. automodule:: celery.execute :members: PKXDDĘ >celery-1.0-archived/_sources/reference/celery.task.control.txt==================================================== Remote Management of Workers - celery.task.control ==================================================== .. currentmodule:: celery.task.control .. automodule:: celery.task.control :members: PKXDDù<celery-1.0-archived/_sources/reference/celery.exceptions.txt================================ Exceptions - celery.exceptions ================================ .. currentmodule:: celery.exceptions .. automodule:: celery.exceptions :members: PKXDDoUE+**/celery-1.0-archived/_sources/cookbook/index.txt=========== Cookbook =========== .. toctree:: :maxdepth: 2 tasks daemonizing unit-testing This page contains common recipes and techniques. Whenever a setting is mentioned, you should use ``celeryconf.py`` if using regular Python, or ``settings.py`` if running under Django. PKXDD@88/celery-1.0-archived/_sources/cookbook/tasks.txt================ Creating Tasks ================ Ensuring a task is only executed one at a time ---------------------------------------------- You can accomplish this by using a lock. In this example we'll be using the cache framework to set a lock that is accessible for all workers. It's part of an imaginary RSS feed importer called ``djangofeeds``. The task takes a feed URL as a single argument, and imports that feed into a Django model called ``Feed``. We ensure that it's not possible for two or more workers to import the same feed at the same time by setting a cache key consisting of the md5sum of the feed URL. The cache key expires after some time in case something unexpected happens (you never know, right?) .. code-block:: python from celery.task import Task from django.core.cache import cache from django.utils.hashcompat import md5_constructor as md5 from djangofeeds.models import Feed LOCK_EXPIRE = 60 * 5 # Lock expires in 5 minutes class FeedImporter(Task): name = "feed.import" def run(self, feed_url, **kwargs): logger = self.get_logger(**kwargs) # The cache key consists of the task name and the MD5 digest # of the feed URL. feed_url_digest = md5(feed_url).hexdigest() lock_id = "%s-lock-%s" % (self.name, feed_url_hexdigest) # cache.add fails if if the key already exists acquire_lock = lambda: cache.add(lock_id, "true", LOCK_EXPIRE) # memcache delete is very slow, but we have to use it to take # advantage of using add() for atomic locking release_lock = lambda: cache.delete(lock_id) logger.debug("Importing feed: %s" % feed_url) if aquire_lock(): try: feed = Feed.objects.import_feed(feed_url) finally: release_lock() return feed.url logger.debug( "Feed %s is already being imported by another worker" % ( feed_url)) returnPKXDDs5celery-1.0-archived/_sources/cookbook/daemonizing.txt============================= Running celeryd as a daemon ============================= Celery does not daemonize itself, please use one of the following daemonization tools. start-stop-daemon ================= * `contrib/debian/init.d/`_ .. _`contrib/debian/init.d/`: http://github.com/ask/celery/tree/master/contrib/debian/ `supervisord`_ ============== * `contrib/supervisord/`_ .. _`contrib/supervisord/`: http://github.com/ask/celery/tree/master/contrib/supervisord/ .. _`supervisord`: http://supervisord.org/ launchd (OS X) ============== * `contrib/mac/`_ .. _`contrib/mac/`: http://github.com/ask/celery/tree/master/contrib/mac/ PKXDD&h6celery-1.0-archived/_sources/cookbook/unit-testing.txt================ Unit Testing ================ Testing with Django ------------------- The problem that you'll first run in to when trying to write a test that runs a task is that Django's test runner doesn't use the same database that your celery daemon is using. If you're using the database backend, this means that your tombstones won't show up in your test database and you won't be able to check on your tasks to get the return value or check the status. There are two ways to get around this. You can either take advantage of ``CELERY_ALWAYS_EAGER = True`` to skip the daemon, or you can avoid testing anything that needs to check the status or result of a task. Using a custom test runner to test with celery ---------------------------------------------- If you're going the ``CELERY_ALWAYS_EAGER`` route, which is probably better than just never testing some parts of your app, a custom Django test runner does the trick. Celery provides a simple test runner, but it's easy enough to roll your own if you have other things that need to be done. http://docs.djangoproject.com/en/dev/topics/testing/#defining-a-test-runner For this example, we'll use the ``celery.contrib.test_runner`` to test the ``add`` task from the :doc:`User Guide: Tasks<../userguide/tasks>` examples. To enable the test runner, set the following settings: .. code-block:: python TEST_RUNNER = 'celery.contrib.test_runner.run_tests' Then we can write our actually test in a ``tests.py`` somewhere: .. code-block:: python from django.test import TestCase from myapp.tasks import add class AddTestCase(TestCase): def testNoError(self): """Test that the ``add`` task runs with no errors, and returns the correct result.""" result = add.delay(8, 8) self.assertEquals(result.get(), 16) self.assertTrue(result.successful()) This test assumes that you put your example ``add`` task in ``maypp.tasks`` so of course adjust the import for wherever you actually put the class. PKXDD./mDcelery-1.0-archived/_sources/getting-started/broker-installation.txt===================== Broker Installation ===================== Installing RabbitMQ =================== See `Installing RabbitMQ`_ over at RabbitMQ's website. For Mac OS X see `Installing RabbitMQ on OS X`_. .. _`Installing RabbitMQ`: http://www.rabbitmq.com/install.html Setting up RabbitMQ =================== To use celery we need to create a RabbitMQ user, a virtual host and allow that user access to that virtual host:: $ rabbitmqctl add_user myuser mypassword $ rabbitmqctl add_vhost myvhost $ rabbitmqctl set_permissions -p myvhost myuser "" ".*" ".*" See the RabbitMQ `Admin Guide`_ for more information about `access control`_. .. _`Admin Guide`: http://www.rabbitmq.com/admin-guide.html .. _`access control`: http://www.rabbitmq.com/admin-guide.html#access-control Installing RabbitMQ on OS X =========================== The easiest way to install RabbitMQ on Snow Leopard is using `Homebrew`_; the new and shiny package management system for OS X. In this example we'll install homebrew into ``/lol``, but you can choose whichever destination, even in your home directory if you want, as one of the strengths of homebrew is that it's relocateable. Homebrew is actually a `git`_ repository, so to install homebrew, you first need to install git. Download and install from the disk image at http://code.google.com/p/git-osx-installer/downloads/list?can=3 When git is installed you can finally clone the repo, storing it at the ``/lol`` location:: $ git clone git://github.com/mxcl/homebrew /lol Brew comes with a simple utility called ``brew``, used to install, remove and query packages. To use it you first have to add it to ``PATH``, by adding the following line to the end of your ``~/.profile``:: export PATH="/lol/bin:/lol/sbin:$PATH" Save your profile and reload it:: $ source ~/.profile Finally, we can install rabbitmq using ``brew``:: $ brew install rabbitmq .. _`Homebrew`: http://github.com/mxcl/homebrew/ .. _`git`: http://git-scm.org Configuring the system hostname ------------------------------- If you're using a DHCP server that is giving you a random hostname, you need to permanently configure the hostname. This is because RabbitMQ uses the hostname to communicate with nodes. Use the ``scutil`` command to permanently set your hostname:: sudo scutil --set HostName myhost.local Then add that hostname to ``/etc/hosts`` so it's possible to resolve it back into an IP address:: 127.0.0.1 localhost myhost myhost.local If you start the rabbitmq server, your rabbit node should now be ``rabbit@myhost``, as verified by ``rabbitmqctl``:: $ sudo rabbitmqctl status Status of node rabbit@myhost ... [{running_applications,[{rabbit,"RabbitMQ","1.7.1"}, {mnesia,"MNESIA CXC 138 12","4.4.12"}, {os_mon,"CPO CXC 138 46","2.2.4"}, {sasl,"SASL CXC 138 11","2.1.8"}, {stdlib,"ERTS CXC 138 10","1.16.4"}, {kernel,"ERTS CXC 138 10","2.13.4"}]}, {nodes,[rabbit@myhost]}, {running_nodes,[rabbit@myhost]}] ...done. This is especially important if your DHCP server gives you a hostname starting with an IP address, (e.g. ``23.10.112.31.comcast.net``), because then RabbitMQ will try to use ``rabbit@23``, which is an illegal hostname. Starting/Stopping the RabbitMQ server ------------------------------------- To start the server:: $ sudo rabbitmq-server you can also run it in the background by adding the ``-detached`` option (note: only one dash):: $ sudo rabbitmq-server -detached Never use ``kill`` to stop the RabbitMQ server, but rather use the ``rabbitmqctl`` command:: $ sudo rabbitmqctl stop When the server is running, you can continue reading `Setting up RabbitMQ`_. PKXDDVaa?celery-1.0-archived/_sources/getting-started/periodic-tasks.txt================ Periodic Tasks ================ You can schedule tasks to run at intervals like ``cron``. Here's an example of a periodic task: .. code-block:: python from celery.task import PeriodicTask from celery.registry import tasks from datetime import timedelta class MyPeriodicTask(PeriodicTask): run_every = timedelta(seconds=30) def run(self, **kwargs): logger = self.get_logger(**kwargs) logger.info("Running periodic task!") >>> tasks.register(MyPeriodicTask) If you want a little more control over when the task is executed, for example, a particular time of day or day of the week, you can use ``crontab`` to set the ``run_every`` property: .. code-block:: python from celery.task import PeriodicTask from celery.task.schedules import crontab class EveryMondayMorningTask(PeriodicTask): run_every = crontab(hour=7, minute=30, day_of_week=1) def run(self, **kwargs): logger = self.get_logger(**kwargs) logger.info("Execute every Monday at 7:30AM.") If you want to use periodic tasks you need to start the ``celerybeat`` service. You have to make sure only one instance of this server is running at any time, or else you will end up with multiple executions of the same task. To start the ``celerybeat`` service:: $ celerybeat or if using Django:: $ python manage.py celerybeat You can also start ``celerybeat`` with ``celeryd`` by using the ``-B`` option, this is convenient if you only have one server:: $ celeryd -B or if using Django:: $ python manage.py celeryd -B PKXDDPHcelery-1.0-archived/_sources/getting-started/first-steps-with-django.txt========================= First steps with Django ========================= Configuring your Django project to use Celery ============================================= You only need three simple steps to use celery with your Django project. 1. Add ``celery`` to ``INSTALLED_APPS``. 2. Create the celery database tables:: $ python manage.py syncdb 3. Configure celery to use the AMQP user and virtual host we created before, by adding the following to your ``settings.py``:: BROKER_HOST = "localhost" BROKER_PORT = 5672 BROKER_USER = "myuser" BROKER_PASSWORD = "mypassword" BROKER_VHOST = "myvhost" That's it. There are more options available, like how many processes you want to work in parallel (the ``CELERY_CONCURRENCY`` setting). You can also configure the backend used for storing task statuses. For now though, this should do. For all of the options available, please see the :doc:`configuration directive reference<../configuration>`. **Note:** If you're using SQLite as the Django database back-end, ``celeryd`` will only be able to process one task at a time, this is because SQLite doesn't allow concurrent writes. Running the celery worker server ================================ To test this we'll be running the worker server in the foreground, so we can see what's going on without consulting the logfile:: $ python manage.py celeryd However, in production you probably want to run the worker in the background as a daemon. To do this you need to use to tools provided by your platform. See :doc:`daemon mode reference<../cookbook/daemonizing>`. For a complete listing of the command line options available, use the help command:: $ python manage.py help celeryd Defining and executing tasks ============================ **Please note:** All the tasks have to be stored in a real module, they can't be defined in the python shell or ipython/bpython. This is because the celery worker server needs access to the task function to be able to run it. Put them in the ``tasks`` module of your Django application. The worker server will automatically load any ``tasks.py`` file for all of the applications listed in ``settings.INSTALLED_APPS``. Executing tasks using ``delay`` and ``apply_async`` can be done from the python shell, but keep in mind that since arguments are pickled, you can't use custom classes defined in the shell session. This is a task that adds two numbers: .. code-block:: python from celery.decorators import task @task() def add(x, y): return x + y To execute this task, we can use the ``delay`` method of the task class. This is a handy shortcut to the ``apply_async`` method which gives greater control of the task execution. See :doc:`Executing Tasks<../userguide/executing>` for more information. >>> from myapp.tasks import MyTask >>> MyTask.delay(some_arg="foo") At this point, the task has been sent to the message broker. The message broker will hold on to the task until a celery worker server has successfully picked it up. *Note:* If everything is just hanging when you execute ``delay``, please check that RabbitMQ is running, and that the user/password has access to the virtual host you configured earlier. Right now we have to check the celery worker log files to know what happened with the task. This is because we didn't keep the ``AsyncResult`` object returned by ``delay``. The ``AsyncResult`` lets us find the state of the task, wait for the task to finish and get its return value (or exception if the task failed). So, let's execute the task again, but this time we'll keep track of the task: >>> result = add.delay(4, 4) >>> result.ready() # returns True if the task has finished processing. False >>> result.result # task is not ready, so no return value yet. None >>> result.get() # Waits until the task is done and returns the retval. 8 >>> result.result # direct access to result, doesn't re-raise errors. 8 >>> result.successful() # returns True if the task didn't end in failure. True If the task raises an exception, the return value of ``result.successful()`` will be ``False``, and ``result.result`` will contain the exception instance raised by the task. PKXDDZ WW=celery-1.0-archived/_sources/getting-started/introduction.txt============== Introduction ============== .. include:: ../includes/introduction.txt PKXDDna16celery-1.0-archived/_sources/getting-started/index.txt================= Getting Started ================= :Release: |version| :Date: |today| .. toctree:: :maxdepth: 2 introduction broker-installation first-steps-with-celery first-steps-with-django periodic-tasks resources PKXDDĀKK:celery-1.0-archived/_sources/getting-started/resources.txt=========== Resources =========== .. include:: ../includes/resources.txt PKXDD"Hcelery-1.0-archived/_sources/getting-started/first-steps-with-celery.txt======================== First steps with Celery ======================== Creating a simple task ====================== In this example we are creating a simple task that adds two numbers. Tasks are defined in a normal python module. The module can be named whatever you like, but the convention is to call it ``tasks.py``. Our addition task looks like this: ``tasks.py``: .. code-block:: python from celery.decorators import task @task def add(x, y): return x + y All celery tasks are classes that inherit from the ``Task`` class. In this case we're using a decorator that wraps the add function in an appropriate class for us automatically. The full documentation on how to create tasks and task classes are in :doc:`Executing Tasks<../userguide/tasks>`. Configuration ============= Celery is configured by using a configuration module. By convention, this module is called ``celeryconfig.py``. This module must be in the Python path so it can be imported. You can set a custom name for the configuration module with the ``CELERY_CONFIG_MODULE`` variable. In these examples we use the default name. Let's create our ``celeryconfig.py``. 1. Configure how we communicate with the broker:: BROKER_HOST = "localhost" BROKER_PORT = 5672 BROKER_USER = "myuser" BROKER_PASSWORD = "mypassword" BROKER_VHOST = "myvhost" 2. In this example we don't want to store the results of the tasks, so we'll use the simplest backend available; the AMQP backend:: CELERY_RESULT_BACKEND = "amqp" 3. Finally, we list the modules to import, that is, all the modules that contain tasks. This is so celery knows about what tasks it can be asked to perform. We only have a single task module, ``tasks.py``, which we added earlier:: CELERY_IMPORTS = ("tasks", ) That's it. There are more options available, like how many processes you want to process work in parallel (the ``CELERY_CONCURRENCY`` setting), and we could use a persistent result store backend, but for now, this should do. For all of the options available, see the :doc:`configuration directive reference<../configuration>`. Running the celery worker server ================================ To test we will run the worker server in the foreground, so we can see what's going on in the terminal:: $ PYTHONPATH="." celeryd --loglevel=INFO However, in production you probably want to run the worker in the background as a daemon. To do this you need to use to tools provided by your platform, or something like `supervisord`_. For a complete listing of the command line options available, use the help command:: $ PYTHONPATH="." celeryd --help For info on how to run celery as standalone daemon, see :doc:`daemon mode reference<../cookbook/daemonizing>` .. _`supervisord`: http://supervisord.org Executing the task ================== Whenever we want to execute our task, we can use the ``delay`` method of the task class. This is a handy shortcut to the ``apply_async`` method which gives greater control of the task execution. See :doc:`Executing Tasks<../userguide/executing>` for more information. >>> from tasks import add >>> add.delay(4, 4) At this point, the task has been sent to the message broker. The message broker will hold on to the task until a celery worker server has successfully picked it up. *Note:* If everything is just hanging when you execute ``delay``, please check that RabbitMQ is running, and that the user/password has access to the virtual host you configured earlier. Right now we have to check the celery worker log files to know what happened with the task. This is because we didn't keep the ``AsyncResult`` object returned by ``delay``. The ``AsyncResult`` lets us find the state of the task, wait for the task to finish and get its return value (or exception if the task failed). So, let's execute the task again, but this time we'll keep track of the task: >>> result = add.delay(4, 4) >>> result.ready() # returns True if the task has finished processing. False >>> result.result # task is not ready, so no return value yet. None >>> result.get() # Waits until the task is done and returns the retval. 8 >>> result.result # direct access to result, doesn't re-raise errors. 8 >>> result.successful() # returns True if the task didn't end in failure. True If the task raises an exception, the return value of ``result.successful()`` will be ``False``, and ``result.result`` will contain the exception instance raised by the task. That's all for now! After this you should probably read the :doc:`User Guide<../userguide/index>`. PKXDDRA"A"celery-1.0-archived/links.htmlPKXDD0ENN"}"celery-1.0-archived/searchindex.jsPKXDD(Щ))$ celery-1.0-archived/py-modindex.htmlPKXDD&%hh:celery-1.0-archived/search.htmlPKXDDoy5celery-1.0-archived/.buildinfoPKXDD&7celery-1.0-archived/configuration.htmlPKXDDs"celery-1.0-archived/changelog.htmlPKXDD9BEE!celery-1.0-archived/genindex.htmlPKXDDޘa[  ?celery-1.0-archived/faq.htmlPKXDD}=Kcelery-1.0-archived/objects.invPKXDDndBTBTTcelery-1.0-archived/index.htmlPKXDDHN2((.2celery-1.0-archived/internals/deprecation.htmlPKXDDitk7E&E&)celery-1.0-archived/internals/events.htmlPKXDDcA+++celery-1.0-archived/internals/protocol.htmlPKXDDXFF.a$celery-1.0-archived/internals/moduleindex.htmlPKXDDcH;;(kcelery-1.0-archived/internals/index.htmlPKXDDj:++)`celery-1.0-archived/internals/worker.htmlPKXDD<Ucelery-1.0-archived/internals/reference/celery.backends.htmlPKXDD ܩ8Ncelery-1.0-archived/internals/reference/celery.beat.htmlPKXDDI I >Mcelery-1.0-archived/internals/reference/celery.worker.job.htmlPKXDD>K K B3celery-1.0-archived/internals/reference/celery.backends.cache.htmlPKXDDHKʧ FTcelery-1.0-archived/internals/reference/celery.worker.controllers.htmlPKXDD|4Q Q Cucelery-1.0-archived/internals/reference/celery.worker.listener.htmlPKXDD:Zcelery-1.0-archived/internals/reference/celery.worker.htmlPKXDD_7J J ?celery-1.0-archived/internals/reference/celery.utils.patch.htmlPKXDDf w BDcelery-1.0-archived/internals/reference/celery.worker.buckets.htmlPKXDD֖h;!;!KUcelery-1.0-archived/internals/reference/celery.worker.control.builtins.htmlPKXDD0k k Ccelery-1.0-archived/internals/reference/celery.backends.tyrant.htmlPKXDD! ! >:celery-1.0-archived/internals/reference/celery.utils.info.htmlPKXDD)AB[celery-1.0-archived/internals/reference/celery.backends.base.htmlPKXDDfCR?!?!K{celery-1.0-archived/internals/reference/celery.worker.control.registry.htmlPKXDDQxI I A<celery-1.0-archived/internals/reference/celery.execute.trace.htmlPKXDD2sU U Dcelery-1.0-archived/internals/reference/celery.backends.mongodb.htmlPKXDDT- YY9celery-1.0-archived/internals/reference/celery.utils.htmlPKXDDQ\2\2:7 celery-1.0-archived/internals/reference/celery.models.htmlPKXDDX''@j celery-1.0-archived/internals/reference/celery.utils.compat.htmlPKXDDܵw) ) A celery-1.0-archived/internals/reference/celery.backends.amqp.htmlPKXDDwo@o@CI celery-1.0-archived/internals/reference/celery.utils.timeutils.htmlPKXDD6|))< celery-1.0-archived/internals/reference/celery.platform.htmlPKXDD B@ celery-1.0-archived/internals/reference/celery.worker.control.htmlPKXDDm^1^12}a celery-1.0-archived/internals/reference/index.htmlPKXDD[ԯ ?+ celery-1.0-archived/internals/reference/celery.worker.pool.htmlPKXDDa_ _ D celery-1.0-archived/internals/reference/celery.backends.pyredis.htmlPKXDDY7V7V*V celery-1.0-archived/userguide/routing.htmlPKXDD}"x88/* celery-1.0-archived/userguide/remote-tasks.htmlPKXDD7/(d celery-1.0-archived/userguide/tasks.htmlPKXDD\7m&m&(S celery-1.0-archived/userguide/index.htmlPKXDD&1celery-1.0-archived/.doctrees/internals/reference/celery.platform.doctreePKXDD~KErcelery-1.0-archived/.doctrees/internals/reference/celery.worker.job.doctreePKXDDODDXUcelery-1.0-archived/.doctrees/internals/reference/celery.worker.control.builtins.doctreePKXDD+AGcelery-1.0-archived/.doctrees/internals/reference/celery.worker.doctreePKXDD;ROcelery-1.0-archived/.doctrees/internals/reference/celery.backends.cache.doctreePKXDDlxOCcelery-1.0-archived/.doctrees/internals/reference/celery.datastructures.doctreePKXDD2,GGDFcelery-1.0-archived/.doctrees/internals/reference/celery.log.doctreePKXDDEtXcelery-1.0-archived/.doctrees/internals/reference/celery.beat.doctreePKXDDY'Qjcelery-1.0-archived/.doctrees/internals/reference/celery.backends.pyredis.doctreePKXDDP|celery-1.0-archived/.doctrees/internals/reference/celery.worker.listener.doctreePKXDD]:((MWcelery-1.0-archived/.doctrees/internals/reference/celery.utils.compat.doctreePKXDDDOTcelery-1.0-archived/.doctrees/internals/reference/celery.worker.control.doctreePKXDD,RN~celery-1.0-archived/.doctrees/internals/reference/celery.backends.base.doctreePKXDD:^^?celery-1.0-archived/.doctrees/internals/reference/index.doctreePKXDD';I;IGWcelery-1.0-archived/.doctrees/internals/reference/celery.models.doctreePKXDDiR<celery-1.0-archived/.doctrees/internals/reference/celery.backends.database.doctreePKXDD~?^vNEOcelery-1.0-archived/.doctrees/internals/reference/celery.worker.revoke.doctreePKXDDș:Lacelery-1.0-archived/.doctrees/internals/reference/celery.worker.pool.doctreePKXDD >Qscelery-1.0-archived/.doctrees/internals/reference/celery.worker.heartbeat.doctreePKXDDPQQPυcelery-1.0-archived/.doctrees/internals/reference/celery.utils.timeutils.doctreePKXDDMP'celery-1.0-archived/.doctrees/internals/reference/celery.backends.tyrant.doctreePKXDDTQwcelery-1.0-archived/.doctrees/internals/reference/celery.worker.scheduler.doctreePKXDDKcelery-1.0-archived/.doctrees/internals/reference/celery.utils.info.doctreePKXDDl||Icelery-1.0-archived/.doctrees/internals/reference/celery.backends.doctreePKXDDb@@X celery-1.0-archived/.doctrees/internals/reference/celery.worker.control.registry.doctreePKXDDDOX3celery-1.0-archived/.doctrees/internals/reference/celery.worker.buckets.doctreePKXDḌ QCRCRIEcelery-1.0-archived/.doctrees/internals/reference/celery.managers.doctreePKXDD4PQbcelery-1.0-archived/.doctrees/internals/reference/celery.backends.mongodb.doctreePKXDD!PccFcelery-1.0-archived/.doctrees/internals/reference/celery.utils.doctreePKXDD;hNmS celery-1.0-archived/.doctrees/internals/reference/celery.execute.trace.doctreePKXDDJ&MNe celery-1.0-archived/.doctrees/internals/reference/celery.backends.amqp.doctreePKXDDk11<w celery-1.0-archived/.doctrees/userguide/remote-tasks.doctreePKXDDkAA7 celery-1.0-archived/.doctrees/userguide/routing.doctreePKXDDW9DK!celery-1.0-archived/.doctrees/userguide/executing.doctreePKXDD #)LL5!celery-1.0-archived/.doctrees/userguide/index.doctreePKXDD}M[[5!celery-1.0-archived/.doctrees/userguide/tasks.doctreePKXDDD9++-+-<eK#celery-1.0-archived/.doctrees/_theme/ADCTheme/README.doctreePKXDDAx#celery-1.0-archived/.doctrees/_theme/ADCThemePrint/README.doctreePKXDDB>j?#celery-1.0-archived/.doctrees/releases/1.0/announcement.doctreePKXDDׄ??8O%$celery-1.0-archived/.doctrees/tutorials/external.doctreePKXDDU*xx<we$celery-1.0-archived/.doctrees/tutorials/clickcounter.doctreePKXDDM//5$celery-1.0-archived/.doctrees/tutorials/index.doctreePKXDDgjٖ;;;e$celery-1.0-archived/.doctrees/tutorials/otherqueues.doctreePKXDDּ)<)%celery-1.0-archived/.doctrees/reference/celery.views.doctreePKXDDDN: : F<%celery-1.0-archived/.doctrees/reference/celery.loaders.default.doctreePKXDD8__J!]%celery-1.0-archived/.doctrees/reference/celery.contrib.test_runner.doctreePKXDDrfe88@t%celery-1.0-archived/.doctrees/reference/celery.task.http.doctreePKXDDk$$@~%celery-1.0-archived/.doctrees/reference/celery.task.base.doctreePKXDDpoתB%celery-1.0-archived/.doctrees/reference/celery.bin.celeryd.doctreePKXDD%celery-1.0-archived/.doctrees/reference/celery.loaders.doctreePKXDDoJ_>_>?d%celery-1.0-archived/.doctrees/reference/celery.registry.doctreePKXDDF8h= -&celery-1.0-archived/.doctrees/reference/celery.events.doctreePKXDDL!ll@s?&celery-1.0-archived/.doctrees/reference/celery.messaging.doctreePKXDD-==Q&celery-1.0-archived/.doctrees/reference/celery.result.doctreePKXDD~HII>c&celery-1.0-archived/.doctrees/reference/celery.signals.doctreePKXDD8pA&celery-1.0-archived/.doctrees/reference/celery.decorators.doctreePKXDD mj5&celery-1.0-archived/.doctrees/reference/index.doctreePKXDDM^^D&celery-1.0-archived/.doctrees/reference/celery.task.builtins.doctreePKXDD^] Eq&celery-1.0-archived/.doctrees/reference/celery.bin.celeryinit.doctreePKXDD֡qqC&celery-1.0-archived/.doctrees/reference/celery.task.control.doctreePKXDD'//Ae'celery-1.0-archived/.doctrees/reference/celery.exceptions.doctreePKXDD*/{||>6'celery-1.0-archived/.doctrees/reference/celery.execute.doctreePKXDD//CH'celery-1.0-archived/.doctrees/reference/celery.loaders.base.doctreePKXDD#5;AA;x'celery-1.0-archived/.doctrees/reference/celery.task.doctreePKXDD:6i;&'celery-1.0-archived/.doctrees/reference/celery.conf.doctreePKXDDy6363H~n(celery-1.0-archived/.doctrees/reference/celery.loaders.djangoapp.doctreePKXDDVE(celery-1.0-archived/.doctrees/reference/celery.bin.celerybeat.doctreePKXDDXyyBY(celery-1.0-archived/.doctrees/reference/celery.bin.camqadm.doctreePKXDDW(4(4=2(celery-1.0-archived/.doctrees/reference/celery.states.doctreePKXDDsN:(celery-1.0-archived/.doctrees/cookbook/daemonizing.doctreePKXDD**4!)celery-1.0-archived/.doctrees/cookbook/index.doctreePKXDDר004%)celery-1.0-archived/.doctrees/cookbook/tasks.doctreePKXDD+E!(!(;D)celery-1.0-archived/.doctrees/cookbook/unit-testing.doctreePKXDD#;Y;YMl)celery-1.0-archived/.doctrees/getting-started/first-steps-with-django.doctreePKXDDababM?)celery-1.0-archived/.doctrees/getting-started/first-steps-with-celery.doctreePKXDDٙhQ&&? )*celery-1.0-archived/.doctrees/getting-started/resources.doctreePKXDDSSSBVP*celery-1.0-archived/.doctrees/getting-started/introduction.doctreePKXDD [4; *celery-1.0-archived/.doctrees/getting-started/index.doctreePKXDDXSSIr*celery-1.0-archived/.doctrees/getting-started/broker-installation.doctreePKXDD޷""DvJ+celery-1.0-archived/.doctrees/getting-started/periodic-tasks.doctreePKXDD:''/l+celery-1.0-archived/_theme/ADCTheme/README.htmlPKXDDF>Z""4+celery-1.0-archived/_theme/ADCThemePrint/README.htmlPKXDDa$+celery-1.0-archived/_static/plus.pngPKXDD4!+celery-1.0-archived/_static/searchfield_rightcap.pngPKXDDA辗"+celery-1.0-archived/_static/toc.jsPKXDD9Rcc(+celery-1.0-archived/_static/pygments.cssPKXDDDUkk"`+celery-1.0-archived/_static/up.pngPKBFCVR>># +celery-1.0-archived/_static/rtd.cssPKXDDh9Ȅ0d ,celery-1.0-archived/_static/title_background.pngPKXDD;l/l/)6 ,celery-1.0-archived/_static/underscore.jsPKXDDq.<,celery-1.0-archived/_static/readthedocs-ext.jsPKXDDZ2Q=,celery-1.0-archived/_static/searchfield_repeat.pngPKXDD<>+?>,celery-1.0-archived/_static/ajax-loader.gifPKXDDԙ G%)A,celery-1.0-archived/_static/scrn1.pngPKXDDPu u 'z-celery-1.0-archived/_static/comment.pngPKXDDhkk$4-celery-1.0-archived/_static/down.pngPKXDD+0$-celery-1.0-archived/_static/file.pngPKXDD[{gtt*-celery-1.0-archived/_static/up-pressed.pngPKXDDb:i]'g-celery-1.0-archived/_static/doctools.jsPKXDD8[/.celery-1.0-archived/_static/triangle_closed.pngPKXDDb88&.celery-1.0-archived/_static/mobile.cssPKXDD{kjWW3.celery-1.0-archived/_static/searchfield_leftcap.pngPKXDDgK33%.celery-1.0-archived/_static/scrn2.pngPKXDD(xEE*$/celery-1.0-archived/_static/searchtools.jsPKXDD,`55( ;0celery-1.0-archived/_static/adctheme.cssPKXDD %p0celery-1.0-archived/_static/basic.cssPKXDD"9-$0celery-1.0-archived/_static/documentation.pngPKXDDkuFpp, 0celery-1.0-archived/_static/down-pressed.pngPKXDD7r-ŕ0celery-1.0-archived/_static/triangle_left.pngPKXDDu .Ӗ0celery-1.0-archived/_static/comment-bright.pngPKXDD-ˤ0celery-1.0-archived/_static/triangle_open.pngPKXDD' 5w -ե0celery-1.0-archived/_static/comment-close.pngPKXDDM "mm%0celery-1.0-archived/_static/jquery.jsPKXDDd͟-""2celery-1.0-archived/_static/header_sm_mid.pngPKXDD׈5 #2celery-1.0-archived/_static/breadcrumb_background.pngPKXDDK%#2celery-1.0-archived/_static/minus.pngPKXDDNbb)$2celery-1.0-archived/_static/websupport.jsPKXDD9a<a<2և2celery-1.0-archived/releases/1.0/announcement.htmlPKXDDѝx 4 4+2celery-1.0-archived/tutorials/external.htmlPKXDDx8l8l/2celery-1.0-archived/tutorials/clickcounter.htmlPKXDD~[ʷ44.be3celery-1.0-archived/tutorials/otherqueues.htmlPKXDD`Yd1$1$(e3celery-1.0-archived/tutorials/index.htmlPKXDDq"Y*Y*5ܾ3celery-1.0-archived/reference/celery.bin.celeryd.htmlPKXDDy\ . .=3celery-1.0-archived/reference/celery.contrib.test_runner.htmlPKXDDb**34celery-1.0-archived/reference/celery.task.base.htmlPKXDD7334PB4celery-1.0-archived/reference/celery.exceptions.htmlPKXDDI0**3/v4celery-1.0-archived/reference/celery.task.http.htmlPKXDDiLG5G504celery-1.0-archived/reference/celery.states.htmlPKXDDBY44;4celery-1.0-archived/reference/celery.loaders.djangoapp.htmlPKXDD*t*t*6 5celery-1.0-archived/reference/celery.task.control.htmlPKXDDEd**865celery-1.0-archived/reference/celery.task.schedules.htmlPKXDDW))4}a5celery-1.0-archived/reference/celery.decorators.htmlPKXDDa7715celery-1.0-archived/reference/celery.signals.htmlPKXDDΓ]**85celery-1.0-archived/reference/celery.bin.celeryinit.htmlPKXDD2.2.15celery-1.0-archived/reference/celery.loaders.htmlPKXDDwʺ))0o6celery-1.0-archived/reference/celery.events.htmlPKXDDY^[3[36G6celery-1.0-archived/reference/celery.loaders.base.htmlPKXDD{-PE*E*72{6celery-1.0-archived/reference/celery.task.builtins.htmlPKXDDﵚ))/̥6celery-1.0-archived/reference/celery.views.htmlPKXDDCmm.6celery-1.0-archived/reference/celery.conf.htmlPKXDDcO))1U>7celery-1.0-archived/reference/celery.execute.htmlPKXDDsr**;h7celery-1.0-archived/reference/celery.contrib.abortable.htmlPKXDDf*0*09ɓ7celery-1.0-archived/reference/celery.loaders.default.htmlPKXDDjY772J7celery-1.0-archived/reference/celery.registry.htmlPKXDD**8U7celery-1.0-archived/reference/celery.bin.celerybeat.htmlPKXDD)))0e'8celery-1.0-archived/reference/celery.result.htmlPKXDD(**3Q8celery-1.0-archived/reference/celery.messaging.htmlPKXDDw&**5|8celery-1.0-archived/reference/celery.bin.camqadm.htmlPKXDD{R**.8celery-1.0-archived/reference/celery.task.htmlPKXDD?77(Q8celery-1.0-archived/reference/index.htmlPKXDD` Q!!- 9celery-1.0-archived/cookbook/daemonizing.htmlPKXDDId-d-.*9celery-1.0-archived/cookbook/unit-testing.htmlPKXDDҗܠ1313'X9celery-1.0-archived/cookbook/tasks.htmlPKXDD,k!!'9celery-1.0-archived/cookbook/index.htmlPKXDD=0079celery-1.0-archived/getting-started/periodic-tasks.htmlPKXDD5fZ@@@99celery-1.0-archived/getting-started/first-steps-with-django.htmlPKXDDXnz''2A :celery-1.0-archived/getting-started/resources.htmlPKXDDH)=166<^H:celery-1.0-archived/getting-started/broker-installation.htmlPKXDDjCC@V:celery-1.0-archived/getting-started/first-steps-with-celery.htmlPKXDD:r[FF5:celery-1.0-archived/getting-started/introduction.htmlPKXDDn++. ;celery-1.0-archived/getting-started/index.htmlPKXDD‘33.6;celery-1.0-archived/_sources/configuration.txtPKXDDJ(ZZ*/k;celery-1.0-archived/_sources/changelog.txtPKXDDO(&P&D<celery-1.0-archived/_sources/index.txtPKXDDϺu&F<celery-1.0-archived/_sources/links.txtPKXDD6}pp$J<celery-1.0-archived/_sources/faq.txtPKXDD  6<celery-1.0-archived/_sources/internals/moduleindex.txtPKXDDԸ 6 <celery-1.0-archived/_sources/internals/deprecation.txtPKXDD$Y3<celery-1.0-archived/_sources/internals/protocol.txtPKXDDօ;0o<celery-1.0-archived/_sources/internals/index.txtPKXDD01{<celery-1.0-archived/_sources/internals/worker.txtPKXDDA0*PP1<celery-1.0-archived/_sources/internals/events.txtPKXDD! JK<celery-1.0-archived/_sources/internals/reference/celery.worker.control.txtPKXDD2pD<celery-1.0-archived/_sources/internals/reference/celery.platform.txtPKXDDmBA<celery-1.0-archived/_sources/internals/reference/celery.utils.txtPKXDD@K<celery-1.0-archived/_sources/internals/reference/celery.worker.listener.txtPKXDDۧK9<celery-1.0-archived/_sources/internals/reference/celery.backends.tyrant.txtPKXDDe<<S<celery-1.0-archived/_sources/internals/reference/celery.worker.control.builtins.txtPKXDD.+B?<celery-1.0-archived/_sources/internals/reference/celery.worker.txtPKXDD WDg<celery-1.0-archived/_sources/internals/reference/celery.managers.txtPKXDD'HK<celery-1.0-archived/_sources/internals/reference/celery.utils.timeutils.txtPKXDD2L<celery-1.0-archived/_sources/internals/reference/celery.backends.mongodb.txtPKXDDC JK<celery-1.0-archived/_sources/internals/reference/celery.worker.buckets.txtPKXDD$G;I<celery-1.0-archived/_sources/internals/reference/celery.backends.base.txtPKXDD7B<celery-1.0-archived/_sources/internals/reference/celery.models.txtPKXDDZI"<celery-1.0-archived/_sources/internals/reference/celery.backends.amqp.txtPKXDD#_L[<celery-1.0-archived/_sources/internals/reference/celery.backends.pyredis.txtPKXDDmJ<celery-1.0-archived/_sources/internals/reference/celery.datastructures.txtPKXDDJ6F<celery-1.0-archived/_sources/internals/reference/celery.worker.job.txtPKXDDL<celery-1.0-archived/_sources/internals/reference/celery.worker.scheduler.txtPKXDDm4IIe<celery-1.0-archived/_sources/internals/reference/celery.execute.trace.txtPKXDD~ѻG<celery-1.0-archived/_sources/internals/reference/celery.worker.pool.txtPKXDD<:<celery-1.0-archived/_sources/internals/reference/index.txtPKXDDiҹ@=celery-1.0-archived/_sources/internals/reference/celery.beat.txtPKXDDumM=celery-1.0-archived/_sources/internals/reference/celery.backends.database.txtPKXDDwF8=celery-1.0-archived/_sources/internals/reference/celery.utils.info.txtPKXDDK7aNa=celery-1.0-archived/_sources/internals/reference/celery.worker.controllers.txtPKXDDm99S=celery-1.0-archived/_sources/internals/reference/celery.worker.control.registry.txtPKXDDrBbH =celery-1.0-archived/_sources/internals/reference/celery.utils.compat.txtPKXDD8QJ =celery-1.0-archived/_sources/internals/reference/celery.backends.cache.txtPKXDDɨ\G =celery-1.0-archived/_sources/internals/reference/celery.utils.patch.txtPKXDD&LN =celery-1.0-archived/_sources/internals/reference/celery.worker.heartbeat.txtPKXDD<D=celery-1.0-archived/_sources/internals/reference/celery.backends.txtPKXDD\n)__I=celery-1.0-archived/_sources/internals/reference/celery.worker.revoke.txtPKXDDpӔ?r=celery-1.0-archived/_sources/internals/reference/celery.log.txtPKXDD9A4c=celery-1.0-archived/_sources/userguide/executing.txtPKXDDt1I I 2M1=celery-1.0-archived/_sources/userguide/routing.txtPKXDD0Q=celery-1.0-archived/_sources/userguide/index.txtPKXDDU,]O]O0R=celery-1.0-archived/_sources/userguide/tasks.txtPKXDDE\ 7~=celery-1.0-archived/_sources/userguide/remote-tasks.txtPKXDD&  7Ѭ=celery-1.0-archived/_sources/_theme/ADCTheme/README.txtPKXDDaO<2=celery-1.0-archived/_sources/_theme/ADCThemePrint/README.txtPKXDD1Ṣ:A=celery-1.0-archived/_sources/releases/1.0/announcement.txtPKXDD¸zz7;=celery-1.0-archived/_sources/tutorials/clickcounter.txtPKXDD| | 6 =celery-1.0-archived/_sources/tutorials/otherqueues.txtPKXDDTȕ0=celery-1.0-archived/_sources/tutorials/index.txtPKXDDTG 3=celery-1.0-archived/_sources/tutorials/external.txtPKXDD  6 >celery-1.0-archived/_sources/reference/celery.conf.txtPKXDDgQyAj >celery-1.0-archived/_sources/reference/celery.loaders.default.txtPKXDDݖ;!>celery-1.0-archived/_sources/reference/celery.task.base.txtPKXDDShP  C">celery-1.0-archived/_sources/reference/celery.contrib.abortable.txtPKXDDQ7.$>celery-1.0-archived/_sources/reference/celery.views.txtPKXDDQh<>%>celery-1.0-archived/_sources/reference/celery.decorators.txtPKXDD-?9`&>celery-1.0-archived/_sources/reference/celery.loaders.txtPKXDD4l8|'>celery-1.0-archived/_sources/reference/celery.result.txtPKXDD<=y(>celery-1.0-archived/_sources/reference/celery.bin.celeryd.txtPKXDD]9)>celery-1.0-archived/_sources/reference/celery.signals.txtPKXDD?;/>celery-1.0-archived/_sources/reference/celery.task.http.txtPKXDDMy^:1>celery-1.0-archived/_sources/reference/celery.registry.txtPKXDDW$E2>celery-1.0-archived/_sources/reference/celery.contrib.test_runner.txtPKXDDqQ?3>celery-1.0-archived/_sources/reference/celery.task.builtins.txtPKXDD&;%84>celery-1.0-archived/_sources/reference/celery.states.txtPKXDD @5>celery-1.0-archived/_sources/reference/celery.task.schedules.txtPKXDD'647>celery-1.0-archived/_sources/reference/celery.task.txtPKXDD+0_8>celery-1.0-archived/_sources/reference/index.txtPKXDDVG{Cx;>celery-1.0-archived/_sources/reference/celery.loaders.djangoapp.txtPKXDD b@<>celery-1.0-archived/_sources/reference/celery.bin.celerybeat.txtPKXDD;>>celery-1.0-archived/_sources/reference/celery.messaging.txtPKXDDWN> ?>celery-1.0-archived/_sources/reference/celery.loaders.base.txtPKXDDԙ8Z@>celery-1.0-archived/_sources/reference/celery.events.txtPKXDDƦT  =IA>celery-1.0-archived/_sources/reference/celery.bin.camqadm.txtPKXDD܁@B>celery-1.0-archived/_sources/reference/celery.bin.celeryinit.txtPKXDD|49C>celery-1.0-archived/_sources/reference/celery.execute.txtPKXDDĘ >E>celery-1.0-archived/_sources/reference/celery.task.control.txtPKXDDù<UF>celery-1.0-archived/_sources/reference/celery.exceptions.txtPKXDDoUE+**/hG>celery-1.0-archived/_sources/cookbook/index.txtPKXDD@88/H>celery-1.0-archived/_sources/cookbook/tasks.txtPKXDDs5dQ>celery-1.0-archived/_sources/cookbook/daemonizing.txtPKXDD&h6MT>celery-1.0-archived/_sources/cookbook/unit-testing.txtPKXDD./mD\>celery-1.0-archived/_sources/getting-started/broker-installation.txtPKXDDVaa?l>celery-1.0-archived/_sources/getting-started/periodic-tasks.txtPKXDDPHr>celery-1.0-archived/_sources/getting-started/first-steps-with-django.txtPKXDDZ WW=>celery-1.0-archived/_sources/getting-started/introduction.txtPKXDDna16˄>celery-1.0-archived/_sources/getting-started/index.txtPKXDDĀKK:>celery-1.0-archived/_sources/getting-started/resources.txtPKXDD"H>celery-1.0-archived/_sources/getting-started/first-steps-with-celery.txtPKGG>