
    >i|8                     4   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&dZ(dZ)dZ*dZ+ G d d      Z,y# e'$ r dZ&Y w xY w)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                   ^   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,y)-r   zUnmanaged worker instance.Nc                       e Zd ZdZdZh dZy)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     p/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/celery/worker/worker.py	Blueprintr   K   s    (
r-   r/   c           	      x   |xs | j                   | _         t        |      | _        t        j                         | _        | j                   j                  j                           | j                  di |  | j                  di |  | j                  di |  | j                  di  | j                  di | y )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$OO-##%%f%%f%$V$:/d//9&9:r-   c                 :   || _         | j                  ||       | j                  t        |             | j                  s	 t               | _        t        | j                        | _        |xs | j                  | _
        | j                  j                         | _        || j                         n|| _        || _        t"        j$                  j'                  |        t)        j*                  | j,                        | _        g | _        | j1                          | j3                  | j                  j.                  d   | j4                  | j6                  | j8                        | _         | j:                  j<                  | fi | y # t        $ r d| _        Y Iw xY w)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   sX    &.1K01 %#,; 
 t}}-,F0F0F 557+8+@D%%' 	    - %77F
 ((..*]]]]	 ( 
 	T,V,7 ' %#$ %s   F FFc                      y Nr,   r<   s    r.   rY   z WorkController.on_init_blueprint       r-   c                      y r`   r,   r<   r=   s     r.   r7   zWorkController.on_before_init   rb   r-   c                      y r`   r,   rd   s     r.   r9   zWorkController.on_after_init   rb   r-   c                 R    | j                   rt        | j                         | _        y y r`   )rH   r   pidlockra   s    r.   rE   zWorkController.on_start   s    <<)$,,7DL r-   c                      y r`   r,   )r<   consumers     r.   rM   z WorkController.on_consumer_ready   rb   r-   c                 L    | j                   j                  j                          y r`   )r1   r5   shutdown_workerra   s    r.   rF   zWorkController.on_close   s    '')r-   c                     | j                   j                          | j                  j                          | j                  r| j                  j                          y y r`   )timerstopri   shutdownrg   releasera   s    r.   rG   zWorkController.on_stopped   s<    

 <<LL  " r-   c                    t        |      }t        |      }	 | j                  j                  j                  j	                  |       	 | j                  j                  j                  j                  |       | j                  j                  j                  rC| j                  j                  j                  j                  t        | j                               y y # t
        $ r2}t        t        j                         j                  ||            d }~ww xY w# t
        $ r2}t        t        j                         j                  ||            d }~ww xY w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HHMM  ''0	EHHMM  ))'2 88==&&HHMM  ++M$--,HI '  	C&$**,33GSAC C	C
  	E&&,,.55gsCE E	Es/   /C /D 	D$-DD	E"-EEc                    t        | j                  j                  j                        }|rA|t        |      z  }|D cg c]'  }| j                  j                  j                  |      ) c} || _        | j                  j                  j                         D ch c]  }|j                  j                   }}t        t        |      |z        | j                  j                  _        y c c}w c c}w r`   )tupler1   rz   r]   r5   import_task_moduletasksvalues	__class__r'   set)r<   includesprevmtasktask_moduless         r.   rJ   zWorkController.setup_includes   s     TXX]]**+E(O#D<DEqTXX__//2E$(HHNN$9$9$;=  11 = = %c$i,&> ?	 F=s   ,C*C/c                     |S r`   r,   rd   s     r.   r;   zWorkController.prepare_args   s    r-   c                 D    t         j                  j                  |        y )NrA   )r   worker_shutdownrU   ra   s    r.   _send_worker_shutdownz$WorkController._send_worker_shutdown   s    $$D$1r-   c                    	 | j                   j                  |        y # t        $ r | j                          Y y t        $ r8}t        j                  d|d       | j                  t               Y d }~y d }~wt        $ r&}| j                  |j                         Y d }~y d }~wt        $ r | j                  t               Y y 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    
	+NN  & 	NN 	+OO5sTJIIzI** 	)IIsxxI((  	+IIzI*	+s,    CC.A44C B!!"CCc                 D    | j                   j                  | d|fd       y )Nregister_with_event_loopzhub.register)argsdescription)rZ   send_all)r<   hubs     r.   r   z'WorkController.register_with_event_loop   s&    ,C6& 	  	
r-   c                 :    | j                  | j                  |      S r`   )_quick_acquire_process_taskr<   reqs     r.   _process_task_semz WorkController._process_task_sem   s    ""4#5#5s;;r-   c                     	 |j                  | j                         y# t        $ r$ 	 | j                          Y y# t        $ r Y Y y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   sK    	""499- 	##%! 	s$    	A:	AAAAc                 X    	 | j                   j                          y # t        $ r Y y w xY wr`   )ri   closer   ra   s    r.   signal_consumer_closez$WorkController.signal_consumer_close   s)    	MM! 		s    	))c                     t               dk(  xrC | j                  j                  j                  j                  xr | j
                  j                   S )Ndefault)r   rP   	transport
