a
    xd                     @   s   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 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                       s   e Zd ZdZeZeZdZdZedZ	e
r4 fddZd,ddZd	d
 Ze ZZdd Zdd Zdd Zdd Zd-ddZdd Zdd Zdd Zdd Zd.ddZd d! Zd"d# Zd$d% Zd&d' Zd(d) ZeZe d*d+ Z!  Z"S )/r   z^Timer thread.

    Note:
        This is only used for transports not supporting AsyncIO.
    FN   c                    s.   dd l }td |  t j|i | d S )Nr   z- Timer starting)	tracebackprintprint_stacksuperstart)selfargskwargsr   	__class__ K/var/www/html/Ranjet/env/lib/python3.9/site-packages/celery/utils/timer2.pyr   '   s    zTimer.startc                 K   sz   |p| j ||d| _|| _|p"| j| _tj|  t | _t | _	t
 | _t| j| _d| _dt| j | _d S )N)on_errormax_intervalTzTimer-)r
   scheduleon_starton_tick	threadingThread__init__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   r   r   r   -   s    



zTimer.__init__c                 C   sn   | j L t| j\}}|d u rD|d u r2| j d |W  d    S W d    n1 sX0    Y  | j|S )Ng      ?)r&   r(   	schedulerwaitr   Zapply_entry)r   delayentryr   r   r   _next_entry?   s    0zTimer._next_entryc              
   C   s   zrd| _ t| j| _| j sN|  }|r| jr:| | td u rDqNt| qz| j	
  W n tyn   Y n0 W nH ty } z0tjd|dd tj  td W Y d }~n
d }~0 0 d S )NTzThread Timer crashed: %r)exc_infor   )runningiterr   r+   r!   is_setr/   r   r   r"   set	TypeError	Exceptionr   errorsysstderrflushos_exit)r   r-   excr   r   r   runI   s&    




z	Timer.runc                 C   s.   | j   | jr*| j  | t d| _d S )NF)r!   r4   r1   r"   r,   joinTHREAD_TIMEOUT_MAXr   r   r   r   stopa   s
    


z
Timer.stopc                 C   s*   | j s&|  s&| jr| |  |   d S N)r1   is_aliver   r   rA   r   r   r   ensure_startedh   s    
zTimer.ensure_startedc                 O   sV   |    | j4 t| j||i |}| j  |W  d    S 1 sH0    Y  d S rC   )rE   r$   getattrr   r&   notify)r   methr   r   r.   r   r   r   	_do_entern   s
    
zTimer._do_enterc                 C   s   | j d|||dS )NZenter_at)priorityrI   )r   r.   etarJ   r   r   r   enteru   s    zTimer.enterc                 O   s   | j dg|R i |S )Ncall_atrK   r   r   r   r   r   r   rN   x   s    zTimer.call_atc                 O   s   | j dg|R i |S )Nenter_afterrK   rO   r   r   r   rP   {   s    zTimer.enter_afterc                 O   s   | j dg|R i |S )N
call_afterrK   rO   r   r   r   rQ   ~   s    zTimer.call_afterc                 O   s   | j dg|R i |S )Ncall_repeatedlyrK   rO   r   r   r   rR      s    zTimer.call_repeatedly
   c                 C   s   |  |tj| d S rC   )rQ   r8   exit)r   ZsecsrJ   r   r   r   
exit_after   s    zTimer.exit_afterc                 C   s   |   d S rC   )cancel)r   Ztrefr   r   r   rV      s    zTimer.cancelc                 C   s   | j   d S rC   )r   clearrA   r   r   r   rW      s    zTimer.clearc                 C   s
   t |  S rC   )lenrA   r   r   r   empty   s    zTimer.emptyc                 C   s
   t | jS rC   )rX   r   rA   r   r   r   __len__   s    zTimer.__len__c                 C   s   dS )z``bool(timer)``.Tr   rA   r   r   r   __bool__   s    zTimer.__bool__c                 C   s   | j jS rC   )r   queuerA   r   r   r   r\      s    zTimer.queue)NNNNN)N)rS   )#__name__
__module____qualname____doc__r   r
   r1   r   r   r)   r	   r   r   r/   __next__r(   r>   rB   rE   rI   rM   rN   rP   rQ   rR   rU   rV   rW   rY   rZ   r[   __nonzero__propertyr\   __classcell__r   r   r   r   r      s>     


r   )r`   r;   r8   r   	itertoolsr   r   r@   timer   Zkombu.asynchronous.timerr   r   r
   r   r   environgetr	   __all__r   r   r   r   r   <module>   s   