Ë
    ˜V.j0d  ã            	       óÒ  — 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)jT                  Z+dZ,dZ-dZ.ej^                  ej`                  ejb                  ejd                  ejf                  ejh                  ejj                  ejl                  dœZ7 G d„ de«      Z8 ejr                  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-„ ZDy).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                 ó2   •— || _         t        ‰| �  |i |¤Ž y ©N)ÚfunÚsuperÚ__init__)Úselfr(   ÚargsÚkwargsÚ	__class__s       €úUC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\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   € Øˆt�x‰x˜Ð( Ñ(Ð(r0   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r*   r2   Ú__classcell__)r.   s   @r/   r%   r%   O   s   ø„ ñô*ö)r0   r%   iè  c                 ó   — | d   S ©Nr   © )ÚaÚ_s     r/   Ú<lambda>r=   j   s   € ¨1¨Qª4r0   )ÚmaxsizeÚkeyfunc           	      óv   — t        t        | |t        j                  |«      t        j                  |«      «       y r'   )ÚwarnÚDRIFT_WARNINGr   Úfromtimestamp)ÚhostnameÚdriftÚlocal_receivedÚ	timestamps       r/   Ú_warn_driftrH   j   s.   € ô 	Œ˜ %Ü	×	Ñ	 Ó	/Ü	×	Ñ	 	Ó	*õ,r0   é<   c                 ó`   —  |||«      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   sA   € ñ % T¨7Ô3‰5�Œ;¸€DÙ�)˜WÔ%Ù˜)Ó$ˆ	Ø˜ °Ñ 3Ñ4Ñ5Ð5r0   c                 ó   —  | di |¤ŽS )Nr:   r:   )ÚclsÚfieldss     r/   Ú_depickle_taskrR   ~   s   € Ù‰=�‰=Ðr0   c                 ó   ‡ — ˆ fd„}|S )Nc                 ó8   •— ˆfd„}|| _         ˆfd„}|| _        | S )Nc                 ón   •— 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__†   s0   ø€ Ü˜% §¡Ô0Ü˜t TÓ*¬g°e¸TÓ.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„   s"   ø€ ô	"ð ˆŒ
ô	-àˆŒàˆ
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y)r   zWorker State.é   )rD   ÚpidrK   Ú
heartbeatsÚclockÚactiveÚ	processedÚloadavgÚsw_identÚsw_verÚsw_sys)ÚeventÚ__dict__Ú__weakref__Nc                 óØ   — || _         || _        || _        |€g n|| _        |xs d| _        || _        || _        || _        |	| _        |
| _	        || _
        | j                  «       | _        y 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__¡   sl   € ð !ˆŒØˆŒØˆŒ	Ø *Ð 2™"¸
ˆŒØ’Z˜aˆŒ
ØˆŒØ"ˆŒØˆŒØ ˆŒØˆŒØˆŒØ×/Ñ/Ó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__±   s]   € Ø�~‰~ §¡¨t¯x©x¸¿¹Ø $§¡°·±¸T¿[¹[Ø $§¡°·±¸d¿m¹mØ $§¡¨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	                 óL  •— |xs i }|j                  «       D ]  \  }	}
 ‰‰|	|
«       Œ | dk(  rg ‰d d  y |r|sy  | ||«       ||«      z
  «      }||kD  rt        ‰j                  |||«       |r5 |‰«      }|‰dz
  kD  r ‰d«       |r|‰d   kD  r	 ‰|«       y  |‰|«       y y )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À   ø€ ð ’\˜rˆFØŸ™ž‘��1Ù�T˜1˜aÕ ð 'à˜	Ò!Ø "�
