
    IhI                        d Z ddlZddlZddlmZ ddlmZmZ ddlm	Z	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 ddlmZ dZddhZdZdZ G d dej:                        Z G d dej<                        Z G d dej<                        Z G d dej<                        Z  G d dej:                        Z! G d dej<                        Z"y)zWorker-level Bootsteps.    N)Hub)get_event_loopset_event_loop)	DummyLockLaxBoundedSemaphore)Timer)	bootsteps)_set_task_join_will_block)ImproperlyConfigured)
IS_WINDOWS)worker_logger)r   r   PoolBeatStateDBConsumereventletgeventzO-B option doesn't work with eventlet/gevent pools: use standalone beat instead.z
The worker_pool setting shouldn't be used to select the eventlet/gevent
pools, instead you *must use the -P* argument so that patches are applied
as early as possible.
c                   "    e Zd ZdZd Zd Zd Zy)r   zTimer bootstep.c                    |j                   rt        d      |_        y |j                  s|j                  j
                  |_        | j                  |j                  |j                  | j                  | j                        |_        y )Ng      $@)max_interval)r   on_erroron_tick)
use_eventloop_Timertimer	timer_clspool_clsr   instantiatetimer_precisionon_timer_erroron_timer_tickselfws     Q/var/www/html/planif/env/lib/python3.12/site-packages/celery/worker/components.pycreatezTimer.create#   sh    ??$/AG;;  jj..&&q{{454E4E040C0C/3/A/A ' CAG    c                 4    t        j                  d|d       y )NzTimer error: %rT)exc_info)loggererror)r#   excs     r%   r    zTimer.on_timer_error1   s    &d;r'   c                 0    t        j                  d|       y )Nz Timer wake-up! Next ETA %s secs.)r*   debug)r#   delays     r%   r!   zTimer.on_timer_tick4   s    7?r'   N)__name__
__module____qualname____doc__r&   r    r!    r'   r%   r   r       s    C<@r'   r   c                   L     e Zd ZdZefZ fdZd Zd Zd Z	d Z
d Zd Z xZS )	r   zWorker starts the event loop.c                 4    d |_         t        |   |fi | y N)hubsuper__init__r#   r$   kwargs	__class__s      r%   r:   zHub.__init__=   s    %f%r'   c                     |j                   S r7   )r   r"   s     r%   
include_ifzHub.include_ifA   s    r'   c                     t               |_        |j                  ?t        |j                  dd       }t	         |r|nt
        |j                              |_        | j                  |       | S )Nrequires_hub)r   r8   getattr	_conninfor   _Hubr   _patch_thread_primitives)r#   r$   required_hubs      r%   r&   z
Hub.createD   s\     55="1;;EL"6$$A BAE%%a(r'   c                      y r7   r4   r"   s     r%   startz	Hub.startM   s    r'   c                 8    |j                   j                          y r7   r8   closer"   s     r%   stopzHub.stopP       	r'   c                 8    |j                   j                          y r7   rJ   r"   s     r%   	terminatezHub.terminateS   rM   r'   c                     t               |j                  j                  _        	 ddlm} t         |_        y # t        $ r Y y w xY w)Nr   )pool)r   appclockmutexbilliardrQ   LockImportError)r#   r$   rQ   s      r%   rE   zHub._patch_thread_primitivesV   s9    %K	"% "DI  		s   7 	AA)r0   r1   r2   r3   r   requiresr:   r?   r&   rH   rL   rO   rE   __classcell__r=   s   @r%   r   r   8   s0    'xH&	"r'   r   c                   H     e Zd ZdZefZd fd	Zd Zd Zd Z	d Z
d Z xZS )	r   a
  Bootstep managing the worker pool.

    Describes how to initialize the worker pool, and starts and stops
    the pool during worker start-up/shutdown.

    Adds attributes:

        * autoscale
        * pool
        * max_concurrency
        * min_concurrency
    c                 d   d |_         d |_        |j                  |_        |j                  | _        t        |t              r3|j                  d      \  }}}t        |      |xr t        |      xs dg}||_	        |j                  r|j                  \  |_        |_        t        | ,  |fi | y )N,r   )rQ   max_concurrencyconcurrencymin_concurrencyoptimization
