
    `f                         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mZ ej                            d	          Zd
Z G d dej                  ZdS )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)Entry)Timer)loggerto_timestampTIMER_DEBUG)r   Scheduler   r	   c                        e Zd ZdZeZeZdZdZ ed          Z	e
r fdZ	 	 d fd	Zd ZexZZd Zd	 Zd
 Zd ZddZd Zd Zd Zd ZddZd Zd Zd Zd Zd ZeZe d             Z! xZ"S )r   z^Timer thread.

    Note:
        This is only used for transports not supporting AsyncIO.
    FN   c                     dd l }t          d           |                                  t                      j        |i | d S )Nr   z- Timer starting)	tracebackprintprint_stacksuperstart)selfargskwargsr   	__class__s       E/var/www/html/env/lib/python3.11/site-packages/celery/utils/timer2.pyr   zTimer.start'   sQ    $%%%!!###EGGM4*6*****    c                    |p|                      ||          | _        || _        |p| j        | _        t	                                                       t          j                    | _        t          j                    | _	        t          j
                    | _        t          j        | j                  | _        d| _        dt          | j                   | _        d S )N)on_errormax_intervalTzTimer-)r   scheduleon_starton_tickr   __init__	threadingEvent_Timer__is_shutdown_Timer__is_stoppedLockmutex	Condition	not_emptydaemonnext_timer_countname)r   r   r   r   r   r   r   r   s          r   r    zTimer.__init__-   s      MDMM8?K %2 %M %M .$,
 '_..%O--^%%
",TZ886T$"34466			r   c                     | j         5  t          | j                  \  }}|*|| j                             d           |cd d d            S 	 d d d            n# 1 swxY w Y   | j                            |          S )Ng      ?)r(   r*   	schedulerwaitr   apply_entry)r   delayentrys      r   _next_entryzTimer._next_entry?   s    ^ 	 	//LE5}=N'',,,	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 }((///s   7AA Ac                 V   	 d| _         t          | j                  | _        | j                                        sb|                                 }|r3| j        r|                     |           t          n(t          |           | j                                        b	 | j	        
                                 d S # t          $ r Y d S w xY w# t          $ rT}t          j        d|d           t          j                                         t%          j        d           Y d }~d S d }~ww xY w)NTzThread Timer crashed: %r)exc_infor   )runningiterr   r.   r#   is_setr3   r   r   r$   set	TypeError	Exceptionr   errorsysstderrflushos_exit)r   r1   excs      r   runz	Timer.runI   sA   	DL!$-00DN(//11 !((** !| ,U+++}%LLL (//11 !!%%'''''      	 	 	L3S4HHHHJHQKKKKKKKKK	s7   BC
 B9 9
CC
 CC
 

D(A	D##D(c                     | j                                          | j        r<| j                                         |                     t                     d| _        d S d S )NF)r#   r9   r6   r$   r/   joinTHREAD_TIMEOUT_MAXr   s    r   stopz
Timer.stopa   s^       < 	!""$$$II())) DLLL	! 	!r   c                     | j         sF|                                 s4| j        r|                     |            |                                  d S d S d S N)r6   is_aliver   r   rG   s    r   ensure_startedzTimer.ensure_startedh   s\    | 	DMMOO 	} $d###JJLLLLL	 	 	 	r   c                     |                                   | j        5   t          | j        |          |i |}| j                                         |cd d d            S # 1 swxY w Y   d S rJ   )rL   r&   getattrr   r(   notify)r   methr   r   r2   s        r   	_do_enterzTimer._do_entern   s    Z 	 	0GDM400$A&AAEN!!###	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   6AA#&A#c                 4    |                      d|||          S )Nenter_at)priorityrQ   )r   r2   etarT   s       r   enterzTimer.enteru   s    ~~j%x~HHHr   c                 $     | j         dg|R i |S )Ncall_atrU   r   r   r   s      r   rY   zTimer.call_atx   s$    t~i9$999&999r   c                 $     | j         dg|R i |S )Nenter_afterrU   rZ   s      r   r\   zTimer.enter_after{   s$    t~m=d===f===r   c                 $     | j         dg|R i |S )N
call_afterrU   rZ   s      r   r^   zTimer.call_after~   s$    t~l<T<<<V<<<r   c                 $     | j         dg|R i |S )Ncall_repeatedlyrU   rZ   s      r   r`   zTimer.call_repeatedly   s%    t~/A$AAA&AAAr   
   c                 H    |                      |t          j        |           d S rJ   )r^   r=   exit)r   secsrT   s      r   
exit_afterzTimer.exit_after   s     ch11111r   c                 .    |                                  d S rJ   )cancel)r   trefs     r   rg   zTimer.cancel   s    r   c                 8    | j                                          d S rJ   )r   clearrG   s    r   rj   zTimer.clear   s    r   c                 "    t          |            S rJ   )lenrG   s    r   emptyzTimer.empty   s    t99}r   c                 *    t          | j                  S rJ   )rl   r   rG   s    r   __len__zTimer.__len__   s    4=!!!r   c                     dS )z``bool(timer)``.T rG   s    r   __bool__zTimer.__bool__   s    tr   c                     | j         j        S rJ   )r   queuerG   s    r   rt   zTimer.queue   s    }""r   )NNNNNrJ   )ra   )#__name__
__module____qualname____doc__r   r   r6   r   r   r+   r
   r   r    r3   __next__r*   rC   rH   rL   rQ   rW   rY   r\   r^   r`   re   rg   rj   rm   ro   rr   __nonzero__propertyrt   __classcell__)r   s   @r   r   r      s         EHGG588L +	+ 	+ 	+ 	+ 	+ >B-17 7 7 7 7 7$0 0 0 "!Ht  0! ! !    I I I I: : :> > >= = =B B B2 2 2 2      " " "   K# # X# # # # #r   r   )rx   r@   r=   r!   	itertoolsr   r   rF   timer   kombu.asynchronous.timerr   r   r   r   r	   environgetr
   __all__Threadrq   r   r   <module>r      s     
			 



           7 7 7 7 7 7       * * * * * * 6 6 6 6 6 6 9 9 9 9 9 9 9 9jnn]++
8C# C# C# C# C#I C# C# C# C# C#r   