
    `f|8                     >   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dlm
Z ddlmZ dd	lmZmZ dd
lmZ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mZ ddl m!Z! ddl"m#Z# ddl$m%Z% 	 ddl&Z&n# e'$ r dZ&Y nw xY wdZ(dZ)dZ*dZ+ G d d          Z,dS )a  WorkController can be used to instantiate in-process workers.

The command-line interface for the worker is in :mod:`celery.bin.worker`,
while the worker program is in :mod:`celery.apps.worker`.

The worker program is responsible for adding signal handlers,
setting up logging, etc.  This is a bare-bones worker without
global side-effects (i.e., except for the global state stored in
:mod:`celery.worker.state`).

The worker consists of several components, all managed by bootsteps
(mod:`celery.bootsteps`).
    N)datetime)	cpu_count)detect_environment)	bootsteps)concurrency)signals)RUN	TERMINATE)ImproperlyConfiguredTaskRevokedErrorWorkerTerminate)
EX_FAILUREcreate_pidlock)reload_from_cwd)mlevel)worker_logger)default_nodenameworker_direct)str_to_list)default_socket_timeout   state)WorkControllerg      @z
Trying to select queue subset of {0!r}, but queue {1} isn't
defined in the `task_queues` setting.

If you want to automatically declare unknown queues you can
enable the `task_create_missing_queues` setting.
ze
Trying to deselect queue subset of {0!r}, but queue {1} isn't
defined in the `task_queues` setting.
c                   b   e Zd ZdZdZdZdZdZdZdZ	 G d de
j                  Zd(dZ	 	 d)dZd Zd Zd	 Zd
 Zd Zd Zd Zd*dZd Zd Zd Zd Zd Zd Zd Zd Zd Zd+dZd,dZ d-dZ!d.dZ"d*dZ#d+dZ$d  Z%d! Z&d" Z'd# Z(d$ Z)e*d%             Z+	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d/d'Z,dS )0r   zUnmanaged worker instance.Nc                       e Zd ZdZdZh dZdS )WorkController.BlueprintzWorker bootstep blueprint.Worker>   celery.worker.components:Hubcelery.worker.components:Beatcelery.worker.components:Poolcelery.worker.components:Timer celery.worker.components:StateDB!celery.worker.components:Consumer'celery.worker.autoscale:WorkerComponentN)__name__
__module____qualname____doc__namedefault_steps     F/var/www/html/env/lib/python3.11/site-packages/celery/worker/worker.py	Blueprintr   K   s*        ((
 
 
r-   r/   c           	      4   |p| j         | _         t          |          | _        t          j                    | _        | j         j                                          | j        di |  | j	        di |  | j
        di |  | j        di  | j        di | d S )Nr,   )appr   hostnamer   utcnowstartup_timeloaderinit_workeron_before_initsetup_defaultson_after_initsetup_instanceprepare_args)selfr1   r2   kwargss       r.   __init__zWorkController.__init__Y   s    ?$((22$O--##%%%%%f%%%%%f%%%$$V$$$::/d/99&99:::::r-   c                    || _         |                     ||           |                     t          |                     | j        s,	 t                      | _        n# t          $ r
 d| _        Y nw xY wt          | j                  | _        |p| j	        | _
        | j                                        | _        ||                                 n|| _        || _        t"          j                            |            t)          j        | j                  | _        g | _        |                                  |                     | j        j        d         | j        | j        | j                  | _         | j        j        | fi | d S )N   senderworker)stepson_starton_close
on_stopped)pidfilesetup_queuessetup_includesr   r   r   NotImplementedErrorr   loglevelon_consumer_readyready_callbackr1   connection_for_read	_conninfoshould_use_eventloopuse_eventloopoptionsr   worker_initsend_concurrencyget_implementationpool_clsrD   on_init_blueprintr/   rE   rF   rG   	blueprintapply)r<   queuesrN   rH   includerR   exclude_queuesr=   s           r.   r:   zWorkController.setup_instanced   s    &.111K00111  	%%#,;;  & % % %#$   % t}--,F0F 5577+8+@D%%''' 	    --- %7FF
   (.*]]	 ( 
 
 	T,,V,,,,,s   A A0/A0c                     d S Nr,   r<   s    r.   rY   z WorkController.on_init_blueprint       r-   c                     d S r`   r,   r<   r=   s     r.   r7   zWorkController.on_before_init   rb   r-   c                     d S r`   r,   rd   s     r.   r9   zWorkController.on_after_init   rb   r-   c                 J    | j         rt          | j                   | _        d S d S r`   )rH   r   pidlockra   s    r.   rE   zWorkController.on_start   s+    < 	8)$,77DLLL	8 	8r-   c                     d S r`   r,   )r<   consumers     r.   rM   z WorkController.on_consumer_ready   rb   r-   c                 B    | j         j                                         d S r`   )r1   r5   shutdown_workerra   s    r.   rF   zWorkController.on_close   s    '')))))r-   c                     | j                                          | j                                         | j        r| j                                         d S d S r`   )timerstopri   shutdownrg   releasera   s    r.   rG   zWorkController.on_stopped   sV    
   < 	#L  """""	# 	#r-   c                    t          |          }t          |          }	 | j        j        j                            |           nL# t
          $ r?}t          t                                          	                    ||                    d }~ww xY w	 | j        j        j        
                    |           nL# t
          $ r?}t          t                                          	                    ||                    d }~ww xY w| j        j        j        r8| j        j        j                            t          | j                             d S d S r`   )r   r1   amqpr\   selectKeyErrorr   SELECT_UNKNOWN_QUEUEstripformatdeselectDESELECT_UNKNOWN_QUEUEconfr   
