
    h                         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mZmZmZmZ ddlmZ ddlmZ dd	lmZmZ ej,                  j/                  d
      ZdZ G d dej4                        Zy)zScheduler for Python functions.

.. note::
    This is used for the thread-based worker only,
    not for amqp/redis/sqs/qpid where :mod:`kombu.asynchronous.timer` is used.
    N)count)TIMEOUT_MAX)sleep)AnyCallableIteratorOptionalTuple)Entry)Timer)loggerto_timestampTIMER_DEBUG)r   Scheduler   r   c                   "    e Zd ZU dZeZeZdZeed<   dZ	e
eegdf      ed<    ed      Zeed<   erded	ed
df fdZ	 	 	 	 	 d(de
e   de
eegdf      de
eegdf      de
ed gdf      de
e   d	ed
df fdZd
e
e   fdZexZZd)dZd)dZd)dZdeded	ed
efdZd*dedede
e   d
efdZded	ed
efdZded	ed
efdZded	ed
efdZ ded	ed
efdZ!d+deded
dfd Z"d!ed
dfd"Z#d)d#Z$d
efd$Z%d
efd%Z&d
efd&Z'e'Z(e)d
e*fd'       Z+ xZ,S ),r   z^Timer thread.

    Note:
        This is only used for transports not supporting AsyncIO.
    FrunningNon_tick   _timer_countargskwargsreturnc                 b    dd l }t        d       |j                          t        |   |i | y )Nr   z- Timer starting)	tracebackprintprint_stacksuperstart)selfr   r   r   	__class__s       O/var/www/Befach/backend/env/lib/python3.12/site-packages/celery/utils/timer2.pyr   zTimer.start(   s,    $%!!#GM4*6*    scheduleon_erroron_startmax_intervalc                    |xs | j                  ||      | _        || _        |xs | j                  | _        t        |           t        j                         | _        t        j                         | _	        t        j                         | _        t        j                  | j                        | _        d| _        dt        | j                          | _        y )N)r$   r&   TzTimer-)r   r#   r%   r   r   __init__	threadingEvent_Timer__is_shutdown_Timer__is_stoppedLockmutex	Condition	not_emptydaemonnextr   name)r   r#   r$   r   r%   r&   r   r    s          r!   r(   zTimer.__init__.   s    
 ! MDMM8?K %2 %M .$,,
 '__.%OO-^^%
",,TZZ8T$"3"3456	r"   c                     | j                   5  t        | j                        \  }}|(|| j                   j                  d       |cd d d        S 	 d d d        | j                  j                        S # 1 sw Y   $xY w)Ng      ?)r0   r2   	schedulerwaitr#   apply_entry)r   delayentrys      r!   _next_entryzTimer._next_entryC   sw    ^^ 	  /LE5}=NN'',	 	 		 }}((//	 	s   9A44A=c                 J   	 d| _         t        | j                        | _        | j                  j                         s\| j                         }|r/| j                  r| j                  |       t        n&t        |       | j                  j                         s\	 | j                  j                          y # t        $ r Y y w xY w# t        $ rU}t        j                  d|d       t        j                   j#                          t%        j&                  d       Y d }~y d }~ww xY w)NTzThread Timer crashed: %r)exc_infor   )r   iterr#   r5   r+   is_setr:   r   r   r,   set	TypeError	Exceptionr   errorsysstderrflushos_exit)r   r8   excs      r!   runz	Timer.runO   s    	DLPTUYUbUbPcDN((//1((*||U+}%L ((//1!!%%'    	LL3S4HJJHHQKK	s7   BC B5 5	C>C  CC 	D"ADD"c                     | j                   j                          | j                  r7| j                  j	                          | j                  t               d| _        y y )NF)r+   r?   r   r,   r6   joinTHREAD_TIMEOUT_MAXr   s    r!   stopz
Timer.stopg   sF     <<""$II() DL r"   c                     | j                   s?| j                         s.| j                  r| j                  |        | j                          y y y N)r   is_aliver%   r   rM   s    r!   ensure_startedzTimer.ensure_startedn   s4    ||DMMO}}d#JJL %4|r"   methc                     | j                          | j                  5   t        | j                  |      |i |}| j                  j                          |cd d d        S # 1 sw Y   y xY wrP   )rR   r.   getattrr#   r0   notify)r   rS   r   r   r9   s        r!   	_do_enterzTimer._do_entert   sY    ZZ 	0GDMM40$A&AENN!!#	 	 	s   8AA(r9   etapriorityc                 ,    | j                  d|||      S )Nenter_at)rY   rW   )r   r9   rX   rY   s       r!   enterzTimer.enter{   s    ~~j%x~HHr"   c                 .     | j                   dg|i |S )Ncall_atr\   r   r   r   s      r!   r_   zTimer.call_at~   s    t~~i9$9&99r"   c                 .     | j                   dg|i |S )Nenter_afterr\   r`   s      r!   rb   zTimer.enter_after   s    t~~m=d=f==r"   c                 .     | j                   dg|i |S )N
call_afterr\   r`   s      r!   rd   zTimer.call_after   s    t~~l<T<V<<r"   c                 .     | j                   dg|i |S )Ncall_repeatedlyr\   r`   s      r!   rf   zTimer.call_repeatedly   s    t~~/A$A&AAr"   secsc                 F    | j                  |t        j                  |       y rP   )rd   rC   exit)r   rg   rY   s      r!   
exit_afterzTimer.exit_after   s    chh1r"   trefc                 $    |j                          y rP   )cancel)r   rk   s     r!   rm   zTimer.cancel   s    r"   c                 8    | j                   j                          y rP   )r#   clearrM   s    r!   ro   zTimer.clear   s    r"   c                     t        |        S rP   )lenrM   s    r!   emptyzTimer.empty   s    t9}r"   c                 ,    t        | j                        S rP   )rq   r#   rM   s    r!   __len__zTimer.__len__   s    4==!!r"   c                      y)z``bool(timer)``.T rM   s    r!   __bool__zTimer.__bool__   s    r"   c                 .    | j                   j                  S rP   )r#   queuerM   s    r!   ry   zTimer.queue   s    }}"""r"   )NNNNN)r   NrP   )
   )-__name__
__module____qualname____doc__r   r   r   bool__annotations__r   r	   r   floatr   r   r   r   r   rA   r(   r:   __next__r2   rI   rN   rR   strrW   intr]   r_   rb   rd   rf   rj   rm   ro   rr   rt   rw   __nonzero__propertylistry   __classcell__)r    s   @r!   r   r      sO    EHGT15GXhw}-.5(L%"	+s 	+c 	+d 	+ 7;CG>BAE15	7(!3 7#Hi[$->$?@7"8UGTM#:;7 $HgY_$=>7  (	7 BE	7 JN	7*	0Xe_ 	0 "!Ht0!c #   I5 Iu I IQV I:S :C :E :> > > >= =s =u =BS BC BE B2u 2 2T 25 T t " "$  K#t # #r"   r   )r~   rF   rC   r)   	itertoolsr   r   rL   timer   typingr   r   r   r	   r
   kombu.asynchronous.timerr   r   r   r   r   environgetr   __all__Threadrv   r"   r!   <module>r      sX    
 
   7  ; ; * 6 9jjnn]+
8H#I H#r"   