™1‘á%©YØÙ™C Ó/±#°i³.Ñ@ÓA�Ø˜9Ò$Ü §¡¨uØ .°	ô;á!Ù  ›_�FØ ¨¡	Ò)Ù˜qœ	Ù .°:¸b±>Ò"AÙ! .Õ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·   si   ý€ Ü×!Ñ!ˆØ×"Ñ"ˆØ—_‘_ˆ
Ø—‘×$Ñ$ˆØ—O‘O×*Ñ*ˆ	à#'Ø!%¨dÜ/´S¼cÜŸ™¬C÷	;ò 	;ð0 ˆr0   c                 ón   — |rt        |fi |¤Žn|}|j                  «       D ]  \  }}t        | ||«       Œ y r'   )Údictry   Úsetattr)r+   ÚfÚkwÚdr€   r�   s         r/   ÚupdatezWorker.updateØ   s3   € ÙŒD�‰M�bŠM QˆØ—G‘G–I‰DˆAˆqÜ�D˜!˜QÕñ r0   c                 ó,   — t         j                  | «      S r'   )ÚR_WORKERÚformatrr   s    r/   Ú__repr__zWorker.__repr__Ý   s   € Ü�‰˜tÓ$Ð$r0   c                 ó"   — | j                   rdS dS )NÚONLINEÚOFFLINE©Úaliverr   s    r/   Ústatus_stringzWorker.status_stringà   s   € àŸ:š:ˆxÐ4¨9Ð4r0   c                 ó^   — t        | j                  d   | j                  | j                  «      S )Nrx   )r   rd   rK   rL   rr   s    r/   r   zWorker.heartbeat_expiresä   s+   € ä  §¡°Ñ!4Ø!%§¡¨D×,>Ñ,>ó@ð 	@r0   c                 óX   — t        | j                  xr  |«       | j                  k  «      S r'   )Úboolrd   r   )r+   Únowfuns     r/   r�   zWorker.aliveé   s#   € ä�D—O‘OÒI©«°4×3IÑ3IÑ(IÓJÐJr0   c                 ó$   — dj                  | «      S )Nz{0.hostname}.{0.pid})r—   rr   s    r/   Úidz	Worker.idí   s   € à%×,Ñ,¨TÓ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ñ ØÐBÑBˆ	à57ØBFØBFó2ò :òòB ò
%ð ñ5ó ð5ð ñ@ó ð@ð Øò Kó ðKð ñ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jH                  diZ%dZ&dd„Z'dddejP                  e)e*jV                  ejX                  fd	„Z-dd
„Z.d„ Z/d„ Z0d„ Z1d„ Z2d„ Z3d„ Z4e5d„ «       Z6e5d„ «       Z7e5d„ «       Z8e9d„ «       Z:e9d„ «       Z;y)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„|xs dD «       «      ‰ _        nt        «       ‰ _        ‰ j                  ‰ j
                  ‰ j                  dœ‰ _        |r‰ j                  j                  |«       y y )Nc              3   ó˜   •K  — | ]A  }|‰j                   j                  v r'‰j                   j                  j                  |«      –— ŒC y ­wr'   )Úcluster_stateÚtasksÚget)Ú.0Útask_idr+   s     €r/   Ú	<genexpr>z Task.__init__.<locals>.<genexpr>"  sD   øè ø€ ð $á-�GØ˜d×0Ñ0×6Ñ6Ñ6ð ×"Ñ"×(Ñ(×,Ñ,¨W×5Ù-ùs   ƒAA
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˜~ó$ó ˆD�Mô $›IˆDŒMà×3Ñ3Ø×+Ñ+Ø×/Ñ/ñ%
ˆÔ!ñ
 Ø�M‰M× Ñ  Õ(ð r0   c	                 ó¬  — |xs i } ||«      }	|	� || ||«       n|j                  «       }	|	|k7  rp| j                  |k7  ra ||	«       || j                  «      kD  rF| j                  j                  |	«      }
