o
    wvXjÇ  ã                	   @   sª   d Z ddlmZm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.é    )Úabsolute_importÚunicode_literals)Útimer)Ú	monotonicé   )Ú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
   úV/var/www/html/myproject/venv/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                    sR   ddl m‰ m} G ‡ fdd„dˆ ƒ}|| _|| _t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Úsuperr   Ú__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(   r1   r2   r0   r   ÚsecsÚgr
   r
   r   Ú_enter0   s   zTimer._enterc              	   C   s*   z|  ¡  W | j |¡ d S | j |¡ w ©N)r   r'   Údiscard)r(   r5   r
   r
   r   r/   ;   s   
zTimer._entry_exitc                 C   s:   | j }|rz| ¡  ¡  W n	 ty   Y nw |sd S d S r7   )r'   Úpopr   ÚKeyError)r(   Úqueuer
   r
   r   ÚclearA   s   ÿýzTimer.clearc                 C   s   | j S r7   )r'   ©r(   r
   r
   r   r;   I   s   zTimer.queue)
r   r   r   r%   r6   r/   r<   Úpropertyr;   Ú__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                    sJ   ddl m} ddlm} || _|| _| d¡| _tt| ƒj	|i |¤Ž d S )Nr   )Ú	spawn_raw)ÚPoolr   )
r"   r@   Úgevent.poolrA   Úspawn_nÚgetr   r$   r	   r%   )r(   r   r   r@   rA   r)   r
   r   r%   Y   s   zTaskPool.__init__c                 C   s   |   | j¡| _| jj| _d S r7   )rA   ÚlimitÚ_poolÚspawnÚ
_quick_putr=   r
   r
   r   Úon_starta   s   zTaskPool.on_startc                 C   s   | j d ur| j  ¡  d S d S r7   )rF   Újoinr=   r
   r
   r   Úon_stope   s   
ÿzTaskPool.on_stopc	           
   
   K   s4   |d u r| j n|}| j|rtn||||||||d�S )N)r   r   )r   rH   r   )
r(   r   r   r   r   r   r   r   r   Ú_r
   r
   r   Úon_applyi   s   
ýzTaskPool.on_applyr   c                 C   s&   | j j j|7  _| j  j|7  _d S r7   ©rF   Ú
_semaphoreÚcounterÚsize©r(   Únr
   r
   r   Úgrowr   ó   zTaskPool.growc                 C   s&   | j j j|8  _| j  j|8  _d S r7   rN   rR   r
   r
   r   Úshrinkv   rU   zTaskPool.shrinkc                 C   s
   t | jƒS r7   )ÚlenrF   r=   r
   r
   r   Únum_processesz   s   
zTaskPool.num_processes)r   )r   r   r   Ú__doc__r   Úsignal_safeÚis_greenÚtask_join_will_blockrF   rH   r%   rI   rK   r   r   rM   rT   rV   r>   rX   r?   r
   r
   r)   r   r	   N   s&    
þ
	
r	   )rY   Ú
__future__r   r   Úkombu.asynchronousr   Ú_timerÚ
kombu.fiver   Ú r   r"   r   ÚImportErrorÚ__all__r   r   r   ÚBasePoolr	   r
   r
   r
   r   Ú<module>   s$   ÿ
ý+