
P'^c           @@  s  d  Z  d d l m Z d d l Z d d l Z d d l Z y d d l Z Wn e k
 rc d Z n Xd d l	 m
 Z
 d d l m Z d d l m Z d d l m Z d d l m Z m Z d d	 l m Z d d
 l m Z d d l m Z d d l m Z m Z m Z d d l m Z m Z d d l m  Z  m! Z! d d l" m# Z# d d l$ m% Z% m& Z' d d l( m) Z) d d l* m+ Z+ d d g Z, d Z- d Z. d Z/ d   Z0 d e1 f d     YZ2 d S(   s   
    celery.worker
    ~~~~~~~~~~~~~

    :class:`WorkController` can be used to instantiate in-process workers.

    The worker consists of several components, all managed by bootsteps
    (mod:`celery.bootsteps`).

i    (   t   absolute_importN(   t	   cpu_count(   t   Finalize(   t   detect_environment(   t	   bootsteps(   t   RUNt	   TERMINATE(   t   concurrency(   t	   platforms(   t   signals(   t   ImproperlyConfiguredt   WorkerTerminatet   TaskRevokedError(   t   string_tt   values(   t   default_nodenamet   worker_direct(   t   reload_from_cwd(   t   mlevelt   worker_logger(   t   default_socket_timeouti   (   t   statet   WorkControllerR   g      @s   Trying to select queue subset of {0!r}, but queue {1} is not
defined in the CELERY_QUEUES setting.

If you want to automatically declare unknown queues you can
enable the CELERY_CREATE_MISSING_QUEUES setting.
se   Trying to deselect queue subset of {0!r}, but queue {1} is not
defined in the CELERY_QUEUES setting.
c         C@  s    t  |  t  r |  j d  S|  S(   Nt   ,(   t
   isinstanceR   t   split(   t   s(    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyt   str_to_list=   s    c           B@  s  e  Z d  Z d" Z d" Z d" Z d" Z d" Z d e	 j
 f d     YZ
 d" d" d  Z d" d" d" d" d" d" d  Z d   Z d   Z d   Z d   Z d	   Z d
   Z d   Z d" d  Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z e d  Z e d  Z  e! d  Z" d" e d" d  Z# d   Z$ d   Z% d   Z& d   Z' d   Z( e) d    Z* d" d" d" d" d" d" d" d" d" d" d" d" d" d" d" d" d" d" d" d" d" d" d   Z+ d!   Z, RS(#   s   Unmanaged worker instance.t	   Blueprintc        
   B@  s;   e  Z d  Z d Z e d d d d d d d d	 d
 g	  Z RS(   s   Worker bootstep blueprint.t   Workers   celery.worker.components:Hubs   celery.worker.components:Queuess   celery.worker.components:Pools   celery.worker.components:Beats   celery.worker.components:Timers    celery.worker.components:StateDBs!   celery.worker.components:Consumers'   celery.worker.autoscale:WorkerComponents(   celery.worker.autoreload:WorkerComponent(   t   __name__t
   __module__t   __doc__t   namet   sett   default_steps(    (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR   L   s   c         K@  s   | p |  j  |  _  t |  |  _ |  j  j j   |  j |   |  j |   |  j |   |  j |  j	 |     t
 |  |  j d d g |  _ d  S(   Nt   exitpriorityi
   (   t   appR   t   hostnamet   loadert   init_workert   on_before_initt   setup_defaultst   on_after_initt   setup_instancet   prepare_argsR   t   _send_worker_shutdownt	   _finalize(   t   selfR%   R&   t   kwargs(    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyt   __init__\   s    c      	   K@  sJ  | |  _  |  j | |  |  j t |   |  j se y t   |  _ Wqe t k
 ra d |  _ qe Xn  t |  j  |  _ | p |  j	 |  _
 |  j j   |  _ | d  k r |  j   n | |  _ | |  _ t j j d |   t j |  j  |  _ g  |  _ |  j   |  j d |  j d |  j d |  j d |  j  |  _ |  j j |  |  d  S(   Ni   t   senderR%   t   on_startt   on_closet
   on_stopped(    t   pidfilet   setup_queuest   setup_includesR   R   R   t   NotImplementedErrorR   t   loglevelt   on_consumer_readyt   ready_callbackR%   t
   connectiont	   _conninfot   Nonet   should_use_eventloopt   use_eventloopt   optionsR	   t   worker_initt   sendt   _concurrencyt   get_implementationt   pool_clst   stepst   on_init_blueprintR   R4   R5   R6   t	   blueprintt   apply(   R0   t   queuesR=   R7   t   includeRB   t   exclude_queuesR1   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR,   i   s.    					
		c         C@  s   d  S(   N(    (   R0   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyRJ      s    c         K@  s   d  S(   N(    (   R0   R1   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR)      s    c         K@  s   d  S(   N(    (   R0   R1   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR+      s    c         C@  s%   |  j  r! t j |  j   |  _ n  d  S(   N(   R7   R   t   create_pidlockt   pidlock(   R0   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR4      s    	c         C@  s   d  S(   N(    (   R0   t   consumer(    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR<      s    c         C@  s   |  j  j j   d  S(   N(   R%   R'   t   shutdown_worker(   R0   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR5      s    c         C@  s7   |  j  j   |  j j   |  j r3 |  j j   n  d  S(   N(   t   timert   stopRR   t   shutdownRQ   t   release(   R0   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR6      s    	c         C@  s   t  |  } t  |  } y |  j j j j |  Wn+ t k
 r_ } t t j | |    n Xy |  j j j j	 |  Wn+ t k
 r } t t
 j | |    n X|  j j j r |  j j j j t |  j   n  d  S(   N(   R   R%   t   amqpRM   t   selectt   KeyErrorR
   t   SELECT_UNKNOWN_QUEUEt   formatt   deselectt   DESELECT_UNKNOWN_QUEUEt   conft   CELERY_WORKER_DIRECTt
   select_addR   R&   (   R0   RN   t   excludet   exc(    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR8      s    c         C@  s   t  |  j j j  } | rT | t  |  7} g  | D] } |  j j j |  ^ q2 n  | |  _ t d   t |  j j	  D  } t  t |  | B |  j j _ d  S(   Nc         s@  s   |  ] } | j  j Vq d  S(   N(   t	   __class__R   (   t   .0t   task(    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pys	   <genexpr>   s   (
   t   tupleR%   R_   t   CELERY_INCLUDER'   t   import_task_moduleRN   R"   R   t   tasks(   R0   t   includest   prevt   mt   task_modules(    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR9      s    )		c         K@  s   | S(   N(    (   R0   R1   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR-      s    c         C@  s   t  j j d |   d  S(   NR3   (   R	   t   worker_shutdownRE   (   R0   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR.      s    c         C@  s   y |  j  j |   Wnm t k
 r1 |  j   nS t k
 rc } t j d | d t |  j   n! t	 t
 f k
 r |  j   n Xd S(   s   Starts the workers main loop.s   Unrecoverable error: %rt   exc_infoN(   RK   t   startR   t	   terminatet	   Exceptiont   loggert   errort   TrueRU   t   KeyboardInterruptt
   SystemExit(   R0   Rc   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyRq      s    c         C@  s&   |  j  j |  d d | f d d d  S(   Nt   register_with_event_loopt   argst   descriptions   hub.register(   RK   t   send_all(   R0   t   hub(    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyRy      s    	c         C@  s   |  j  |  j |  S(   N(   t   _quick_acquiret   _process_task(   R0   t   req(    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyt   _process_task_sem   s    c         C@  s   y | j  |  j  Wnd t k
 rI y |  j   Wq{ t k
 rE q{ Xn2 t k
 rz } t j d | t j	   d t
 n Xd S(   s2   Process task by sending it to the pool of workers.s   Internal error: %r
%sRp   N(   t   execute_using_poolt   poolR   t   _quick_releaset   AttributeErrorRs   Rt   t   criticalt	   tracebackt
   format_excRv   (   R0   R   Rc   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR      s    	c         C@  s)   y |  j  j   Wn t k
 r$ n Xd  S(   N(   RR   t   closeR   (   R0   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyt   signal_consumer_close   s    c         C@  s&   t    d k o% |  j j o% |  j j S(   Nt   default(   R   R?   t
   is_eventedR%   t
   IS_WINDOWS(   R0   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyRA      s    c         C@  sI   |  j  j t k rE |  j   | s/ |  j j rE |  j d t  qE n  d S(   s'   Graceful shutdown of the worker server.t   warmN(   RK   R   R   R   R   t   signal_safet	   _shutdownRv   (   R0   t   in_sighandler(    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyRU      s    
c         C@  sI   |  j  j t k rE |  j   | s/ |  j j rE |  j d t  qE n  d S(   s.   Not so graceful shutdown of the worker server.R   N(   RK   R   R   R   R   R   R   t   False(   R0   R   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyRr      s    
c         C@  sM   |  j  d  k	 rI t t  ) |  j  j |  d | |  j  j   Wd  QXn  d  S(   NRr   (   RK   R@   R   t   SHUTDOWN_SOCKET_TIMEOUTRU   t   join(   R0   R   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR     s    c         C@  s   | d  k r |  j j j n | } |  j j j } xs t | p? d  D]_ } | t j k ru t j	 d |  | |  qC | rC t j	 d |  t
 t j | |  qC qC W|  j r |  j j   |  j j   n  y |  j j   Wn t k
 r n Xd  S(   Ns   importing module %ss   reloading module %s(    (   R@   R%   R'   Rn   t   import_from_cwdR"   t   syst   modulesRt   t   debugR   RR   t   update_strategiest   reset_rate_limitsR   t   restartR:   (   R0   R   t   reloadt   reloadert   impt   module(    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR     s     !	c         C@  s1   i |  j  j d 6t j   d 6t |  j j  d 6S(   Nt   totalt   pidt   clock(   R   t   total_countt   ost   getpidt   strR%   R   (   R0   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyt   info!  s    c         C@  s   t  d  k r t d   n  t  j t  j  } i | j d 6| j d 6| j d 6| j d 6| j	 d 6| j
 d 6| j d 6| j d	 6| j d
 6| j d 6| j d 6| j d 6| j d 6| j d 6| j d 6| j d 6S(   Ns%   rusage not supported by this platformt   utimet   stimet   maxrsst   ixrsst   idrsst   isrsst   minfltt   majfltt   nswapt   inblockt   oublockt   msgsndt   msgrcvt   nsignalst   nvcswt   nivcsw(   t   resourceR@   R:   t	   getrusaget   RUSAGE_SELFt   ru_utimet   ru_stimet	   ru_maxrsst   ru_ixrsst   ru_idrsst   ru_isrsst	   ru_minfltt	   ru_majfltt   ru_nswapt
   ru_inblockt
   ru_oublockt	   ru_msgsndt	   ru_msgrcvt   ru_nsignalst   ru_nvcswt	   ru_nivcsw(   R0   R   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyt   rusage&  s(    














c         C@  sz   |  j    } | j |  j j  |    | j |  j j j  |  j   y |  j   | d <Wn t k
 ru d | d <n X| S(   NR   s   N/A(   R   t   updateRK   RR   R   R:   (   R0   R   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyt   stats=  s    c         C@  s.   d j  d |  d |  j r' |  j j   n d  S(   Ns#   <Worker: {self.hostname} ({state})>R0   R   t   initializing(   R\   RK   t   human_state(   R0   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyt   __repr__G  s    	c         C@  s   |  j  S(   N(   R&   (   R0   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyt   __str__N  s    c         C@  s   t  S(   N(   R   (   R0   (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR   Q  s    c         K@  s  |  j  d |  |  _ |  j  d |  |  _ |  j  d |  |  _ |  j  d |  |  _ |  j  d |  |  _ |  j  d |  |  _ |  j  d |  |  _ |  j  d |  |  _ |  j  d	 |	  |  _	 |  j  d
 |
  |  _
 |  j  d |  |  _ |  j  d |  |  _ |  j  d |  |  _ |  j  d |  |  _ |  j  d |  |  _ |  j  d |  |  _ |  j  d |  |  _ |  j  d |  |  _ |  j  d |  |  _ t |  j  d |   |  _ |  j  d |  |  _ |  j  d |  |  _ d  S(   NR   t	   log_levelt   log_filet   send_eventsR   RR   RT   t   timer_precisiont
   autoscalert   autoreloadert   pool_putlockst   pool_restartst   force_execvt   state_dbt   schedule_filenamet   celerybeat_schedulert   task_time_limitt   task_soft_time_limitt   max_tasks_per_childt   prefetch_multipliert   disable_rate_limitst   worker_lost_wait(   t   _getoptR   R;   t   logfileR   RH   t   consumer_clst	   timer_clsR   t   autoscaler_clst   autoreloader_clsR   R   R   R   R   t   scheduler_clsR   R   R   t   intR   R   R   (   R0   R   R;   R   R   RH   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   t   _kw(    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR*   U  s<    
	c         C@  s)   | d  k	 r | S|  j j j | d d S(   Nt	   namespacet   celeryd(   R@   R%   R_   t   find_value_for_key(   R0   t   keyt   value(    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR     s    N(-   R   R   R    R@   R%   RQ   RK   R   t	   semaphoreR   R   R2   R,   RJ   R)   R+   R4   R<   R5   R6   R8   R9   R-   R.   Rq   Ry   R   R   R   RA   R   RU   Rr   Rv   R   R   R   R   R   R   R   t   propertyR   R*   R   (    (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyR   C   s`   	%																			
				((3   R    t
   __future__R    R   R   R   R   t   ImportErrorR@   t   billiardR   t   billiard.utilR   t	   kombu.synR   t   celeryR   t   celery.bootstepsR   R   R   RF   R   R	   t   celery.exceptionsR
   R   R   t   celery.fiveR   R   t   celery.utilsR   R   t   celery.utils.importsR   t   celery.utils.logR   R   Rt   t   celery.utils.threadsR   t    R   t   __all__R   R[   R^   R   t   objectR   (    (    (    s8   /tmp/pip-unpacked-wheel-gV1wwp/celery/worker/__init__.pyt   <module>   s:   
	