
    hY              	           d 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Z	 	 dd
Zd	ddddddee	j                  f	dZ G d dej                         Z G d de	j"                        Zd Zy# e$ r dZY Vw xY w)zGevent execution pool.    N)	monotonic)timer   )base)Timeout)TaskPool c                 P    |si n|}t        j                  | ||||fd |       i|S )Npid)r   apply_target)targetargskwargscallbackaccept_callbackgetpid_s          U/var/www/Befach/backend/env/lib/python3.12/site-packages/celery/concurrency/gevent.pyr   r      s:    R6FVT68_ 0!'0-.0 0    c
           
          |si n|}	  ||      5   |	| |||| |       fd|fi|
cd d d        S # 1 sw Y   y xY w# |$ r  |d|      cY S w xY w)N	propagateFr	   )r   r   r   r   r   r   timeouttimeout_callbackr   r   rests              r   apply_timeoutr      su     R6F0W 	>fh />+2*>8<>	> 	> 	>  0w//0s#   < 0	< 9< < AAc                   @     e Zd Z fdZd Zd Zd Zed        Z xZ	S )Timerc                     ddl mm}  G fdd      }|| _        || _        t        |   |i | t               | _        y )Nr   )GreenletGreenletExitc                   (    e Zd ZW  j                  Zy)!Timer.__init__.<locals>._GreenletN)__name__
__module____qualname__killcancel)r   s   r   	_Greenletr"   /   s    ]]Fr   r(   )	geventr   r    r(   _GreenletExitsuper__init__set_queue)selfr   r   r    r(   r   	__class__s        @r   r,   zTimer.__init__,   s>    1	# 	# #)$)&)er   c                    t        |t               z
  d      }| j                  j                  ||      }| j                  j                  |       |j                  | j                         ||_        ||_	        ||_
        d|_        |S )Nr   F)maxr   r(   spawn_laterr.   addlink_entry_exitentryetaprioritycanceled)r/   r8   r9   r7   r   secsgs          r   _enterzTimer._enter7   sn    3$a(NN&&tU3	t 

r   c                     	 |j                          | j                  j                  |       y # | j                  j                  |       w xY wN)r&   r.   discard)r/   r<   s     r   r6   zTimer._entry_exitB   s5    	#FFHKK"DKK"s	   . Ac                     | j                   }|r#	 |j                         j                          |r"y y # t        $ r Y w xY wr?   )r.   popr&   KeyError)r/   queues     r   clearzTimer.clearH   s>    		  "   s   3 	??c                     | j                   S r?   )r.   r/   s    r   rD   zTimer.queueP   s    {{r   )
r#   r$   r%   r,   r=   r6   rE   propertyrD   __classcell__r0   s   @r   r   r   *   s+    		#  r   r   c                        e Zd ZdZeZdZdZdZdZdZ	dZ
 fdZd Zd ZddddddefdZdd	Zdd
ZddZed        Zed        Zd Zed        Z xZS )r   zGEvent Pool.FTNc                     ddl mm} ddlm} || _        | _        fd| _        || _        |j                  d      | _        t        | (  |i | y )Nr   )
getcurrent	spawn_raw)Poolc                  $    t                       S r?   )id)rM   s   r   <lambda>z#TaskPool.__init__.<locals>.<lambda>f   s    b.r   r   )r)   rM   rN   gevent.poolrO   r   spawn_ngetr   r+   r,   )r/   r   r   rN   rO   rM   r0   s        @r   r,   zTaskPool.__init__a   sG    0$	$. zz),$)&)r   c                     | j                  | j                        | _        i | _        | j                  j                  | _        y r?   )rO   limit_pool	_pool_mapspawn
_quick_putrG   s    r   on_startzTaskPool.on_startk   s.    YYtzz*
****r   c                 R    | j                   | j                   j                          y y r?   )rX   joinrG   s    r   on_stopzTaskPool.on_stopp   s    ::!JJOO "r   c	                    || j                   n|}| j                  |      }| j                  |rt        n||||||| j                  ||	      }
| j                  t        |
      |
       t        j                  t        |
      |
_
        |
S )N)r   r   )r   _make_killable_targetr[   r   r   _add_to_pool_maprQ   types
MethodType
_terminate	terminate)r/   r   r   r   r   r   r   r   r   r   greenlets              r   on_applyzTaskPool.on_applyt   s     #*/$,,w++F3??G=#)4?#';;Rb # d 	blH5"--j(Cr   c                     | j                   j                  xj                  |z  c_        | j                   xj                  |z  c_        y r?   rX   
_semaphorecountersizer/   ns     r   growzTaskPool.grow   /    

%%*%

1r   c                     | j                   j                  xj                  |z  c_        | j                   xj                  |z  c_        y r?   rj   rn   s     r   shrinkzTaskPool.shrink   rq   r   c                 j    dd l }|| j                  v r!| j                  |   }|j                  |       y y )Nr   )r)   rY   r&   )r/   r   signalr)   rg   s        r   terminate_jobzTaskPool.terminate_job   s0    $.. ~~c*HKK! !r   c                 ,    t        | j                        S r?   )lenrX   rG   s    r   num_processeszTaskPool.num_processes   s    4::r   c                       fd}|S )Nc                  8    ddl m} 	  | i |S # |$ r Y yw xY w)Nr   )r    )FNN)rg   r    )r   r   r    r   s      r   killable_targetz7TaskPool._make_killable_target.<locals>.killable_target   s-    -+t.v.. +*+s    r	   )r   r|   s   ` r   ra   zTaskPool._make_killable_target   s    	+ r   c                     || j                   |<   |j                  t        j                  | j                  || j                                y )N)r   pool_map)rY   r5   	functoolspartial_cleanup_after_job_finish)r/   r   rg   s      r   rb   zTaskPool._add_to_pool_map   s;    &sd<<#PTP^P^_	
r   c                 
    ||= y r?   r	   )rg   r~   r   s      r   r   z"TaskPool._cleanup_after_job_finish   s	    SMr   )r   r?   )r#   r$   r%   __doc__r   signal_safeis_greentask_join_will_blockrX   rY   r[   r,   r\   r_   r   rh   rp   rs   rv   rH   ry   staticmethodra   rb   r   rI   rJ   s   @r   r   r   U   s    EKH EIJ*+
 %)!%t"&\
"    
  r   r   c                      y r?   r	   )r/   ru   s     r   re   re      s    r   )r	   NNNN)r   r   rc   timer   kombu.asynchronousr   _timer r   r)   r   ImportError__all__r   r   r   BasePoolr   re   r	   r   r   <module>r      s        .   9=.20  "$"&tT#'#000(FLL (VQt}} Qh	{  Gs   A1 1A;:A;