
    `f0d              	          d Z ddlZddlZddlZddlmZ ddlmZ ddlmZ d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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! dZ" e#ed          Z$dZ%dZ&dZ' e!e(          Z)e)j*        Z+dZ,dZ-dZ.ej/        ej0        ej1        ej2        ej3        ej4        ej5        ej6        dZ7 G d de          Z8 ej9        e8            edd           d             Z:d e%e
e;e<fd!Z=d" Z>d# Z? e?d$           G d% d&                      Z@ e?d'           G d( d)                      ZA G d* d+          ZBd, ZCd- ZDdS ).a  In-memory representation of cluster state.

This module implements a data-structure used to keep
track of the state of a cluster of workers and the tasks
it is working on (by consuming events).

For every event consumed the state is updated,
so the state represents the state of the cluster
at the time of the last event.

Snapshots (:mod:`celery.events.snapshot`) can be used to
take "pictures" of this state at regular intervals
to for example, store that in a database.
    N)defaultdict)Callable)datetime)Decimal)islice)
itemgetter)time)MappingOptional)WeakSetref)	timetuple)cached_property)states)LRUCachememoizepass1)
get_logger)WorkerTaskStateheartbeat_expirespypy_version_info      zmSubstantial drift from %s may mean clocks are out of sync.  Current drift is %s seconds.  [orig: %s recv: %s]z4<State: events={0.event_count} tasks={0.task_count}>z9<Worker: {0.hostname} ({0.status_string} clock:{0.clock})z4<Task: {0.name}({0.uuid}) {0.state} clock:{0.clock}>)sentreceivedstartedfailedretried	succeededrevokedrejectedc                   (     e Zd ZdZ fdZd Z xZS )CallableDefaultdicta  :class:`~collections.defaultdict` with configurable __call__.

    We use this for backwards compatibility in State.tasks_by_type
    etc, which used to be a method but is now an index instead.

    So you can do::

        >>> add_tasks = state.tasks_by_type['proj.tasks.add']

    while still supporting the method call::

        >>> add_tasks = list(state.tasks_by_type(
        ...     'proj.tasks.add', reverse=True))
    c                 H    || _          t                      j        |i | d S N)funsuper__init__)selfr(   argskwargs	__class__s       E/var/www/html/env/lib/python3.11/site-packages/celery/events/state.pyr*   zCallableDefaultdict.__init___   s,    $)&)))))    c                      | j         |i |S r'   )r(   )r+   r,   r-   s      r/   __call__zCallableDefaultdict.__call__c   s    tx((((r0   )__name__
__module____qualname____doc__r*   r2   __classcell__)r.   s   @r/   r%   r%   O   sQ         * * * * *) ) ) ) ) ) )r0   r%   i  c                     | d         S Nr    )a_s     r/   <lambda>r=   j   s
    1Q4 r0   )maxsizekeyfunc           	      ~    t          t          | |t          j        |          t          j        |                     d S r'   )warnDRIFT_WARNINGr   fromtimestamp)hostnamedriftlocal_received	timestamps       r/   _warn_driftrH   j   sB     	%			/	/				*	*, , , , ,r0   <   c                 x     |||          r ||          n|} || |          r ||           } | ||dz  z  z   S )z#Return time when heartbeat expires.g      Y@r:   )rG   freqexpire_windowr   float
isinstances         r/   r   r   r   s^     %*T733=55;;;Dz)W%% %E)$$	 3455r0   c                      | di |S )Nr:   r:   )clsfieldss     r/   _depickle_taskrR   ~   s    3====r0   c                       fd}|S )Nc                 8    fd}|| _         fd}|| _        | S )Nc                     t          || j                  r"t          |           t          |          k    S t          S r'   )rN   r.   getattrNotImplemented)thisotherattrs     r/   __eq__z8with_unique_field.<locals>._decorate_cls.<locals>.__eq__   s=    %00 CtT**geT.B.BBB!!r0   c                 >    t          t          |                     S r'   )hashrV   )rX   rZ   s    r/   __hash__z:with_unique_field.<locals>._decorate_cls.<locals>.__hash__   s    d++,,,r0   )r[   r^   )rP   r[   r^   rZ   s      r/   _decorate_clsz(with_unique_field.<locals>._decorate_cls   sJ    	" 	" 	" 	" 	" 
	- 	- 	- 	- 	-
r0   r:   )rZ   r_   s   ` r/   with_unique_fieldr`      s$         r0   rD   c                       e Zd ZdZdZeZdZesedz   Z		 	 	 ddZ
d	 Zd
 Zd Zd Zed             Zed             Zeefd            Zed             ZdS )r   zWorker State.   )rD   pidrK   
heartbeatsclockactive	processedloadavgsw_identsw_versw_sys)event__dict____weakref__NrI   r   c                     || _         || _        || _        |g n|| _        |pd| _        || _        || _        || _        |	| _        |
| _	        || _
        |                                 | _        d S r9   )rD   rc   rK   rd   re   rf   rg   rh   ri   rj   rk   _create_event_handlerrl   )r+   rD   rc   rK   rd   re   rf   rg   rh   ri   rj   rk   s               r/   r*   zWorker.__init__   su     !	 * 2""
Za
" //11


r0   c                     | j         | j        | j        | j        | j        | j        | j        | j        | j        | j	        | j
        | j        ffS r'   )r.   rD   rc   rK   rd   re   rf   rg   rh   ri   rj   rk   r+   s    r/   
__reduce__zWorker.__reduce__   sE    ~tx $T[ $dm $T[ : : 	:r0   c                      t           j         j         j         j        j         j        j        d d d t          t          t          t          j
        t          f fd	}|S )Nc	                    |pi }|                                 D ]\  }	}
 |	|
           | dk    r	g d d <   d S |r|sd S  | ||           ||          z
            }||k    rt          j        |||           |rH |          }|dz
  k    r d           |r|d         k    r |           d S  ||           d S d S )Noffline   r   )itemsrH   rD   )type_rG   rF   rQ   	max_driftabsintinsortlenkvrE   hearts_set	hb_appendhb_pophbmaxrd   r+   s                r/   rl   z+Worker._create_event_handler.<locals>.event   s=    \rF ! !1T1a    	!! "
111% Y FCC//##i..@AA9$$u .	; ; ;! ; S__F	))q			 ;.:b>"A"A!	.11111z>:::::; ;r0   )object__setattr__heartbeat_maxrd   popappendHEARTBEAT_DRIFT_MAXr|   r}   bisectr~   r   )r+   rl   r   r   r   r   rd   s   ` @@@@@r/   rp   zWorker._create_event_handler   s    !"_
$O*	#'!%d/ScC	; 	; 	; 	; 	; 	; 	; 	; 	; 	; 	;0 r0   c                 ~    |rt          |fi |n|}|                                D ]\  }}t          | ||           d S r'   )dictry   setattr)r+   fkwdr   r   s         r/   updatezWorker.update   sV    &DMMbMMMQGGII 	  	 DAqD!Q	  	 r0   c                 6    t                               |           S r'   )R_WORKERformatrr   s    r/   __repr__zWorker.__repr__   s    t$$$r0   c                     | j         rdndS )NONLINEOFFLINEaliverr   s    r/   status_stringzWorker.status_string   s    :4xx94r0   c                 N    t          | j        d         | j        | j                  S )Nrx   )r   rd   rK   rL   rr   s    r/   r   zWorker.heartbeat_expires   s*     !4!%D,>@ @ 	@r0   c                 P    t          | j        o |            | j        k               S r'   )boolrd   r   )r+   nowfuns     r/   r   zWorker.alive   s%    DOI43I(IJJJr0   c                 ,    d                     |           S )Nz{0.hostname}.{0.pid})r   rr   s    r/   idz	Worker.id   s    %,,T222r0   )NNrI   Nr   NNNNNN)r3   r4   r5   r6   r   HEARTBEAT_EXPIRE_WINDOWrL   _fieldsPYPY	__slots__r*   rs   rp   r   r   propertyr   r   r	   r   r   r:   r0   r/   r   r      s       M+M#G  CBB	57BFBF2 2 2 2 : : :  B     
% % % 5 5 X5 @ @ X@  K K K XK 3 3 X3 3 3r0   r   uuidc                      e Zd ZdZdxZxZxZxZxZxZ	xZ
xZxZxZxZxZxZxZxZxZxZxZxZxZxZxZxZxZZej        ZdZ dZ!e"sdZ#ej$        diZ%dZ&ddZ'dddej(        e)e*j+        ej,        fd	Z-dd
Z.d Z/d Z0d Z1d Z2d Z3d Z4e5d             Z6e5d             Z7e5d             Z8e9d             Z:e9d             Z;dS )r   zTask State.Nr   )r   namestater   r   r   r#   r!   r   r    r"   r,   r-   etaexpiresretriesworkerresult	exceptionrG   runtime	tracebackexchangerouting_keyre   clientrootroot_idparent	parent_idchildren)rm   rn   )r   r,   r-   r   r   r   r   r   )r,   r-   r   r   r   r   r   r   r   r   r   r   c                     | _         | _         j        #t           fd|pdD                        _        nt                       _         j         j         j        d _        |r j        	                    |           d S d S )Nc              3   r   K   | ]1}|j         j        v j         j                            |          V  2d S r'   )cluster_statetasksget).0task_idr+   s     r/   	<genexpr>z Task.__init__.<locals>.<genexpr>"  sT       $ $d0666 "(,,W556666$ $r0   r:   )r   r   r   )
r   r   r   r   _serializable_children_serializable_root_serializable_parent_serializer_handlersrm   r   )r+   r   r   r   r-   s   `    r/   r*   zTask.__init__  s    	*)# $ $ $ $'~2$ $ $  DMM $IIDM3+/%
 %
!
  	)M  (((((	) 	)r0   c	                   
 |pi } ||          }	|	 || ||           n|                                 }	|	|k    re| j        |k    rZ ||	           || j                  k    r=| j                            |	          

 
fd|                                D             }n|                    |	|           | j                            |           d S )Nc                 $    i | ]\  }}|v 	||S r:   r:   )r   r   r   keeps      r/   
<dictcomp>zTask.event.<locals>.<dictcomp>E  s+       !QqDyyAqyyyr0   )r   rG   )upperr   merge_rulesr   ry   r   rm   )r+   rz   rG   rF   rQ   
precedencer   task_event_to_stateRETRYr   r   s             @r/   rl   z
Task.event1  s    2 $#E**GD%++++KKMME E>>djE11
5!!JJtz$:$:::#''..D   %+\\^^   MMM;;; 	V$$$$$r0   c                 f     sg n j         n fd}t           |                      S )z;Information about this task suitable for on-screen display.Nc               3      K   t                    t                    z   D ]} t          | d           }|| |fV  d S r'   )listrV   )keyvalueextrarQ   r+   s     r/   _keyszTask.info.<locals>._keysS  sY      F||d5kk1 % %c400$u*$$$% %r0   )_info_fieldsr   )r+   rQ   r   r   s   ``` r/   infoz	Task.infoN  s[    *U&,n""&	% 	% 	% 	% 	% 	% 	% EEGG}}r0   c                 6    t                               |           S r'   )R_TASKr   rr   s    r/   r   zTask.__repr__[  s    }}T"""r0   c                 b     t           j         j        j         fd j        D             S )Nc           	      Z    i | ]'}|  |t                      |                    (S r:   )r   )r   r   r   handlerr+   s     r/   r   z Task.as_dict.<locals>.<dictcomp>a  sI     
 
 
34A wwq%  T1..
 
 
r0   )r   __getattribute__r   r   r   )r+   r   r   s   `@@r/   as_dictzTask.as_dict^  sO    %+/
 
 
 
 
 
8<
 
 
 	
r0   c                 $    d | j         D             S )Nc                     g | ]	}|j         
S r:   r   )r   tasks     r/   
<listcomp>z/Task._serializable_children.<locals>.<listcomp>f  s    222D222r0   )r   r+   r   s     r/   r   zTask._serializable_childrene  s    22DM2222r0   c                     | j         S r'   )r   r   s     r/   r   zTask._serializable_rooth  s
    |r0   c                     | j         S r'   )r   r   s     r/   r   zTask._serializable_parentk  s
    ~r0   c                 F    t           | j        |                                 ffS r'   )rR   r.   r   rr   s    r/   rs   zTask.__reduce__n  s    ???r0   c                     | j         S r'   )r   rr   s    r/   r   zTask.idq  s
    yr0   c                 6    | j         | j        n| j         j        S r'   )r   r   r   rr   s    r/   originzTask.originu  s    "k1t{{t{~Er0   c                 (    | j         t          j        v S r'   r   r   READY_STATESrr   s    r/   readyz
Task.readyy  s    zV000r0   c                 l    	 | j         o| j        j        j        | j                  S # t          $ r Y d S w xY wr'   )r   r   r   dataKeyErrorrr   s    r/   r   zTask.parent}  sF    	>Sd&8&>&CDN&SS 	 	 	44	   "% 
33c                 l    	 | j         o| j        j        j        | j                  S # t          $ r Y d S w xY wr'   )r   r   r   r   r   rr   s    r/   r   z	Task.root  sF    	<OD$6$<$A$,$OO 	 	 	44	r   )NNN)NN)<r3   r4   r5   r6   r   r   r   r   r!   r   r    r"   r#   r,   r-   r   r   r   r   r   r   rG   r   r   r   r   r   r   r   r   PENDINGr   re   r   r   r   RECEIVEDr   r   r*   r   r   TASK_EVENT_TO_STATEr   r   rl   r   r   r   r   r   r   rs   r   r   r   r   r   r   r   r:   r0   r/   r   r      sv       
 AEED E8 Ed EW Ey E6 EG EEE!E$*E-0E3:E=DEEE#E&/E29E<EE 	E E ")E ,5vNEEG  0/	 	 
KL) ) ) )& &*$t*G"5"9% % % %:   # # #
 
 
3 3 3    @ @ @   X F F XF 1 1 X1   _   _  r0   r   c                      e Zd ZdZeZeZdZdZdZ	 	 	 	 	 d"dZ	e
d             Zd	 Zd#dZd#defdZd#dZd#defdZd Zd Zd Zd Zd Zd Zd ZefdZd$dee         fdZd%defdZeZd%dZ d%dZ!d Z"d Z#d  Z$d! Z%dS )&r   zRecords clusters state.r   rb   N  '  c                    || _         |t          |          n|| _        |t          |          n|| _        |g n|| _        || _        || _        || _        || _        t          j
                    | _        i | _        t                      | _        i | _        |                                  t#          | j        t&                    | _        | j                            t-          |	| j                             t#          | j        t&                    | _        | j                            t-          |
| j                             d S r'   )event_callbackr   workersr   	_taskheapmax_workers_in_memorymax_tasks_in_memoryon_node_joinon_node_leave	threadingLock_mutexhandlersset_seen_types_tasks_to_resolverebuild_taskheapr%   _tasks_by_typer   tasks_by_typer   !_deserialize_Task_WeakSet_Mapping_tasks_by_workertasks_by_worker)r+   callbackr   r   taskheapr  r  r  r  r  r  s              r/   r*   zState.__init__  sV   
 '"? !!677707 	  2333,1 	
'/X%:"#6 (*n&&55!#0* *!!-mTZHH	J 	J 	J  3!7 ,  ,##-otzJJ	L 	L 	L 	L 	Lr0   c                 *    |                                  S r'   )_create_dispatcherrr   s    r/   _eventzState._event  s    &&(((r0   c                     |                     dd          }| j        5  	  ||i ||r|                                  cd d d            S # |r|                                  w w xY w# 1 swxY w Y   d S )Nclear_afterF)r   r  _clear)r+   r(   r,   r-   r  s        r/   freeze_whilezState.freeze_while  s    jj66[ 	" 	""sD+F++ "KKMMM	" 	" 	" 	" 	" 	" 	" 	"  "KKMMMM"		" 	" 	" 	" 	" 	" 	" 	" 	" 	"s'   A&A
A&
A##A&&A*-A*Tc                 n    | j         5  |                     |          cd d d            S # 1 swxY w Y   d S r'   )r  _clear_tasksr+   r   s     r/   clear_taskszState.clear_tasks  s    [ 	, 	,$$U++	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,   *..r   c                     |rRd |                                  D             }| j                                         | j                            |           n| j                                         g | j        d d <   d S )Nc                 @    i | ]\  }}|j         t          j        v||S r:   r   )r   r   r   s      r/   r   z&State._clear_tasks.<locals>.<dictcomp>  s8       )tT:V%888 d888r0   )	itertasksr   clearr   r  )r+   r   in_progresss      r/   r  zState._clear_tasks  s     	 -1^^-=-=  K JJk****Jqqqr0   c                 ~    | j                                          |                     |           d| _        d| _        d S r9   )r   r$  r  event_count
task_countr  s     r/   r  zState._clear  s=    %   r0   c                 n    | j         5  |                     |          cd d d            S # 1 swxY w Y   d S r'   )r  r  r  s     r/   r$  zState.clear  }    [ 	& 	&;;u%%	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	& 	&r   c                     	 | j         |         }|r|                    |           |dfS # t          $ r  | j        |fi |x}| j         |<   |dfcY S w xY w)zsGet or create worker by hostname.

        Returns:
            Tuple: of ``(worker, was_created)`` pairs.
        FT)r   r   r   r   )r+   rD   r-   r   s       r/   get_or_create_workerzState.get_or_create_worker  s    	 \(+F &f%%%5=  	  	  	 .9dk/$ /$"/$ /$ $FT\(+4<	 s   '* &AAc                     	 | j         |         dfS # t          $ r( |                     ||           x}| j         |<   |dfcY S w xY w)zGet or create task by uuid.Fr   T)r   r   r   )r+   r   r   s      r/   get_or_create_taskzState.get_or_create_task  se    	:d#U** 	 	 	&*iiDi&I&IID4:d#:	s    /AAc                 n    | j         5  |                     |          cd d d            S # 1 swxY w Y   d S r'   )r  r  )r+   rl   s     r/   rl   zState.event  r*  r   c           	          |                      t          |d                    d|g                              d         S )Deprecated, use :meth:`event`.-r   typer   r  r   joinr+   rz   rQ   s      r/   
task_eventzState.task_event  s6    {{4SXXvuo-F-FGGGHHKKr0   c           	          |                      t          |d                    d|g                              d         S )r2  r3  r   r4  r   r6  r8  s      r/   worker_eventzState.worker_event  s7    {{4SXXx6G-H-HIIIJJ1MMr0   c                    	
  j         j         j        t          ddd          t          ddddd           j        j        j         j         j        z   j	        j
         j         j        c j         j        c j         j        cj        j        j        j        c
 j        j         j        j        	t(          t*          t,          j        df	
 fd	}|S )NrD   rG   rF   r   re   Tc                    %xj         dz  c_         r %|            | d                             d          \  }}}	  |          } |||           |fS # |$ r Y nw xY w|dk    r	  +|           \  }	}
}|dk    }	  !|	          d}}n+# |$ r# |r |	          d}}n |	          x},|	<   Y nw xY w|                    ||
||            #r|s|dk    r #|           $r#|r! $|           ,                    |	d            ||f|fS # |$ r Y d S w xY w|dk    r$ (|           \  }}	}
}}|d	k    }	  |          d}}n# |$ r  |%
          x}'|<   d}Y nw xY w|r|	|_        nJ	  !|	          }n# |$ r  |	          x},|	<   Y nw xY w||_        ||r|                    d ||
           |r|	n|j        }t          &          }|dz   "k    r *d            |||
|t          |                    }|r|&d         k    r )|           n |&|           |dk    r%xj	        dz  c_	        |                    ||
||            |j
        }|I |           |r< |                              |             |	                              |           |j        rN	 %j        |j                 }|j                            |           n # |$ r %                    |           Y nw xY w	 %j                            |          }|j                            |           n# |$ r Y nw xY w||f|fS d S )Nrw   r5  r3  r   rv   Fonliner   r   r.  Tr   rx   r   )r'  	partitionrl   r   r   r   r   r   r   r(  r   addr   r   r   _add_pending_task_childr  r   )-rl   r   r   r~   createdgroupr<   subjectr   rD   rG   rF   
is_offliner   r   re   is_client_eventr   task_createdr   heapstimetup	task_nameparent_task	_childrenr   r   add_typer   get_handlerget_taskget_task_by_type_setget_task_by_worker_set
get_workermax_events_in_heapr  r  r+   r  r   tfields	th_appendth_popwfieldsr   s-                            r/   r  z(State._create_dispatcher.<locals>._event  s    ! ,tU+++ %f 7 7 < <E1g8%+e,, ww..77    
   6:A'%..7Hi ")I!5JJ*4*X*>*># J J J% J.4fX.>.>GFF9?9I9IIFWX%6	J
 LL)^UKKK# - -Gx4G4G$V,,,$ 4 4%f---Hd333"G,g55#     DD$ &*1'%..(x")V"3()1$,DD ( ( ()-d$)G)G)GGD5;#'LLL( # 	F"*DKKF!+H!5!5# F F F5;VH5E5EE!2!2!2F"(DK)n)T>9EEE%4C&) H19111F1III $)E9fc$iiHH .Wx|33Ig&&&&F8W---j((OOq(OO

7I~uEEE I	(HY'''# C,,Y77;;DAAA..x88<<TBBB> 77&*j&@ $,006666 $ ; ; ;44T:::::;4 $ 6 : :4 @ @I M((3333     D
 l+W44u !s~    A A! A!+D B %B76B7DD=E E'&E'5F FF5K" "K?>K?L8 8M ?M )r	  __getitem__r   r   r  r   r   r  heap_multiplierr  r@  r  r  r   r   r   r   r   r  r  r   r   r   r~   )r+   r  r   r   rM  r   rN  rO  rP  rQ  rR  rS  r  r  r  r   rT  rU  rV  rW  r   s   ` @@@@@@@@@@@@@@@@@@@r/   r  zState._create_dispatcher  s    m/,Z6FGGVZ-w8 8>O	
 "58LL#'&*&79K#mj$)t,&|79O
