
    `fI                        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"dS )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dS )r   zTimer bootstep.c                     |j         rt          d          |_        d S |j        s|j        j        |_        |                     |j        |j        | j        | j	                  |_        d S )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     J/var/www/html/env/lib/python3.11/site-packages/celery/worker/components.pycreatezTimer.create#   ss    ? 	C$///AGGG; /  j.&&q{454E040C/3/A ' C CAGGG    c                 4    t          j        d|d           d S )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|           d S )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       sO        C C 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                 J    d |_          t                      j        |fi | d S 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        At          |j        dd           }t	           |r|nt
          |j                            |_        |                     |           | S )Nrequires_hub)r   r8   getattr	_conninfor   _Hubr   _patch_thread_primitives)r#   r$   required_hubs      r%   r&   z
Hub.createD   ss      5="1;EEL"66$$A $A B BAE%%a(((r'   c                     d S r7   r4   r"   s     r%   startz	Hub.startM   s    r'   c                 8    |j                                          d S r7   r8   closer"   s     r%   stopzHub.stopP       	r'   c                 8    |j                                          d S r7   rJ   r"   s     r%   	terminatezHub.terminateS   rM   r'   c                     t                      |j        j        _        	 ddlm} t           |_        d S # t          $ r Y d S w xY w)Nr   )pool)r   appclockmutexbilliardrQ   LockImportError)r#   r$   rQ   s      r%   rE   zHub._patch_thread_primitivesV   sZ    %KK	"%%%%%% "DIII  	 	 	DD	s   3 
A A)r0   r1   r2   r3   r   requiresr:   r?   r&   rH   rL   rO   rE   __classcell__r=   s   @r%   r   r   8   s        ''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
    Nc                 l   d |_         d |_        |j        |_        |j        | _        t          |t                    r;|                    d          \  }}}t          |          |rt          |          pdg}||_	        |j	        r|j	        \  |_        |_         t                      j        |fi | d S )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     MNi%% 	@'11#66OE1eUU%9s5zz%>Q?I; 	?34;0Aq0%%f%%%%%r'   c                 J    |j         r|j                                          d S d S r7   )rQ   rK   r"   s     r%   rK   z
Pool.close   s)    6 	FLLNNNNN	 	r'   c                 J    |j         r|j                                          d S d S r7   )rQ   rO   r"   s     r%   rO   zPool.terminate   s0    6 	F	 	r'   c                    d }d }|j         j        j        t          v r&t	          j        t          t                               |j         pt          }|j
        }|j        |_        |sYt          |          x}|_        |j        j        |_        |j        j        |_        d}|j        r|j        j        r|j        |_        |j        }|                     |j        |j
        |j         |j        f|j        |j        |j        |j        |j        o||j        |||d|| j        |j                   x}|_         tC          |j"                   |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   sJ   	5:![00M+n55666&4*! 	5&9%&@&@@I {2A {2AL 51:#< 5!"!4((J)eQZ(2!"!7L*_1 ! 2%', ) 
 
 	
qv" 	"$";<<<r'   c                 0    d|j         r|j         j        ndiS )NrQ   zN/A)rQ   infor"   s     r%   r   z	Pool.info   s    qv8599r'   c                 :    |j                             |           d S 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   s          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.
    TFc                 j    |x| _         |_        d |_         t                      j        |fd|i| d S )Nbeat)enabledr   r9   r:   )r#   r$   r   r<   r=   s       r%   r:   zBeat.__init__   sB     $$qv00000000r'   c                     ddl m} |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   sw    //////: ))*@AA 	4&{333$_QU787J34;@ @ @ 	@AF r'   )F)	r0   r1   r2   r3   labelconditionalr:   r&   rY   rZ   s   @r%   r   r      sb         
 EK1 1 1 1 1 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                 b    |j         | _        d |_         t                      j        |fi | d S r7   )statedbr   _persistencer9   r:   r;   s      r%   r:   zStateDB.__init__   s8    y%%f%%%%%r'   c                     |j                             |j         |j        |j        j                  |_        t          j        |j        j                   d S r7   )	state
Persistentr   rR   rS   r   atexitregistersaver"   s     r%   r&   zStateDB.create   s@    ++AGQYLL+,,,,,r'   )r0   r1   r2   r3   r:   r&   rY   rZ   s   @r%   r   r      sM        DD& & & & &
- - - - - - -r'   r   c                       e Zd ZdZdZd ZdS )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                  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     	C !2A669NNNN]Q-BBN))NANZ*#1'9 ! 5 ! 5 * 
 
 	
AJ r'   N)r0   r1   r2   r3   lastr&   r4   r'   r%   r   r      s.        3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 G G G G G G G 4 4 4 4 4 4       3 3 3 3 3 3 2 2 2 2 2 2 ' ' ' ' ' ' 4 4 4 4 4 4
A8$
@ @ @ @ @IN @ @ @0'" '" '" '" '")
! '" '" '"TM- M- M- M- M-9" M- M- M-`    9"   0
- 
- 
- 
- 
-in 
- 
- 
-    y&     r'   