
    h                     J   d 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	Zd
ZdZd ej                   D        D ]3  ZdD ],  Z eeed      sddlZ ej*                   eeez               . 5 	 	 ddZ G d dej0                        Z G d dej2                        Zy)zEventlet execution pool.    N)	monotonicGreenletExit)timer)signals   )base)TaskPoolz6Celery module with %s imported before eventlet patched)z	billiard.zcelery.zkombu.c              #   L   K   | ]  }|j                  t              s|  y wN)
startswith	RACE_MODS).0mods     W/var/www/Befach/backend/env/lib/python3.12/site-packages/celery/concurrency/eventlet.py	<genexpr>r      s     DC#..*CCDs   $$)thread	threadingsocketc           	      N    |si n|}t        j                  | |||| |             S )N)pid)r	   apply_target)targetargskwargscallbackaccept_callbackgetpids         r   r   r      s-    R6FVT68_!'+ +    c                   J     e Zd ZdZ fdZd Zd Zd Zd Ze	d        Z
 xZS )TimerzEventlet Timer.c                 v    ddl m} ddlm} t	        |   |i | || _        || _        t               | _        y )Nr   )spawn_afterr   )	eventlet.greenthreadr#   greenletr   super__init___spawn_afterset_queue)selfr   r   r#   r   	__class__s        r   r'   zTimer.__init__'   s4    4)$)&)('er   c                     t        |t               z
  d      }| j                  ||      }| j                  j	                  |       |j                  | j                  |       ||_        ||_        ||_	        d|_
        |S )Nr   F)maxr   r(   r*   addlink_entry_exitentryetaprioritycanceled)r+   r3   r4   r2   r   secsgs          r   _enterzTimer._enter0   sl    3$a(dE*	t'

r   c                     	 	 |j                          | j                  j                  |       y # | j                  $ r |j                          d|_        Y Dw xY w# | j                  j                  |       w xY w)NT)waitr   cancelr5   r*   discard)r+   r7   r2   s      r   r1   zTimer._entry_exit;   se    	#"
 KK"	 $$ "!
" KK"s!   / &AA AA A8c                     | j                   }|r#	 |j                         j                          |r"y y # t        | j                  f$ r Y w xY wr   )r*   popr;   KeyErrorr   )r+   queues     r   clearzTimer.clearE   sI    		""$  d//0 s   3 A
Ac                 P    	 |j                          y # | j                  $ r Y y w xY wr   )r;   r   )r+   trefs     r   r;   zTimer.cancelM   s(    	KKM   		s    %%c                     | j                   S r   )r*   r+   s    r   r@   zTimer.queueS   s    {{r   )__name__
__module____qualname____doc__r'   r8   r1   rA   r;   propertyr@   __classcell__r,   s   @r   r!   r!   $   s3    	#  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Zdd	Zdd
ZddZ fdZed        Zd Zed        Z xZS )r
   zEventlet Task Pool.FTNc                     ddl m ddlm} || _        j
                  | _        fd| _        j                  | _        t        | $  |i | y )Nr   greenthread)	GreenPoolc                  6    t         j                               S r   )id
getcurrentrO   s   r   <lambda>z#TaskPool.__init__.<locals>.<lambda>i   s    b!7!7!9:r   )
eventletrP   eventlet.greenpoolrQ   PoolrT   r   spawn_nr&   r'   )r+   r   r   rQ   rP   r,   s       @r   r'   zTaskPool.__init__d   sC    (0	%00:"**$)&)r   c                    | j                  | j                        | _        i | _        t        j
                  j                  |        | j                  j                  | _        t        j                  j                  | _
        y N)sender)rX   limit_pool	_pool_mapr   eventlet_pool_startedsendspawn
_quick_puteventlet_pool_apply_quick_apply_sigrE   s    r   on_startzTaskPool.on_startn   sY    YYtzz*
%%**$*7**** ' ; ; @ @r   c                     t         j                  j                  |        | j                  | j                  j	                          t         j
                  j                  |        y r[   )r   eventlet_pool_preshutdownra   r^   waitalleventlet_pool_postshutdownrE   s    r   on_stopzTaskPool.on_stopu   sJ    ))..d.;::!JJ **//t/<r   c           	          t         j                  |      }| j                  | |||       | j                  t        |||||| j
                        }| j                  t        |      |       y )N)r\   r   r   r   )r
   _make_killable_targetre   rc   r   r   _add_to_pool_maprS   )r+   r   r   r   r   r   _r%   s           r   on_applyzTaskPool.on_apply{   se    //7T&tFT??DKK
 	blH5r   c                 f    | j                   |z   }| j                  j                  |       || _         y r   r]   r^   resizer+   nr]   s      r   growzTaskPool.grow   (    

Q

% 
r   c                 f    | j                   |z
  }| j                  j                  |       || _         y r   rr   rt   s      r   shrinkzTaskPool.shrink   rw   r   c                     || j                   j                         v r0| j                   |   }|j                          |j                          y y r   )r_   keyskillr:   )r+   r   signalr%   s       r   terminate_jobzTaskPool.terminate_job   s<    $..%%''~~c*HMMOMMO (r   c                     t         |          }|j                  | j                  | j                  j                         | j                  j                         d       |S )N)zmax-concurrencyzfree-threadszrunning-threads)r&   	_get_infoupdater]   r^   freerunning)r+   infor,   s     r   r   zTaskPool._get_info   sM    w "#zz JJOO-#zz113
 	
 r   c                       fd}|S )Nc                  4    	  | i |S # t         $ r Y yw xY w)N)FNNr   )r   r   r   s     r   killable_targetz7TaskPool._make_killable_target.<locals>.killable_target   s*    +t.v.. +*+s    	 )r   r   s   ` r   rm   zTaskPool._make_killable_target   s    	+
 r   c                 x    || j                   |<   |j                  t        j                  | j                   |       y r   )r_   r0   r
   _cleanup_after_job_finish)r+   r   r%   s      r   rn   zTaskPool._add_to_pool_map   s/    &s..NN	
r   c                 
    ||= y r   r   )r%   pool_mapr   s      r   r   z"TaskPool._cleanup_after_job_finish   s	    SMr   )NNNN)r   r   )rF   rG   rH   rI   r!   signal_safeis_greentask_join_will_blockr^   r_   rc   r'   rf   rk   rp   rv   ry   r~   r   staticmethodrm   rn   r   rK   rL   s   @r   r
   r
   X   s    EKH EIJ*A= AE!%6

  
  r   r
   )r   NNNN)rI   systimer   r%   r   kombu.asynchronousr   _timerceleryr    r	   __all__W_RACEr   modulesr   sidegetattrwarningswarnRuntimeWarningr   r!   BasePoolr
   r   r   r   <module>r      s     
  ! .  

 /	
 E3;;DC13d#HMM.$78 2 E 9=.2+1FLL 1h]t}} ]r   