H#1=!%!5!A ' -]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5 ]	5| r0   c                     	 | j         |j                 }n-# t          $ r  t                      x}| j         |j        <   Y nw xY w|                    |           d S r'   )r  r   r   r   r@  )r+   r   chs      r/   rA  zState._add_pending_task_child|  si    	D'7BB 	D 	D 	D:A))CB'777	D
ts    '??c                     fd| j                                         D             x}| j        d d <   |                                 d S )Nc           
      d    g | ],} |j         |j        |j        t          |                    -S r:   )re   rG   r   r   )r   tr   s     r/   r   z*State.rebuild_taskheap.<locals>.<listcomp>  sE     $
 $
 $
 Iagq{AHc!ff==$
 $
 $
r0   )r   valuesr  sort)r+   r   heaps    ` r/   r  zState.rebuild_taskheap  s^    $
 $
 $
 $
Z&&(($
 $
 $
 	
t~aaa  			r0   limitc              #      K   t          | j                                                  D ]\  }}|V  |r|dz   |k    r d S d S )Nrw   )	enumerater   ry   )r+   rb  indexrows       r/   r#  zState.itertasks  s`      #DJ$4$4$6$677 	 	JE3III e++	 	r0   reversec              #      K   | j         }|rt          |          }t                      }t          |d|          D ]:} |d                     }|&|j        }||vr||fV  |                    |           ;dS )zkGenerator yielding tasks ordered by time.

        Yields:
            Tuples of ``(uuid, Task)``.
        r      N)r  reversedr
  r   r   r@  )r+   rb  rg  _heapseenevtupr   r   s           r/   tasks_by_timezState.tasks_by_time  s        	$UOOEuuE1e,, 	# 	#E58::Dyt##*$$$HHTNNN	# 	#r0   c                 f    t          fd|                     |          D             d|          S )zGet all tasks by type.

        This is slower than accessing :attr:`tasks_by_type`,
        but will be ordered by time.

        Returns:
            Generator: giving ``(uuid, Task)`` pairs.
        c              3   <   K   | ]\  }}|j         k    ||fV  d S r'   )r   )r   r   r   r   s      r/   r   z'State._tasks_by_type.<locals>.<genexpr>  sC       # #jdD	T!! D\!!!!# #r0   rg  r   r   rn  )r+   r   rb  rg  s    `  r/   r  zState._tasks_by_type  sR     # # # #D,>,>w,>,O,O # # #u
 
 	