|
�<|j	                  «       D ��ci c]  \  }}||
v sŒ||“Œ }}}n|j                  |	|¬«       | j                  j                  |«       y c c}}w )N)r­   rG   )Úupperr­   Úmerge_rulesrÂ   ry   r”   rm   )r+   rz   rG   rF   rQ   Ú
precedencer�   Útask_event_to_stateÚRETRYr­   Úkeepr€   r�   s                r/   rl   z
Task.event1  s×   € ð ’˜2ˆñ $ EÓ*ˆØÐá�D˜% Õ+à—K‘K“MˆEð �EŠ>˜dŸj™j¨EÒ1Ù˜5Ó!¡J¨t¯z©zÓ$:Ò:à×#Ñ#×'Ñ'¨Ó.ˆDØÐà%+§\¡\¤^ôÙ%3™T˜Q °q¸D²y�A�q‘D ^ð ò ð �M‰M °ˆMÔ;ð 	�‰×Ñ˜VÕ$ùós   ÂCÂCc                 ób   ‡ ‡‡— ‰sg n‰Š‰€‰ j                   n‰Šˆˆˆ fd„}t         |«       «      S )z;Information about this task suitable for on-screen display.c               3   ór   •K  — t        ‰«      t        ‰«      z   D ]  } t        ‰| d «      }|€Œ| |f–— Œ y ­wr'   )ÚlistrV   )ÚkeyÚvalueÚextrarQ   r+   s     €€€r/   Ú_keyszTask.info.<locals>._keysS  s<   øè ø€ Ü˜F“|¤d¨5£kÔ1�Ü  c¨4Ó0�ØÑ$Ø˜u˜*Ó$ñ 2ùs   ƒ*7®	7)Ú_info_fieldsr�   )r+   rQ   rÖ   r×   s   ``` r/   Úinfoz	Task.infoN  s0   ú€ á‘ UˆØ&, n�×"Ò"¸&ˆö	%ô ‘E“G‹}Ðr0   c                 ó,   — t         j                  | «      S r'   )ÚR_TASKr—   rr   s    r/   r˜   zTask.__repr__[  s   € Ü�}‰}˜TÓ"Ð"r0   c           
      ó¾   — t         j                  }| j                  j                  }| j                  D �ci c]  }|  ||t
        «       || |«      «      “Œ c}S c c}w r'   )r‡   Ú__getattribute__rÉ   rÂ   r¦   r   )r+   rÂ   Úhandlerr€   s       r/   Úas_dictzTask.as_dict^  s]   € Ü×%Ñ%ˆØ×+Ñ+×/Ñ/ˆà8<¿ºó
