o
    ›¨Êh;  ã                	   @   sš   d Z ddlmZ ddlmZ ddlmZ zddlm	Z	 W n e
y'   dZ	Y nw dZd	dddddde	ejf	d
d„ZG dd„ dejƒZG dd„ dejƒZdS )zGevent execution pool.é    )Ú	monotonic)Útimeré   )Úbase)ÚTimeoutN)ÚTaskPool© c
                 K   sz   |si n|}z(||ƒ� |	| |||||fd|fi|
¤ŽW  d   ƒ W S 1 s'w   Y  W d S  |y<   |d|ƒ Y S w )NÚ	propagateFr   )ÚtargetÚargsÚkwargsÚcallbackÚaccept_callbackÚpidÚtimeoutÚtimeout_callbackr   Úapply_targetÚrestr   r   úK/var/www/html/env/lib/python3.10/site-packages/celery/concurrency/gevent.pyÚapply_timeout   s   

ÿþþ(ÿÿr   c                       s@   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Zed	d
„ ƒZ‡  Z	S )ÚTimerc                    sN   ddl m‰ m} G ‡ fdd„dˆ ƒ}|| _|| _tƒ j|i |¤Ž tƒ | _d S )Nr   )ÚGreenletÚGreenletExitc                       s   e Zd Z” jZdS )z!Timer.__init__.<locals>._GreenletN)Ú__name__Ú
__module__Ú__qualname__ÚkillÚcancelr   ©r   r   r   Ú	_Greenlet&   s    
r   )	Úgeventr   r   r   Ú_GreenletExitÚsuperÚ__init__ÚsetÚ_queue)Úselfr   r   r   r   ©Ú	__class__r   r   r#   #   s   zTimer.__init__c                 K   sR   t |tƒ  dƒ}| j ||¡}| j |¡ | | j¡ ||_||_	||_
d|_|S )Nr   F)Úmaxr   r   Úspawn_laterr%   ÚaddÚlinkÚ_entry_exitÚentryÚetaÚpriorityÚcanceled)r&   r/   r0   r.   r   ÚsecsÚgr   r   r   Ú_enter.   s   zTimer._enterc              	   C   s*   z|  ¡  W | j |¡ d S | j |¡ w ©N)r   r%   Údiscard)r&   r3   r   r   r   r-   9   s   
zTimer._entry_exitc                 C   s:   | j }|rz| ¡  ¡  W n	 ty   Y nw |sd S d S r5   )r%   Úpopr   ÚKeyError)r&   Úqueuer   r   r   Úclear?   s   ÿýzTimer.clearc                 C   s   | j S r5   )r%   ©r&   r   r   r   r9   G   s   zTimer.queue)
r   r   r   r#   r4   r-   r:   Úpropertyr9   Ú__classcell__r   r   r'   r   r   !   s    r   c                       s‚   e Zd ZdZeZdZdZdZdZdZ	‡ fdd„Z
dd„ Zd	d
„ Zddddddejfdd„Zddd„Zddd„Zedd„ ƒZ‡  ZS )r   zGEvent Pool.FTNc                    sF   ddl m} ddlm} || _|| _| d¡| _tƒ j|i |¤Ž d S )Nr   )Ú	spawn_raw)ÚPoolr   )	r    r>   Úgevent.poolr?   Úspawn_nÚgetr   r"   r#   )r&   r   r   r>   r?   r'   r   r   r#   W   s   zTaskPool.__init__c                 C   s   |   | j¡| _| jj| _d S r5   )r?   ÚlimitÚ_poolÚspawnÚ
_quick_putr;   r   r   r   Úon_start_   s   zTaskPool.on_startc                 C   s   | j d ur| j  ¡  d S d S r5   )rD   Újoinr;   r   r   r   Úon_stopc   s   
ÿzTaskPool.on_stopc	           
   
   K   s4   |d u r| j n|}| j|rtn||||||||d�S )N)r   r   )r   rF   r   )
r&   r
   r   r   r   r   r   r   r   Ú_r   r   r   Úon_applyg   s   
ýzTaskPool.on_applyr   c                 C   s&   | j j j|7  _| j  j|7  _d S r5   ©rD   Ú
_semaphoreÚcounterÚsize©r&   Únr   r   r   Úgrowp   ó   zTaskPool.growc                 C   s&   | j j j|8  _| j  j|8  _d S r5   rL   rP   r   r   r   Úshrinkt   rS   zTaskPool.shrinkc                 C   s
   t | jƒS r5   )ÚlenrD   r;   r   r   r   Únum_processesx   s   
zTaskPool.num_processes)r   )r   r   r   Ú__doc__r   Úsignal_safeÚis_greenÚtask_join_will_blockrD   rF   r#   rG   rI   r   r   rK   rR   rT   r<   rV   r=   r   r   r'   r   r   L   s&    
þ
	
r   )rW   Útimer   Úkombu.asynchronousr   Ú_timerÚ r   r    r   ÚImportErrorÚ__all__r   r   r   ÚBasePoolr   r   r   r   r   Ú<module>   s"    ÿ
ý+