r0   c                 f    t          fd|                     |          D             d|          S )znGet all tasks by worker.

        Slower than accessing :attr:`tasks_by_worker`, but ordered by time.
        c              3   F   K   | ]\  }}|j         j        k    ||fV  d S r'   )r   rD   )r   r   r   rD   s      r/   r   z)State._tasks_by_worker.<locals>.<genexpr>  sF       2 2jdD$00 D\00002 2r0   rq  r   rr  )r+   rD   rb  rg  s    `  r/   r  zState._tasks_by_worker  sR    
 2 2 2 2D,>,>w,>,O,O 2 2 2u
 
 	
r0   c                 *    t          | j                  S )z%Return a list of all seen task types.)sortedr  rr   s    r/   
task_typeszState.task_types  s    d&'''r0   c                 H    d | j                                         D             S )z+Return a list of (seemingly) alive workers.c              3   (   K   | ]}|j         	|V  d S r'   r   )r   ws     r/   r   z&State.alive_workers.<locals>.<genexpr>  s)      <<aAG<<<<<<<r0   )r   r_  rr   s    r/   alive_workerszState.alive_workers  s$    <<4<..00<<<<r0   c                 6    t                               |           S r'   )R_STATEr   rr   s    r/   r   zState.__repr__  s    ~~d###r0   c                     | j         | j        | j        | j        d | j        | j        | j        | j        t          | j	                  t          | j
                  f
fS r'   )r.   r   r   r   r  r  r  r  _serialize_Task_WeakSet_Mappingr  r  rr   s    r/   rs   zState.__reduce__  sX    ~tz4&(@t1+D,>??+D,@AA 
 
 	
r0   )
NNNNr   r   NNNN)Tr'   )NT)&r3   r4   r5   r6   r   r   r'  r(  rY  r*   r   r  r  r  r   r  r  r$  r,  r/  rl   r9  r;  r  rA  r   r  r   r}   r#  rn  tasks_by_timestampr  r  rw  r{  r   rs   r:   r0   r/   r   r     s(       !!FDKJO $48AF2659	L L L L> ) ) _)" " ", , , ,
 
$ 
 
 
 
   & &4 & & & &        & & &L L LN N Ny y yv   *3     x}    # # # # # #$ '
 
 
 
	
 	
 	
 	
( ( (= = =$ $ $
 
 
 
 
r0   r   c                 >    d |                                  D             S )Nc                 .    i | ]\  }}|d  |D             S )c                     g | ]	}|j         
S r:   r   )r   r^  s     r/   r   z>_serialize_Task_WeakSet_Mapping.<locals>.<dictcomp>.<listcomp>  s    '''A14'''r0   r:   )r   r   r   s      r/   r   z3_serialize_Task_WeakSet_Mapping.<locals>.<dictcomp>  s-    KKKKD%D'''''KKKr0   ry   )mappings    r/   r  r    s    KK7==??KKKKr0   c                 L    | pi } fd|                                  D             S )Nc                 N    i | ]!\  }}|t          fd |D                       "S )c              3   0   K   | ]}|v |         V  d S r'   r:   )r   ir   s     r/   r   z?_deserialize_Task_WeakSet_Mapping.<locals>.<dictcomp>.<genexpr>  s+      >>q1::%(::::>>r0   )r   )r   r   idsr   s      r/   r   z5_deserialize_Task_WeakSet_Mapping.<locals>.<dictcomp>  sL     . . .c '>>>>C>>>>> . . .r0   r  )r  r   s    `r/   r  r    s?    mG. . . .$]]__. . . .r0   )Er6   r   sysr  collectionsr   collections.abcr   r   decimalr   	itertoolsr   operatorr   r	   typingr
   r   weakrefr   r   kombu.clocksr   kombu.utils.objectsr   celeryr   celery.utils.functionalr   r   r   celery.utils.logr   __all__hasattrr   r   r   rB   r3   loggerwarningrA   r}  r   r   r   r   STARTEDFAILUREr   SUCCESSREVOKEDREJECTEDr   r%   registerrH   rM   rN   r   rR   r`   r   r   r   r  r  r:   r0   r/   <module>r     sr     



     # # # # # # $ $ $ $ $ $                               $ $ $ $ $ $ $ $                 " " " " " " / / / / / /       < < < < < < < < < < ' ' ' ' ' '
: ws'((
    ' 
 
H		~
@F	? N~n|~	 	 ) ) ) ) )+ ) ) )0  % & & & 	//000, , 10, ')$;%Uz	6 	6 	6 	6    $ :Z3 Z3 Z3 Z3 Z3 Z3 Z3 Z3z 6X X X X X X X XvB
 B
 B
 B
 B
 B
 B
 B
J
L L L. . . . .r0   