Ù8D°1ˆAÐ ‰w�qœ%Ó ¡ T¨1£Ó.Ñ.¸ñ
ð 	
ùò 
s   µ"Ac                 óT   — | j                   D �cg c]  }|j                  ‘Œ c}S c c}w r'   )r½   r¤   )r+   rÕ   Útasks      r/   rÆ   zTask._serializable_childrene  s"   € Ø$(§M¢MÓ2¡M˜D�—“ MÑ2Ð2ùÒ2s   �%c                 ó   — | j                   S r'   )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                  | 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‰yÐr0   c                 ó^   — | j                   €| j                  S | j                   j                  S r'   )r±   r¸   r¤   rr   s    r/   ÚoriginzTask.originu  s"   € à"Ÿk™kÐ1ˆt�{‰{ÐE°t·{±{·~±~ÐEr0   c                 ó:   — | j                   t        j                  v S r'   )r­   r   ÚREADY_STATESrr   s    r/   Úreadyz
Task.readyy  s   € à�z‰zœV×0Ñ0Ð0Ð0r0   c                 ó˜   — 	 | j                   xr- | j                  j                  j                  | j                      S # t        $ r Y y w xY wr'   )r¼   rÀ   rÁ   ÚdataÚKeyErrorrr   s    r/   r»   zTask.parent}  sC   € ð	Ø—>‘>ÒS d×&8Ñ&8×&>Ñ&>×&CÑ&CÀDÇNÁNÑ&SÐSøÜò 	Ùð	úó   ‚:= ½	A	ÁA	c                 ó˜   — 	 | j                   xr- | j                  j                  j                  | j                      S # t        $ r Y y w xY wr'   )rº   rÀ   rÁ   rí   rî   rr   s    r/   r¹   z	Task.root…  sC   € ð	Ø—<‘<ÒO D×$6Ñ$6×$<Ñ$<×$AÑ$AÀ$Ç,Á,Ñ$OÐOøÜò 	Ùð	ú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   ò   sÙ  „ áð
 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ð ,5°vØ�N‰N€EØ€Eð€Gñ Ø/ˆ	ð 	�‰ð 
ð€Kð€Ló)ð& &*¸$ÀtØ×*Ñ*°GØ"5×"9Ñ"9ÀÇÁó%ó:ò#ò
ò3òòò@ð ñó ðð ñFó ðFð ñ1ó ð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%y)#r   zRecords clusters state.r   rb   Nc                 ót  — || _         |€t        |«      n|| _        |€t        |«      n|| _        |€g n|| _        || _        || _        || _        || _        t        j                  «       | _        i | _        t        «       | _        i | _        | j!                  «        t#        | j$                  t&        «      | _        | j(                  j+                  t-        |	| j                  «      «       t#        | j.                  t&        «      | _        | j0                  j+                  t-        |
| j                  «      «       y 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__—  s  € ð
 'ˆÔà"˜?ô !Ð!6Ô7Ø07ð 	Œð ˜ô Ð2Ô3Ø,1ð 	Œ
à'Ð/™°XˆŒØ%:ˆÔ"Ø#6ˆÔ Ø(ˆÔØ*ˆÔÜ—n‘nÓ&ˆŒØˆŒÜ›5ˆÔØ!#ˆÔØ×ÑÔä0Ø×Ñ¤ó*ˆÔà×Ñ×!Ñ!Ü-¨m¸T¿Z¹ZÓHô	Jô  3Ø×!Ñ!¤7ó ,ˆÔà×Ñ×#Ñ#Ü-¨o¸t¿z¹zÓJõ	Lr0   c                 ó"   — | j                  «       S r'   )Ú_create_dispatcherrr   s    r/   Ú_eventzState._event¶  s   € à×&Ñ&Ó(Ð(r0   c                 óÐ   — |j                  dd«      }| j                  5  	  ||i |¤Ž|r| j                  «        cd d d «       S # |r| j                  «        w w xY w# 1 sw Y   y xY w)NÚclear_afterF)rŠ   rÿ   Ú_clear)r+   r(   r,   r-   r  s        r/   Úfreeze_whilezState.freeze_whileº  s[   € Ø—j‘j °Ó6ˆØ�[‹[ð"Ù˜DÐ+ FÑ+áØ—K‘K”M÷ ‰[øñ Ø—K‘K•Mð ú÷	 ˆ[ús!   ŸA¡A¨AÁAÁAÁA%c                 óh   — | j                   5  | j                  |«      cd d d «       S # 1 sw Y   y xY wr'   )rÿ   Ú_clear_tasks©r+   rë   s     r/   Úclear_taskszState.clear_tasksÃ  s!   € Ø�[‹[Ø×$Ñ$ UÓ+÷ �[Š[úó   �(¨1rë   c                 óP  — |ru| j                  «       D ��ci c]$  \  }}|j                  t        j                  vr||“Œ& }}}| j                  j                  «        | j                  j                  |«       n| j                  j                  «        g | j                  d d  y c c}}w r'   )Ú	itertasksr­   r   rê   rÁ   Úclearr”   rø   )r+   rë   rª   rá   Úin_progresss        r/   r  zState._clear_tasksÇ  s�   € Ùà-1¯^©^Ô-=ôÙ-=™z˜t TØ—:‘:¤V×%8Ñ%8Ñ8ð �d‘
Ð-=ð ñ ð �J‰J×ÑÔØ�J‰J×Ñ˜kÕ*à�J‰J×ÑÔØˆ�‰‘qÑùós   –)B"c                 óv   — | j                   j                  «        | j                  |«       d| _        d| _        y r9   )r÷   r  r  Úevent_countÚ
task_countr  s     r/   r  zState._clearÓ  s/   € Ø�‰×ÑÔØ×Ñ˜%Ô ØˆÔØˆ�r0   c                 óh   — | j                   5  | j                  |«      cd d d «       S # 1 sw Y   y xY wr'   )rÿ   r  r  s     r/   r  zState.clearÙ  ó   € Ø�[‹[Ø—;‘;˜uÓ%÷ �[Š[úr  c                 óº   — 	 | j                   |   }|r|j                  |«       |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Ý  sr   € ð	 Ø—\‘\ (Ñ+ˆFÙØ—‘˜fÔ%Ø˜5�=Ð øÜò 	 Ø.9¨d¯k©kØñ/$Ø"ñ/$ð $ˆF�T—\‘\ (Ñ+à˜4�<Òð	 ús   ‚%( ¨/AÁAc                 ó�   — 	 | j                   |   dfS # t        $ r) | j                  || ¬«      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í  sT   € ð	Ø—:‘:˜dÑ# UÐ*Ð*øÜò 	Ø&*§i¡i°ÀD iÓ&IÐIˆD�4—:‘:˜dÑ#Ø˜�:Òð	ús   ‚ “/AÁAc                 óh   — | j                   5  | j                  |«      cd d d «       S # 1 sw Y   y xY wr'   )rÿ   r  )r+   rl   s     r/   rl   zState.eventõ  r   r  c           	      ób   — | j                  t        |dj                  d|g«      ¬«      «      d   S )úDeprecated, use :meth:`event`.Ú-rá   ©Útyper   ©r  r�   Újoin©r+   rz   rQ   s      r/   Ú
task_eventzState.task_eventù  s*   € à�{‰{œ4 ¨S¯X©X°v¸u°oÓ-FÔGÓHÈÑKÐKr0   c           	      ób   — | j                  t        |dj                  d|g«      ¬«      «      d   S )r(  r)  r±   r*  r   r,  r.  s      r/   Úworker_eventzState.worker_eventý  s+   € à�{‰{œ4 ¨S¯X©X°xÀÐ6GÓ-HÔIÓJÈ1Ñ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   j                  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|j                  ||
|| «       ‰#r|s|dk(  r ‰#|«       ‰$r|r ‰$|«       ‰,j                  |	d «       ||f|fS # |$ r Y y w xY w|dk(  �rû ‰(| «      \  }}	}
}}|d	k(  }	  ‰|«      d}}n# |$ r  ‰|‰%¬
«      x}‰'|<   d}Y nw xY w|r|	|_        n@	  ‰!|	«      }n# |$ r  ‰|	«      x}‰,|	<   Y nw xY w||_        |�|r|j                  d ||
«       |r|	nj                  }t        ‰&«      }|dz   ‰"kD  r ‰*d«        |||
|t        |«      «      }|r|‰&d   kD  r	 ‰)|«       n	 |‰&|«       |dk(  r‰%xj                  dz  c_	        |j                  ||
|| «       |j                  }|�8 ‰|«       |r. ‰|«      j                  |«        ‰ |	«      j                  |«       |j                  rR	 ‰%j                  |j                     }|j                  j                  |«       n# |$ r ‰%j                  |«       Y nw xY w	 ‰%j                   j                  |«      }|j                  j#                  |«       n# |$ r Y nw xY w||f|fS y )Nrw   r+  r)  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�  ø€ ð ×Ò Ñ!ÕÙÙ˜t UÔ+Ø % f¡× 7Ñ 7¸Ó <ÑˆE�1�gð8Ù% eÓ,�ñ ˜w¨Ó.°Ð7Ð7øð ò Ùðúð
 ˜Ò ð6Ù:AÀ%».Ñ7�H˜i¨ð ")¨IÑ!5�JðJÙ*4°XÓ*>À ™øØ#ò JÙ%Ù.4°XÓ.>À G™Fá9?ÀÓ9IÐI˜F W¨XÑ%6ùð	Júð
 —L‘L ¨)°^ÀUÔKÙ#©°G¸xÒ4GÙ$ VÔ,Ù$©Ù% fÔ-ØŸ™ H¨dÔ3Ø" GÐ,¨gÐ5Ð5øð#  ò Ùðúð$ ˜&“á*1°%«.ñ(��x Ø à")¨VÑ"3�ð(Ù)1°$«¸˜,‘DøØò (Ù)-¨dÀ$Ô)GÐG�D˜5 ™;Ø#'’Lð(úñ #Ø"*�D•KðFÙ!+¨HÓ!5™øØ#ò FÙ5;¸HÓ5EÐE˜ ¨Ó!2ðFúà"(�D”KØÐ)©nØŸ™ T¨>¸9ÔEá%4™¸&¿)¹)�ô ˜H›�Ø˜1‘9Ð1Ò1Ù˜1”Iñ $ E¨9°f¼cÀ$»iÓH�Ù˜W x°¡|Ò3Ù˜gÕ&á˜8 WÔ-à˜jÒ(Ø—O’O qÑ(•OØ—