select_addr2   )r<   r]   excludeexcs       r.   rI   zWorkController.setup_queues   s[   g&&g&&	CHM ''0000 	C 	C 	C&$**,,33GSAAC C C	C	EHM ))'2222 	E 	E 	E&&,,..55gsCCE E E	E 8=& 	JHM ++M$-,H,HIIIII	J 	Js/   $A 
B:B		B$B7 7
D :C;;D c                 B    t           j        j        j                  }|r |t          |          z  } fd|D              | _        d  j        j                                        D             }t          t          |          |z             j        j        _        d S )Nc                 N    g | ]!}j         j                            |          "S r,   )r1   r5   import_task_module).0mr<   s     r.   
<listcomp>z1WorkController.setup_includes.<locals>.<listcomp>   s+    EEEqTX_//22EEEr-   c                 &    h | ]}|j         j        S r,   )	__class__r'   )r   tasks     r.   	<setcomp>z0WorkController.setup_includes.<locals>.<setcomp>   s-     = = =  1 = = =r-   )tupler1   rz   r]   tasksvaluesset)r<   includesprevtask_moduless   `   r.   rJ   zWorkController.setup_includes   s     TX]*++ 	FE(OO#DEEEEHEEEE= =$(HN$9$9$;$;= = = %c$ii,&> ? ?r-   c                     |S r`   r,   rd   s     r.   r;   zWorkController.prepare_args   s    r-   c                 F    t           j                            |            d S )NrA   )r   worker_shutdownrU   ra   s    r.   _send_worker_shutdownz$WorkController._send_worker_shutdown   s"    $$D$11111r-   c                    	 | j                             |            d S # t          $ r |                                  Y d S t          $ r=}t          j        d|d           |                     t                     Y d }~d S d }~wt          $ r&}|                     |j
                   Y d }~d S d }~wt          $ r |                     t                     Y d S w xY w)NzUnrecoverable error: %rT)exc_info)exitcode)rZ   startr   	terminate	Exceptionloggercriticalrn   r   