implementsasynchronousr1   
IS_WINDOWSra   s    r.   rQ   z#WorkController.should_use_eventloop   sE    "$	1 (((33@@(HH'''	)r-   c                     ||| _         | j                  j                  t        k(  r:| j	                          |r| j
                  j                  r| j                  d       | j                          y)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   sV    $DM>>3&&&( DII$9$9D)""$r-   c                     | j                   j                  t        k7  r<| j                          |r| j                  j
                  r| j                  d       yyy)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   sG    >>9,&&( DII$9$9E* %: -r-   c                     | j                   Qt        t              5  | j                   j                  | |        | j                   j	                          d d d        y y # 1 sw Y   y xY w)N)r   )rZ   r   SHUTDOWN_SOCKET_TIMEOUTrn   join)r<   r   s     r.   r   zWorkController._shutdown  s_     >>%'(?@ &##DH#=##%& & && &s   9AA(c                    t        | j                  |||             | j                  r4| j                  j                          | j                  j	                          	 | j
                  j                          y # t        $ r Y y 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  ss    T!!&8 " = 	> ==MM++-MM++-	II" 		s   A: :	BBc                       fdt        |) j                  j                  j                        D        S |xs d      D        S )Nc              3   D   K   | ]  } j                   |fi   y wr`   )_maybe_reload_module).0r   r=   r<   s     r.   	<genexpr>z1WorkController._reload_modules.<locals>.<genexpr>  s+      
 &D%%a262
s    r,   )r   r1   r5   r   )r<   r   r=   s   ` `r.   r   zWorkController._reload_modules  sL    
#O 55 B
 	
 3:-RB
 	
r-   c                    |t         j                  vr;t        j                  d|       | j                  j
                  j                  |      S |r3t        j                  d|       t        t         j                  |   |      S y )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  sc    $LL.788??226::LL.7"3;;v#6AA r-   c                    t        j                         | j                  z
  }| j                  j                  t        j                         t        | j                  j                        t        |j                               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'  sZ    "T%6%66//yy{TXX^^, 4 4 679 	9r-   c                    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.  s0   %&MNNx334
QZZ
QZZ
 akk
 QZZ	

 QZZ
 QZZ
 akk
 akk
 QZZ
 q||
 q||
 akk
 akk
 
 QZZ
  akk!
 	
r-   c                 H   | j                         }|j                  | j                  j                  |              |j                  | j                  j                  j                  | j                               	 | j	                         |d<   |S # t
        $ r	 d|d<   Y |S w xY w)Nr  zN/A)r   updaterZ   ri   r  rK   )r<   r   s     r.   statszWorkController.statsE  s    yy{DNN''-.DMM++00?@	#![[]DN  # 	#"DN	#s   :B B! B!c                 ~    dj                  | | j                  r| j                  j                               S d      S )z``repr(worker)``.z#<Worker: {self.hostname} ({state})>INIT)r<   r   )rw   rZ   human_statera   s    r.   __repr__zWorkController.__repr__O  sE    4;;26..$..,,. < 
 	
FL < 
 	
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-   c                    | j                   j                  }|| _        || _         |d|      | _         |d|      | _         |d||      | _         |d|      | _         |d|      | _         |d|      | _	        |xs || _
         |d|	      | _         |d|
      | _         |d	|      | _         |d
||      | _         |d|      | _         |d||      | _         |d||      | _         |d||      | _         |d|      | _         |d|      | _        t+         |d|            | _         |d|      | _         |d|      | _        y )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'  Or+  r.  r/  r-  rX   state_dbr  r  scheduler_clsr,  r0  r3  r4  r   r1  _kwr!  s                                  r.   r8   zWorkController.setup_defaults^  s   *  !"6D!";[I}dH="#4lC	:%$o 
 )-A$%8.I#$:MJ#$:MJ/(C!'$&7"
   0)]K z?<%"O5I 
 $*(*=$
  %+)+?%
! $'v(*=(
 $  $*(*=$
  !''9;K Lr-   )NN)NNNNNNr`   )FN)F)T)NFN)NWARNNNNNNNNNNNNNNNNNNNNNNNNNNN)-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   >   s8   $
CGIDI H
I'' 
	; HLHL&-P8*#J 
@2+
<)
%+&

B9
.
   IMAE7;&*%)%),0#"&'+!% $ $'+,0%))-+/EI(,,0);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>rJ     s    
 
   1  .  + U U 7 0 # 4 B ) 7 
     [M [M/  Hs   6B BB