‘
˜7 I¨~¸uÔEØ ŸI™I�	ØÐ(Ù˜YÔ'Ù#Ù,¨YÓ7×;Ñ;¸DÔAÙ.¨xÓ8×<Ñ<¸TÔBØ—>’>ð7Ø&*§j¡j°·±Ñ&@˜ð $×,Ñ,×0Ñ0°Õ6øð $ò ;Ø×4Ñ4°TÖ:ð;úð4Ø $× 6Ñ 6× :Ñ :¸4Ó @�Ið —M‘M×(Ñ(¨Õ3øð  ò Ùðúð
 ˜lÐ+¨WÐ4Ð4ðu !s}   »A ÁAÁAÁC* Á1
A< Á<BÂBÃ*C2Ã1C2Ä
D ÄD3Ä2D3ÅE
 Å
EÅEÉJ ÊJ*Ê)J*Ê.K% Ë%K-Ë,K-)r   Ú__getitem__rö   r   rø   r‹   rŠ   rú   Úheap_multiplierr  r6  rû   rü   rÁ   r   r÷   r   rí   r  r	  r   rî   r�   r~   )r+   r  r   r   rC  rö   rD  rE  rF  rG  rH  rI  rû   rü   r  rÁ   rJ  rK  rL  rM  r÷   s   ` @@@@@@@@@@@@@@@@@@@r/   r  zState._create_dispatcher  s<  ÿÿû€ ð —m‘m×/Ñ/ˆØ×,Ñ,ˆÜ˜Z¨Ð6FÓGˆÜ˜V Z°Ø-¨wó8ˆà—>‘>ˆØ—O‘Oˆ	Ø—‘ˆð
 "×5Ñ5¸×8LÑ8LÑLÐØ×#Ñ#×'Ñ'ˆØ&*×&7Ñ&7¸×9KÑ9KÐ#ˆ�mØ—j‘j $§)¡)ˆˆˆtØŸ,™,¨¯©ˆˆ�à&Ÿ|™|×7Ñ7¸¿¹×9OÑ9OÐˆ
�Hà#×1Ñ1×=Ñ=ÐØ!%×!5Ñ!5×!AÑ!AÐô '´Ü Ÿ-™-°÷]	5÷ ]	5÷ ]	5ð ]	5ð| ˆr0   c                 ó¾   — 	 | j                   |j                     }|j	                  |«       y # t        $ r& t        «       x}| j                   |j                  <   Y Œ@w xY wr'   )r  r¼   rî   r   r6  )r+   rá   Úchs      r/   r7  zState._add_pending_task_child|  sW   € ð	DØ×'Ñ'¨¯©Ñ7ˆBð 	�‰ˆt�øô ò 	DÜ:A»)ÐCˆB�×'Ñ'¨¯©Ó7ð	Dús   ‚- ­,AÁAc                 óü   — | j                   j                  «       D �cg c]4  } ||j                  |j                  |j                  t        |«      «      ‘Œ6 c}x}| j                  d d  |j                  «        y c c}w r'   )rÁ   Úvaluesre   rG   rè   r   rø   Úsort)r+   r   ÚtÚheaps       r/   r  zState.rebuild_taskheapƒ  si   € ð —Z‘Z×&Ñ&Ô(ó$
á(�ñ �a—g‘g˜qŸ{™{¨A¯H©H´c¸!³fÕ=Ø(ñ$
ð 	
ˆˆt�~‰~™aÐ ð 	�	‰	�ùò	$
s   �9A9Úlimitc              #   ó„   K  — t        | j                  j                  «       «      D ]  \  }}|–— |sŒ|dz   |k\  sŒ y  y ­w)Nrw   )Ú	enumeraterÁ   ry   )r+   rW  ÚindexÚrows       r/   r  zState.itertasksŠ  s<   è ø€ Ü# D§J¡J×$4Ñ$4Ó$6Ö7‰JˆE�3ØŠIÚ˜ ™ eÓ+Ùñ 8ùs   ‚0A ³A ¼A Úreversec              #   óà   K  — | j                   }|rt        |«      }t        «       }t        |d|«      D ]7  } |d   «       }|€Œ|j                  }||vsŒ!||f–— |j                  |«       Œ9 y­w)zkGenerator yielding tasks ordered by time.

        Yields:
            Tuples of ``(uuid, Task)``.
        r   é   N)rø   Úreversedr  r   rª   r6  )r+   rW  r\  Ú_heapÚseenÚevtuprá   rª   s           r/   Útasks_by_timezState.tasks_by_time�  sp   è ø€ ð —‘ˆÙÜ˜U“OˆEä‹uˆÜ˜E 1 eÖ,ˆEØ�5˜‘8“:ˆDØÑØ—y‘y�Ø˜tÒ#Ø ˜*Ò$Ø—H‘H˜T•Nñ -ùs   ‚A A.ÁA.ÁA.c                 óP   ‡— t        ˆfd„| j                  |¬«      D «       d|«      S )zÊGet 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   óJ   •K  — | ]  \  }}|j                   ‰k(  r||f–— Œ y ­wr'   )r¬   )rÃ   rª   rá   r¬   s      €r/   rÅ   z'State._tasks_by_type.<locals>.<genexpr>®  s-   øè ø€ ð #Ñ,O™j˜d DØ—	‘	˜TÒ!ð �DŒ\Ñ,Oùs   ƒ #©r\  r   ©r   rc  )r+   r¬   rW  r\  s    `  r/   r  zState._tasks_by_type¤  s1   ø€ ô ó#¨D×,>Ñ,>ÀwÐ,>Ô,Oó #àˆuó