SystemExitcodeKeyboardInterrupt)r<   r}   s     r.   r   zWorkController.start   s   
	+N  &&&&& 	 	 	NN 	+ 	+ 	+O5sTJJJJIIzI********* 	) 	) 	)IIsxI(((((((((  	+ 	+ 	+IIzI******	+s,    C	C2B  CB..(CCc                 D    | j                             | d|fd           d S )Nregister_with_event_loopzhub.register)argsdescription)rZ   send_all)r<   hubs     r.   r   z'WorkController.register_with_event_loop   s8    ,C6& 	  	
 	
 	
 	
 	
r-   c                 8    |                      | j        |          S r`   )_quick_acquire_process_taskr<   reqs     r.   _process_task_semz WorkController._process_task_sem   s    ""4#5s;;;r-   c                     	 |                     | j                   dS # t          $ r+ 	 |                                  Y dS # t          $ r Y Y dS w xY ww xY w)z2Process task by sending it to the pool of workers.N)execute_using_poolpoolr   _quick_releaseAttributeErrorr   s     r.   r   zWorkController._process_task   s    	""49----- 	 	 	##%%%%%%!   	s&    
AA  
A
AAAc                 \    	 | j                                          d S # t          $ r Y d S w xY wr`   )ri   closer   ra   s    r.   signal_consumer_closez$WorkController.signal_consumer_close   sC    	M!!!!! 	 	 	DD	s    
++c                 l    t                      dk    o"| j        j        j        j        o| j        j         S )Ndefault)r   rP   	transport
implementsasynchronousr1   
IS_WINDOWSra   s    r.   rQ   z#WorkController.should_use_eventloop   s8    "$$	1 ((3@(H''	)r-   Fc                     ||| _         | j        j        t          k    r8|                                  |r| j        j        r|                     d           |                                  dS )z'Graceful shutdown of the worker server.NTwarm)	r   rZ   r   r	   r   r   signal_safe	_shutdownr   )r<   in_sighandlerr   s      r.   rn   zWorkController.stop   sq    $DM>3&&&&(((  *DI$9 *D)))""$$$$$r-   c                     | j         j        t          k    r:|                                  |r| j        j        r|                     d           dS dS dS )z.Not so graceful shutdown of the worker server.Fr   N)rZ   r   r
   r   r   r   r   )r<   r   s     r.   r   zWorkController.terminate   sd    >9,,&&(((  +DI$9 +E***** -,+ +r-   Tc                     | j         et          t                    5  | j                             | |            | j                                          d d d            d S # 1 swxY w Y   d S d S )N)r   )rZ   r   SHUTDOWN_SOCKET_TIMEOUTrn   join)r<   r   s     r.   r   zWorkController._shutdown  s     >%'(?@@ & &##DH#===##%%%& & & & & & & & & & & & & & & & & & &%s   7A  A$'A$c                    t          |                     |||                     | j        r2| j                                         | j                                         	 | j                                         d S # t          $ r Y d S w xY w)N)force_reloadreloader)list_reload_modulesri   update_strategiesreset_rate_limitsr   restartrK   )r<   modulesreloadr   s       r.   r   zWorkController.reload  s    T!!&8 " = = 	> 	> 	> = 	.M++---M++---	I" 	 	 	DD	s    A; ;
B	B	c                 h      fdt          | j        j        j        n|pd          D             S )Nc              3   4   K   | ]} j         |fi V  d S r`   )_maybe_reload_module)r   r   r=   r<   s     r.   	<genexpr>z1WorkController._reload_modules.<locals>.<genexpr>  sL       
 
 &D%a22622
 
 
 
 
 
r-   r,   )r   r1   r5   r   )r<   r   r=   s   ` `r.   r   zWorkController._reload_modules  s[    
 
 
 
 
#O 5529-RB B
 
 
 	
r-   c                     |t           j        vr4t          j        d|           | j        j                            |          S |r5t          j        d|           t          t           j        |         |          S d S )Nzimporting module %szreloading module %s)sysr   r   debugr1   r5   import_from_cwdr   )r<   moduler   r   s       r.   r   z#WorkController._maybe_reload_module  sy    $$L.7778?226::: 	BL.777"3;v#6AAA	B 	Br-   c                     t          j                    | j        z
  }| j        j        t          j                    t          | j        j	                  t          |                                          dS )N)totalpidclockuptime)r   r3   r4   r   total_countosgetpidstrr1   r   roundtotal_seconds)r<   r   s     r.   infozWorkController.info'  s]    ""T%66/y{{TX^,, 4 4 6 6779 9 	9r-   c                 n   t           t          d          t          j        t           j                  }i d|j        d|j        d|j        d|j        d|j        d|j	        d|j
        d	|j        d
|j        d|j        d|j        d|j        d|j        d|j        d|j        d|j        S )Nz%rusage not supported by this platformutimestimemaxrssixrssidrssisrssminfltmajfltnswapinblockoublockmsgsndmsgrcvnsignalsnvcswnivcsw)resourcerK   	getrusageRUSAGE_SELFru_utimeru_stime	ru_maxrssru_ixrssru_idrssru_isrss	ru_minflt	ru_majfltru_nswap
ru_inblock
ru_oublock	ru_msgsnd	ru_msgrcvru_nsignalsru_nvcsw	ru_nivcsw)r<   ss     r.   rusagezWorkController.rusage.  s   %&MNNNx344
QZ
QZ
 ak
 QZ	

 QZ
 QZ
 ak
 ak
 QZ
 q|
 q|
 ak
 ak
 
 QZ
  ak!
 	
r-   c                 R   |                                  }|                    | j                             |                      |                    | j        j                             | j                             	 |                                 |d<   n# t
          $ r d|d<   Y nw xY w|S )Nr  zN/A)r   updaterZ   ri   r  rK   )r<   r   s     r.   statszWorkController.statsE  s    yy{{DN''--...DM+00??@@@	#![[]]DNN" 	# 	# 	#"DNNN	#s   :B B$#B$c                 p    d                     | | j        r| j                                        nd          S )z``repr(worker)``.z#<Worker: {self.hostname} ({state})>INIT)r<   r   )rw   rZ   human_statera   s    r.   __repr__zWorkController.__repr__O  s?    4;;26.L$.,,...f < 
 
 	
r-   c                     | j         S )z#``str(worker) == worker.hostname``.)r2   ra   s    r.   __str__zWorkController.__str__V  s
    }r-   c                     t           S r`   r   ra   s    r.   r   zWorkController.stateZ  s    r-   WARNc                    | j         j        }|| _        || _         |d|          | _         |d|          | _         |d||          | _         |d|          | _         |d|          | _         |d|          | _	        |p|| _
         |d|	          | _         |d|
          | _         |d	|          | _         |d
||          | _         |d|          | _         |d||          | _         |d||          | _         |d||          | _         |d|          | _         |d|          | _        t+           |d|                    | _         |d|          | _         |d|          | _        d S )Nworker_concurrencyworker_send_task_eventsworker_poolworker_consumerworker_timerworker_timer_precisionworker_autoscalerworker_pool_putlocksworker_pool_restartsworker_state_dbbeat_schedule_filenamebeat_schedulertask_time_limittask_soft_time_limitworker_max_tasks_per_childworker_max_memory_per_childworker_prefetch_multiplierworker_disable_rate_limitsworker_lost_wait)r1   eitherrL   logfiler   task_eventsrX   consumer_cls	timer_clstimer_precisionoptimizationautoscaler_clspool_putlockspool_restartsstatedbschedule_filename	scheduler
time_limitsoft_time_limitmax_tasks_per_childmax_memory_per_childintprefetch_multiplierdisable_rate_limitsr%  )r<   r   rL   r'  r(  r   r)  r*  r+  r-  r.  r/  r,  Or0  r3  r4  r2  rX   state_dbr  r   scheduler_clsr1  r5  r8  r9  r%  r6  _kwr&  s                                  r.   r8   zWorkController.setup_defaults^  s   *  !6"6DD!6";[II}dH=="F#4lCC	::%v$o 
  
 )-A$f%8.II#V$:MJJ#V$:MJJv/(CC!'$&7"
 "
   0)]KK &z?< <%v"O5I 
  
 $*6(*=$
 $
  %+F)+?%
 %