isinstancestr	partitionint	autoscaler9   r:   )r#   r$   rf   r<   max_c_min_cr=   s          r%   r:   zPool.__init__r   s     MMNNi%'11#6OE1eUU%9s5z%>Q?I;;34;;0Aq0%f%r'   c                 R    |j                   r|j                   j                          y y r7   )rQ   rK   r"   s     r%   rK   z
Pool.close   s    66FFLLN r'   c                 R    |j                   r|j                   j                          y y r7   )rQ   rO   r"   s     r%   rO   zPool.terminate   s    66FF r'   c                    d }d }|j                   j                  j                  t        v r"t	        j
                  t        t                     |j                   xs t        }|j                  }|j                  |_        |s}t        |      x}|_        |j                  j                  |_        |j                  j"                  |_        d}|j&                  r'|j(                  j*                  r|j,                  |_        |j.                  }| j1                  |j(                  |j                  |j                   |j2                  f|j4                  |j6                  |j8                  |j:                  |j&                  xr ||j<                  |||d|| j>                  |j                         x}|_         tC        |jD                         |S )Nd   T)initargsmaxtasksperchildmax_memory_per_childtimeoutsoft_timeoutputlockslost_worker_timeoutthreadsmax_restartsallow_restartforking_enable	semaphoresched_strategyrR   )#rR   confworker_poolGREEN_POOLSwarningswarnUserWarningW_POOL_SETTINGr   r   r`   _process_taskprocess_taskr   ry   acquire_quick_acquirerelease_quick_releasepool_putlocksr   uses_semaphore_process_task_sempool_restartsr   hostnamemax_tasks_per_childrp   
time_limitsoft_time_limitworker_lost_waitra   rQ   r
   task_join_will_block)r#   r$   ry   rv   threadedprocsrw   rQ   s           r%   r&   zPool.create   sh   	55::!![0MM+n56&4*!!&9%&@@I {{22A {{22AL1::#<#<!"!4!4((JJ))eeQZZ(22!"!7!7LL**__1 ! 2 2%',, ) 
 	
qv" 	"$";";<r'   c                 P    d|j                   r|j                   j                  iS diS )NrQ   zN/A)rQ   infor"   s     r%   r   z	Pool.info   s#    qvv99599r'   c                 :    |j                   j                  |       y r7   )rQ   register_with_event_loop)r#   r$   r8   s      r%   r   zPool.register_with_event_loop   s    	'',r'   r7   )r0   r1   r2   r3   r   rX   r:   rK   rO   r&   r   r   rY   rZ   s   @r%   r   r   b   s0     vH&"H:-r'   r   c                   2     e Zd ZdZd ZdZd fd	Zd Z xZS )r   zWStep used to embed a beat process.

    Enabled when the ``beat`` argument is set.
    Tc                 T    |x| _         |_        d |_        t        |   |fd|i| y )Nbeat)enabledr   r9   r:   )r#   r$   r   r<   r=   s       r%   r:   zBeat.__init__   s/     $$qv000r'   c                     ddl m} |j                  j                  j	                  d      rt        t               ||j                  |j                  |j                        x}|_
        |S )Nr   )EmbeddedService)r   r   )schedule_filenamescheduler_cls)celery.beatr   r   r1   endswithr   ERR_B_GREENrR   r   	schedulerr   )r#   r$   r   bs       r%   r&   zBeat.create   s[    /::  ))*@A&{33$QUU787J7J34;;@ 	@AF r'   )F)	r0   r1   r2   r3   labelconditionalr:   r&   rY   rZ   s   @r%   r   r      s    
 EK1
r'   r   c                   (     e Zd ZdZ fdZd Z xZS )r   z:Bootstep that sets up between-restart state database file.c                 V    |j                   | _        d |_        t        |   |fi | y r7   )statedbr   _persistencer9   r:   r;   s      r%   r:   zStateDB.__init__   s'    yy%f%r'   c                     |j                   j                  |j                   |j                  |j                  j                        |_        t        j                  |j
                  j                         y r7   )	state
Persistentr   rR   rS   r   atexitregistersaver"   s     r%   r&   zStateDB.create   sB    ++AGGQYYL++,r'   )r0   r1   r2   r3   r:   r&   rY   rZ   s   @r%   r   r      s    D&
-r'   r   c                       e Zd ZdZdZd Zy)r   z)Bootstep starting the Consumer blueprint.Tc                    |j                   r$t        |j                   d      |j                  z  }n|j                  |j                  z  }| j	                  |j
                  |j                  |j                  |j                  |j                  ||j                  |j                  |j                  ||j                  |j                  |j                  |j                        x}|_        |S )N   )r   task_eventsinit_callbackinitial_prefetch_countrQ   r   rR   
controllerr8   worker_optionsdisable_rate_limitsprefetch_multiplier)r^   maxr   r_   r   consumer_clsr   r   r   ready_callbackrQ   r   rR   r8   optionsr   consumer)r#   r$   prefetch_countcs       r%   r&   zConsumer.create   s     !2!2A69N9NNN]]Q-B-BBN))NNANNZZ**#1''99 ! 5 5 ! 5 5 * 
 	
AJ r'   N)r0   r1   r2   r3   lastr&   r4   r'   r%   r   r      s    3Dr'   r   )#r3   r   r~   kombu.asynchronousr   rD   r   r   kombu.asynchronous.semaphorer   r   kombu.asynchronous.timerr   r   celeryr	   celery._stater
   celery.exceptionsr   celery.platformsr   celery.utils.logr   r*   __all__r}   r   r   StepStartStopStepr   r   r   r   r4   r'   r%   <module>r      s       * = G 4  3 2 ' 4
A8$
@INN @0'")
!
! '"TM-9"" M-`9"" 0
-inn 
-y&& r'   