ð 	
r0   c                 óP   ‡— t        ˆfd„| j                  |¬«      D «       d|«      S )znGet all tasks by worker.

        Slower than accessing :attr:`tasks_by_worker`, but ordered by time.
        c              3   ó^   •K  — | ]$  \  }}|j                   j                  ‰k(  r||f–— Œ& y ­wr'   )r±   rD   )rÃ   rª   rá   rD   s      €r/   rÅ   z)State._tasks_by_worker.<locals>.<genexpr>¹  s3   øè ø€ ð 2Ñ,O™j˜d DØ—‘×$Ñ$¨Ò0ð �DŒ\Ñ,Oùs   ƒ*-rf  r   rg  )r+   rD   rW  r\  s    `  r/   r  zState._tasks_by_worker³  s1   ø€ ô
 ó2¨D×,>Ñ,>ÀwÐ,>Ô,Oó 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                 óD   — d„ | j                   j                  «       D «       S )z+Return a list of (seemingly) alive workers.c              3   ó:   K  — | ]  }|j                   sŒ|–— Œ y ­wr'   rœ   )rÃ   Úws     r/   rÅ   z&State.alive_workers.<locals>.<genexpr>Ä  s   è ø€ Ð<Ñ0�a°A·G³G”Ñ0ùs   ‚”)r÷   rS  rr   s    r/   Úalive_workerszState.alive_workersÂ  s   € á<˜4Ÿ<™<×.Ñ.Ô0Ó<Ð<r0   c                 ó,   — t         j                  | «      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__É  sm   € Ø�~‰~Ø×Ñ §¡¨t¯z©z¸4Ø×&Ñ&¨×(@Ñ(@Ø×Ñ˜t×1Ñ1Ü+¨D×,>Ñ,>Ó?Ü+¨D×,@Ñ,@ÓAð 