! $'vv(*=(
 (
 $ $  $*6(*=$
 $
  !''9;K L Lr-   )NN)NNNNNNr`   )FN)F)T)NFN)Nr  NNNNNNNNNNNNNNNNNNNNNNNNNN)-r&   r'   r(   r)   r1   rg   rZ   r   	semaphorer   r   r/   r>   r:   rY   r7   r9   rE   rM   rF   rG   rI   rJ   r;   r   r   r   r   r   r   rQ   rn   r   r   r   r   r   r   r  r	  r  r  propertyr   r8   r,   r-   r.   r   r   >   s       $$
CGIDI H
 
 
 
 
I' 
 
 
	; 	; 	; 	; HLHL&- &- &- &-P      8 8 8  * * *# # #J J J J 
@ 
@ 
@  2 2 2+ + +
 
 
< < <    ) ) )
% % % %+ + + +& & & &
 
 
 

 
 
 
B B B B9 9 9
 
 
.  
 
 
     X IMAE7;&*%)%),0#"&'+!% $ $'+,0%))-+/EI(,,0);M ;M ;M ;M ;M ;Mr-   r   )-r)   r   r   r   billiardr   kombu.utils.compatr   celeryr   r   rV   r   celery.bootstepsr	   r
   celery.exceptionsr   r   r   celery.platformsr   r   celery.utils.importsr   celery.utils.logr   r   r   celery.utils.nodenamesr   r   celery.utils.textr   celery.utils.threadsr    r   r   ImportError__all__r   ru   ry   r   r,   r-   r.   <module>rN     s    
			 



             1 1 1 1 1 1       . . . . . .       + + + + + + + + U U U U U U U U U U 7 7 7 7 7 7 7 7 0 0 0 0 0 0 # # # # # # 4 4 4 4 4 4 B B B B B B B B ) ) ) ) ) ) 7 7 7 7 7 7      OOOO   HHH     [M [M [M [M [M [M [M [M [M [Ms   6A; ;BB