a
    xd8                     @   s0  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% zddl&Z&W n e'y   dZ&Y n0 dZ(dZ)dZ*dZ+G d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                   @   sR  e Zd ZdZdZdZdZdZdZdZ	G dd de
jZdHddZdIddZd	d
 Zdd Zdd Zdd Zdd Zdd Zdd ZdJddZdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* ZdKd,d-ZdLd.d/Z dMd1d2Z!dNd3d4Z"dOd5d6Z#dPd7d8Z$d9d: Z%d;d< Z&d=d> Z'd?d@ Z(dAdB Z)e*dCdD Z+dQdFdGZ,dS )Rr   zUnmanaged worker instance.Nc                   @   s   e Zd ZdZdZh dZdS )zWorkController.BlueprintzWorker bootstep blueprint.ZWorker>   zcelery.worker.components:Timerzcelery.worker.components:Beatz!celery.worker.components:Consumerzcelery.worker.components:Poolz'celery.worker.autoscale:WorkerComponentzcelery.worker.components:Hubz celery.worker.components:StateDBN)__name__
__module____qualname____doc__nameZdefault_steps r   r   L/var/www/html/Ranjet/env/lib/python3.9/site-packages/celery/worker/worker.py	BlueprintL   s   r!   c                 K   s|   |p| j | _ t|| _t | _| j j  | jf i | | j	f i | | j
f i | | jf i | jf i | d S N)appr   hostnamer   utcnowstartup_timeloaderZinit_workeron_before_initsetup_defaultson_after_initsetup_instanceprepare_args)selfr#   r$   kwargsr   r   r    __init__Z   s    