ð 
ð 	
r0   )
NNNNiˆ  i'  NNNN)Tr'   )NT)&r3   r4   r5   r6   r   r   r  r  rO  r*   r   r  r  r  r¡   r  r  r  r"  r%  rl   r/  r1  r  r7  r   r  r   r}   r  rc  Útasks_by_timestampr  r  rl  rp  r˜   rs   r:   r0   r/   r   r   Ž  sá   „ Ù!à€FØ€DØ€KØ€JØ€Oà $Ø48ØAFØ26Ø59ó	Lð> ñ)ó ð)ò"ó,ñ
 $ó 
óñ&˜4ó &ò ò ò&òLòNòyòvð *3ó ñ˜x¨™}ó ñ#°ó #ð$ 'Ðó
ó	
ò(ò=ò$ó
r0   r   c           
      ó–   — | j                  «       D ���ci c]   \  }}||D �cg c]  }|j                  ‘Œ c}“Œ" c}}}S c c}w c c}}}w r'   )ry   r¤   )Úmappingr¬   rÁ   rU  s       r/   rt  rt  Ó  s?   € Ø;B¿=¹=¼?ÕK¹?©K¨D°%ˆD¡Ó'¡˜A�1—4“4 Ñ'Ñ'¸?ÓKÐKùÒ'ùÔKs   •A¢?µA¿Ac           	      óˆ   ‡— | xs i } | j                  «       D ��ci c]  \  }}|t        ˆfd„|D «       «      “Œ c}}S c c}}w )Nc              3   ó2   •K  — | ]  }|‰v sŒ‰|   –— Œ y ­wr'   r:   )rÃ   ÚirÁ   s     €r/   rÅ   z4_deserialize_Task_WeakSet_Mapping.<locals>.<genexpr>Ù  s   øè ø€ Ð>©C q°1¸²:˜% �(©Cùs   ƒ	�
)ry   r   )rw  rÁ   r¬   Úidss    `  r/   r  r  ×  sK   ø€ ØŠm˜€Gà$Ÿ]™]œ_ô.Ù,‘	��cð ”'Ó>©CÓ>Ó>Ñ>Ø,ò.ð .ùó .s   ›>)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   rr  r–   rÛ   rñ   rò   ÚSTARTEDÚFAILURErÏ   ÚSUCCESSÚREVOKEDÚREJECTEDró   r%   ÚregisterrH   rM   rN   r   rR   r`   r   r   r   rt  r  r:   r0   r/   Ú<module>r“     s‹  ðñó Û 
Û Ý #Ý $Ý Ý Ý Ý Ý ß $ß  å "Ý /å ß <Ñ <Ý 'à
:€ñ ˆsÐ'Ó(€ð
 Ð ð Ð ð'ð ñ
 
�HÓ	€Ø‡~�~€à
@€ØF€Ø	?€ð �N‰NØ—‘Ø�~‰~Ø�n‰nØ�|‰|Ø—‘Ø�~‰~Ø—‘ñ	Ð ô)˜+ô )ð0 €× Ñ Ð%Ô &ñ 	�Ñ/Ô0ñ,ó 1ð,ð ')Ø$;Ø%¨U¸zó	6òòñ$ �:Ó÷Z3ð Z3ó ðZ3ñz �6Ó÷Xð Xó ðX÷vB
ñ B
òJ
Ló.r0   