zWorkController.__init__c                 K   s   || _ | || | t| | jsLzt | _W n tyJ   d| _Y n0 t| j| _|p`| j	| _
| j | _|d u r|  n|| _|| _tjj| d t| j| _g | _|   | j| jjd | j| j| jd| _| jj| fi | d S )N   ZsenderZworker)stepson_starton_close
on_stopped)pidfilesetup_queuessetup_includesr   r   r   NotImplementedErrorr   loglevelon_consumer_readyready_callbackr#   Zconnection_for_read	_conninfoshould_use_eventloopuse_eventloopoptionsr   Zworker_initsend_concurrencyZget_implementationpool_clsr2   on_init_blueprintr!   r3   r4   r5   	blueprintapply)r-   queuesr<   r6   includer?   Zexclude_queuesr.   r   r   r    r+   e   s4    
zWorkController.setup_instancec                 C   s   d S r"   r   r-   r   r   r    rD      s    z WorkController.on_init_blueprintc                 K   s   d S r"   r   r-   r.   r   r   r    r(      s    zWorkController.on_before_initc                 K   s   d S r"   r   rJ   r   r   r    r*      s    zWorkController.on_after_initc                 C   s   | j rt| j | _d S r"   )r6   r   pidlockrI   r   r   r    r3      s    zWorkController.on_startc                 C   s   d S r"   r   )r-   consumerr   r   r    r;      s    z WorkController.on_consumer_readyc                 C   s   | j j  d S r"   )r#   r'   Zshutdown_workerrI   r   r   r    r4      s    zWorkController.on_closec                 C   s(   | j   | j  | jr$| j  d S r"   )ZtimerstoprL   shutdownrK   releaserI   r   r   r    r5      s    

zWorkController.on_stoppedc              
   C   s   t |}t |}z| jjj| W n8 ty\ } z tt 	||W Y d }~n
d }~0 0 z| jjj
| W n8 ty } z tt 	||W Y d }~n
d }~0 0 | jjjr| jjjt| j d S r"   )r   r#   ZamqprG   selectKeyErrorr
   SELECT_UNKNOWN_QUEUEstripformatZdeselectDESELECT_UNKNOWN_QUEUEconfr   Z
select_addr$   )r-   rH   excludeexcr   r   r    r7      s     
zWorkController.setup_queuesc                    sf   t  jjj}|r0|t |7 } fdd|D  | _dd  jj D }t t||B  jj_d S )Nc                    s   g | ]} j j|qS r   )r#   r'   Zimport_task_module.0mrI   r   r    
<listcomp>       z1WorkController.setup_includes.<locals>.<listcomp>c                 S   s   h | ]}|j jqS r   )	__class__r   )rZ   Ztaskr   r   r    	<setcomp>   s   z0WorkController.setup_includes.<locals>.<setcomp>)tupler#   rV   rH   Ztasksvaluesset)r-   Zincludesprevtask_modulesr   rI   r    r8      s    
zWorkController.setup_includesc                 K   s   |S r"   r   rJ   r   r   r    r,      s    zWorkController.prepare_argsc                 C   s   t jj| d d S )Nr1   )r   Zworker_shutdownrA   rI   r   r   r    _send_worker_shutdown   s    z$WorkController._send_worker_shutdownc              
   C   s   z| j |  W n ty*   |   Y n tyh } z(tjd|dd | jtd W Y d }~nVd }~0  t	y } z| j|j
d W Y d }~n&d }~0  ty   | jtd Y n0 d S )NzUnrecoverable error: %rT)exc_info)exitcode)rE   startr   	terminate	ExceptionloggercriticalrM   r   
SystemExitcodeKeyboardInterrupt)r-   rX   r   r   r    rh      s     "zWorkController.startc                 C   s   | j j| d|fdd d S )Nregister_with_event_loopzhub.register)argsdescription)rE   Zsend_all)r-   Zhubr   r   r    rp      s    z'WorkController.register_with_event_loopc                 C   s   |  | j|S r"   )Z_quick_acquire_process_taskr-   reqr   r   r    _process_task_sem   s    z WorkController._process_task_semc                 C   sH   z| | j W n2 tyB   z|   W n ty<   Y n0 Y n0 dS )z2Process task by sending it to the pool of workers.N)Zexecute_using_poolpoolr   Z_quick_releaseAttributeErrorrt   r   r   r    rs      s    zWorkController._process_taskc                 C   s&   z| j   W n ty    Y n0 d S r"   )rL   closerx   rI   r   r   r    signal_consumer_close   s    z$WorkController.signal_consumer_closec                 C   s    t  dko| jjjjo| jj S )Ndefault)r   r=   	transportZ
implementsZasynchronousr#   Z
IS_WINDOWSrI   r   r   r    r>      s
    

z#WorkController.should_use_eventloopFc                 C   sF   |dur|| _ | jjtkr:|   |r.| jjr:| jdd |   dS )z'Graceful shutdown of the worker server.NTwarm)	rg   rE   r   r   rz   rw   signal_safe	_shutdownre   )r-   in_sighandlerrg   r   r   r    rM      s    zWorkController.stopc                 C   s0   | j jtkr,|   |r | jjr,| jdd dS )z.Not so graceful shutdown of the worker server.Fr}   N)rE   r   r	   rz   rw   r   r   )r-   r   r   r   r    ri      s    zWorkController.terminateTc                 C   sR   | j d urNtt, | j j| | d | j   W d    n1 sD0    Y  d S )N)ri   )rE   r   SHUTDOWN_SOCKET_TIMEOUTrM   join)r-   r~   r   r   r    r     s    

zWorkController._shutdownc                 C   sT   t | j|||d | jr.| j  | j  z| j  W n tyN   Y n0 d S )N)force_reloadreloader)list_reload_modulesrL   Zupdate_strategiesZreset_rate_limitsrw   Zrestartr9   )r-   modulesreloadr   r   r   r    r     s    

zWorkController.reloadc                    s.    fddt |d u r jjjn|p&dD S )Nc                 3   s    | ]}j |fi  V  qd S r"   )_maybe_reload_modulerY   r.   r-   r   r    	<genexpr>  s   z1WorkController._reload_modules.<locals>.<genexpr>r   )rb   r#   r'   rd   )r-   r   r.   r   r   r    r     s    zWorkController._reload_modulesc                 C   sH   |t jvr$td| | jj|S |rDtd| tt j| |S d S )Nzimporting module %szreloading module %s)sysr   rk   debugr#   r'   Zimport_from_cwdr   )r-   moduler   r   r   r   r    r      s    
z#WorkController._maybe_reload_modulec                 C   s4   t  | j }| jjt t| jj	t
| dS )N)totalpidclockuptime)r   r%   r&   r   Ztotal_countosgetpidstrr#   r   roundtotal_seconds)r-   r   r   r   r    info(  s    

zWorkController.infoc                 C   sb   t d u rtdt t j}|j|j|j|j|j|j	|j
|j|j|j|j|j|j|j|j|jdS )Nz%rusage not supported by this platform)utimeZstimeZmaxrssZixrssZidrssZisrssZminfltZmajfltZnswapZinblockZoublockZmsgsndZmsgrcvZnsignalsZnvcswZnivcsw)resourcer9   Z	getrusageZRUSAGE_SELFZru_utimeZru_stimeZ	ru_maxrssZru_ixrssZru_idrssZru_isrssZ	ru_minfltZ	ru_majfltZru_nswapZ
ru_inblockZ
ru_oublockZ	ru_msgsndZ	ru_msgrcvZru_nsignalsZru_nvcswZ	ru_nivcsw)r-   sr   r   r    rusage/  s(    zWorkController.rusagec                 C   s`   |   }|| j |  || jj | j z|  |d< W n tyZ   d|d< Y n0 |S )Nr   zN/A)r   updaterE   rL   r   r9   )r-   r   r   r   r    statsF  s    zWorkController.statsc                 C   s   dj | | jr| j nddS )z``repr(worker)``.z#<Worker: {self.hostname} ({state})>ZINIT)r-   r   )rT   rE   Zhuman_staterI   r   r   r    __repr__P  s    zWorkController.__repr__c                 C   s   | j S )z#``str(worker) == worker.hostname``.)r$   rI   r   r   r    __str__W  s    zWorkController.__str__c                 C   s   t S r"   r   rI   r   r   r    r   [  s    zWorkController.stateWARNc                 K   s  | j j}|| _|| _|d|| _|d|| _|d||| _|d|| _|d|| _|d|| _	|pd|| _
|d|	| _|d|
| _|d	|| _|d
||| _|d|| _|d||| _|d||| _|d||| _|d|| _|d|| _t|d|| _|d|| _|d|| _d S )NZworker_concurrencyZworker_send_task_eventsZworker_poolZworker_consumerZworker_timerZworker_timer_precisionZworker_autoscalerZworker_pool_putlocksZworker_pool_restartsZworker_state_dbZbeat_schedule_filenameZbeat_schedulertask_time_limittask_soft_time_limitZworker_max_tasks_per_childZworker_max_memory_per_childZworker_prefetch_multiplierZworker_disable_rate_limitsworker_lost_wait)r#   eitherr:   logfiler   task_eventsrC   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   r:   r   r   rw   r   r   r   r   r   r   r   Or   r   r   r   rC   Zstate_dbr   r   Zscheduler_clsr   r   r   r   r   r   Z_kwr   r   r   r    r)   _  sN    
zWorkController.setup_defaults)NN)NNNNNN)N)FN)F)T)NFN)N)FN)Nr   NNNNNNNNNNNNNNNNNNNNNNNNNN)-r   r   r   r   r#   rK   rE   rw   Z	semaphorerg   r   r!   r/   r+   rD   r(   r*   r3   r;   r4   r5   r7   r8   r,   re   rh   rp   rv   rs   rz   r>   rM   ri   r   r   r   r   r   r   r   r   r   propertyr   r)   r   r   r   r    r   ?   s   
  
(










                     r   )-r   r   r   r   Zbilliardr   Zkombu.utils.compatr   Zceleryr   r   rB   r   Zcelery.bootstepsr   r	   Zcelery.exceptionsr
   r   r   Zcelery.platformsr   r   Zcelery.utils.importsr   Zcelery.utils.logr   r   rk   Zcelery.utils.nodenamesr   r   Zcelery.utils.textr   Zcelery.utils.threadsr    r   r   ImportError__all__r   rR   rU   r   r   r   r   r    <module>   s6   
