a
    xd4                     @   s  d Z ddlZddl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mZmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ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'm(Z(m)Z) ddl*m+Z+ ddl,m-Z- dZ.e'e/Z0ej1dZ2e3edZ4g dZ5dZ6dZ7dd Z8dd Z9G dd de-Z:dd edefd!d"Z;e
d#kree;d$d%eed&Z<nee;d$d ed'Z<e2see;d#d%eed&Z=nd(d)  Z<Z=d*d+ Z>e2see;d,e>ed-Z?nd.d/ Z?d0d1 Z@d>d3d4ZAd?d6d7ZBd@d:d;ZCdAd<d=ZDdS )BzWorker command-line program.

This module is the 'program-version' of :mod:`celery.worker`.

It does everything necessary to run that module
as an actual application, like installing signal handlers,
platform tweaks, and so on.
    N)datetime)partial)REMAP_SIGTERM)current_process)safe_str)VERSION_BANNER	platformssignals)trace)WorkerShutdownWorkerTerminate)	AppLoader)
EX_FAILUREEX_OKcheck_privilegesisatty)staticterm)cry)qualname)
get_loggerin_sighandlerset_in_sighandler)	pluralize)WorkController)Workerjavapypy_version_info) ----------------- ***** ------- ******* ----- *** --- * ---- ** ----------r"   r"   r"   r!   r    r   r   z{hostname} v{version}

{platform} {timestamp}

[config]
.> app:         {app}
.> transport:   {conninfo}
.> results:     {results}
.> concurrency: {concurrency}
.> task events: {events}

[queues]
{queues}
z
[tasks]
{tasks}
c                  C   s    ddl m}  tdd |  D S )Nr   	enumeratec                 s   s   | ]}|j d sdV  qdS )zDummy-   N)name
startswith).0t r*   J/var/www/html/Ranjet/env/lib/python3.9/site-packages/celery/apps/worker.py	<genexpr>M   s   z&active_thread_count.<locals>.<genexpr>)	threadingr$   sumr#   r*   r*   r+   active_thread_countK   s    r/   c                 C   s   t d|  tjdd d S )N
Tfileflush)printsys
__stderr__)msgr*   r*   r+   safe_sayQ   s    r8   c                       s   e Zd ZdZd#ddZd$ fdd	Zdd	 Zd
d Zdd Zdd Z	d%ddZ
dd Zd&ddZdd Zd'ddZdd Zdd  Zd!d" Z  ZS )(r   zWorker as a program.Fc                 K   sB   || _ t| j| j tjj| j| | jj|d t	| jjj
 d S )N)senderinstanceconfoptions)quietr
   setup_worker_optimizationsapphostnamer	   Zceleryd_initsendr;   r   Zaccept_content)selfr=   kwargsr*   r*   r+   on_before_initX   s    zWorker.on_before_initNc                    sr   | j d|| _| j d|| _t jf i | || _|| _tt	j
| _| j jj| j|d urd| n|d| _d S )NZworker_redirect_stdoutsZworker_redirect_stdouts_level)Zenabled)r?   Zeitherredirect_stdoutsredirect_stdouts_levelsuperZsetup_defaultspurgeno_colorr   r5   stdout_isattylogcoloredlogfile)rB   rH   rI   rE   rF   rC   	__class__r*   r+   on_after_initd   s    zWorker.on_after_initc                 C   s   |   | _t| j| j d S N)setup_logging_custom_loggingr
   r>   r?   r@   rB   r*   r*   r+   on_init_blueprintt   s    
zWorker.on_init_blueprintc                 C   s   | j }t|  tjj| j| |jd | jr4| 	  | j
sB|   | d | |  | jsp| jrp|j| j d}|j}t|tr| dv}|r|j rtd d S )N)r9   r:   r;   z-active-T)zdjango.conf:settingszPlease run `celery upgrade settings path/to/settings.py` to avoid these warnings and to allow a smoother upgrade to Celery 6.0.)r?   r   on_startr	   Zceleryd_after_setuprA   r@   r;   rH   purge_messagesr=   emit_bannerset_process_statusinstall_platform_tweaksrT   rE   rL   rF   Z_config_source
isinstancestrlowerZmaybe_warn_deprecated_settingsloggerwarning)rB   r?   Zwarn_deprecatedZconfig_sourcer*   r*   r+   rW   z   s,    





zWorker.on_startc                 C   sl   t  }|rtt t  ttdt| j	
d| j| dt| j	|  pRdgtjdd d S )N z 
)artlinesTr1   )r   Zsupports_imagesr4   Zimgcatr   Zlogor   joinr]   rM   Zcyanstartup_inforeset
extra_infor5   
__stdout__)rB   Z	use_imager*   r*   r+   rY      s    zWorker.emit_bannerc                 C   s$   t jj|d tdt| j d S )N)r9   z	%s ready.)r	   Zworker_readyrA   r_   infor   r@   )rB   Zconsumerr*   r*   r+   on_consumer_ready   s    zWorker.on_consumer_readyc                 C   s8   |d u r| j d ur| j  }| jjj| j| jd|| jdS )NF)rE   colorizer@   )rI   r?   rL   setuploglevelrN   r@   )rB   rj   r*   r*   r+   rS      s    zWorker.setup_loggingc                 C   sb   | j  D}| j jj|d}|r@td| dt|d ddd W d    n1 sT0    Y  d S )N)
connectionzpurge: Erased  messagez from the queue.
T)r3   )r?   Zconnection_for_writecontrolrH   r4   r   )rB   rm   countr*   r*   r+   rX      s    zWorker.purge_messagesTr0   celery.c                    s"   |  fddt| jjD S )Nc                 3   s,   | ]$} s| sn|rd | V  qdS )z  . N)r'   )r(   Ztaskinclude_builtinsint_r*   r+   r,      s   z"Worker.tasklist.<locals>.<genexpr>)rc   sortedr?   tasks)rB   rt   sepru   r*   rs   r+   tasklist   s    
zWorker.tasklistc                 C   sB   | j d u rd S | j tjkr>| j tjk}| j|d}tj|dS d S )N)rt   )rw   )rl   loggingINFODEBUGry   EXTRA_INFO_FMTformat)rB   rt   ry   r*   r*   r+   rf      s    
zWorker.extra_infoc                 C   s  | j }t| j}d|jpdt|}t|jtsbt	|j}|
drR|dd  }|d| d7 }| jr| j\}}d| d| d	}| j}t|ts|j}|d|d
d  d7 }d}	| jsd}	tj|t| jt jddt| j   | j j |tt |	|jjjdddd
 }
|r|t|
D ]N\}}zd t!| |
| g|
|< W n$ t"yv   d|
|  |
|< Y n0 q,d |
d S )Nz{}:{:#x}__main__zcelery.loaders    ()z{min=z, max=}.ONz/OFF (enable -E to monitor tasks in this worker)r   )microsecondF)indentindent_first)
r?   r@   	timestampversionZconninforesultsconcurrencyplatformeventsqueuesrn   z                r0   )#r?   r]   r   r~   mainidr\   loaderr   r   r'   Z	autoscalepool_cls
__module__splitZtask_eventsBANNERr   r@   r   nowreplacer   rm   as_uribackend	_platformr   Zamqpr   
splitlinesr$   rc   ARTLINES
IndexError)rB   rb   r?   r   Zapprr   maxminpoolr   Zbanneri_r*   r*   r+   rd      sJ    







zWorker.startup_infoc                 C   sX   | j jr|   | js0| j jr(t| nt| t| t| t| t	  t
  dS )z1Install platform specific tweaks and workarounds.N)r?   ZIS_macOS macOS_proxy_detection_workaroundrK   !install_HUP_not_supported_handlerinstall_worker_restart_handlerinstall_worker_term_handler install_worker_term_hard_handlerinstall_worker_int_handlerinstall_cry_handlerinstall_rdb_handler)rB   workerr*   r*   r+   r[      s    
zWorker.install_platform_tweaksc                 C   s   t jdd dS )z6See https://github.com/celery/celery/issues#issue/161.Zcelery_dummy_proxyZset_by_celerydN)osenviron
setdefaultrU   r*   r*   r+   r     s    z'Worker.macOS_proxy_detection_workaroundc                 C   s&   t jd| dt tj d| jdS )NZcelerydr   r   )rh   r@   )r   Zset_mp_process_titleZstrargvr5   argvr@   )rB   rh   r*   r*   r+   rZ     s
    zWorker.set_process_status)F)FNNN)N)Tr0   rr   )T)__name__r   __qualname____doc__rD   rQ   rV   rW   rY   ri   rS   rX   ry   rf   rd   r[   r   rZ   __classcell__r*   r*   rO   r+   r   U   s"   
  (


*r   TERMWarmc                    s4    fdd}t d |_|tj< d S )Nc                     s   t   ddlm} t jdkrR r,  td d tjjj	d t
 dkrtt|dd	d
  nW d    n1 s0    Y  d S )Nr   stateMainProcesszworker: z shutdown (MainProcess))r9   sighowexitcoder%   should_stopZshould_terminate)r   Cold)r   celery.workerr   r   _namer8   r	   Zworker_shutting_downrA   r@   r/   setattr)argsr   callbackexcr   r   r   r   r*   r+   _handle_request  s&    
z*_shutdown_handler.<locals>._handle_requestZworker_)r]   r   r   r	   )r   r   r   r   r   r   r   r*   r   r+   _shutdown_handler  s    r   SIGQUITSIGTERMr   )r   r   r   r   )r   r   r   c                  O   s   d S rR   r*   )akwr*   r*   r+   <lambda>@      r   c                 C   s   t d t| dd d S )Nz>worker: Hitting Ctrl+C again will terminate all running tasks!SIGINTr   )r8   r   )r   r*   r*   r+   	on_SIGINTC  s    r   r   )r   r   r   c                  O   s   d S rR   r*   )r   rC   r*   r*   r+   r   N  s    r   c                   C   s2   t tjtjtjg ttjtjgtj	  d S rR   )
r   Zclose_open_fdsr5   	__stdin__rg   r6   r   execv
executabler   r*   r*   r*   r+   _reload_current_workerR  s    r   SIGHUPc                 C   s   dd }|t j|< d S )Nc                  W   sH   t d tddtj d ddl}|t ddlm	} t
|_dS )z5Signal handler restarting the current python program.TzRestarting celery worker (rn   r   r   Nr   )r   r8   rc   r5   r   atexitregisterr   r   r   r   r   )r   r   r   r*   r*   r+   restart_worker_sig_handler[  s    
zBinstall_worker_restart_handler.<locals>.restart_worker_sig_handlerr   r	   )r   r   r   r*   r*   r+   r   Y  s    r   SIGUSR1c                 C   s   t rd S dd }|tj| < d S )Nc                  W   s4   t   tt  W d   n1 s&0    Y  dS )z=Signal handler logging the stack-trace of all active threads.N)r   r8   r   )r   r*   r*   r+   cry_handlerk  s    z(install_cry_handler.<locals>.cry_handler)is_pypyr   r	   )r   r   r*   r*   r+   r   f  s    r   CELERY_RDBSIGSIGUSR2c                 C   s"   dd }t j| r|tj|< d S )Nc                  W   sV   t  < ddlm}m} | r$| d n| j}|| W d   n1 sH0    Y  dS )z=Signal handler setting a rdb breakpoint at the current frame.r   )_frame	set_tracer%   N)r   Zcelery.contrib.rdbr   r   f_back)r   r   r   framer*   r*   r+   rdb_handleru  s    z(install_rdb_handler.<locals>.rdb_handler)r   r   getr   r	   )Zenvvarr   r   r*   r*   r+   r   r  s    r   c                    s    fdd}|t j < d S )Nc                    s:   t    tdj d W d    n1 s,0    Y  d S )NzH{sig} not supported: Restarting with {sig} is unstable on this platform!r   )r   r8   r~   )signumr   r   r*   r+   warn_on_HUP_handler  s    z>install_HUP_not_supported_handler.<locals>.warn_on_HUP_handlerr   )r   r   r   r*   r   r+   r     s    r   )r   )r   )r   r   )r   )Er   rz   r   r   r   r5   r   	functoolsr   Zbilliard.commonr   Zbilliard.processr   Zkombu.utils.encodingr   Zceleryr   r   r	   Z
celery.appr
   Zcelery.exceptionsr   r   Zcelery.loaders.appr   Zcelery.platformsr   r   r   r   Zcelery.utilsr   r   Zcelery.utils.debugr   Zcelery.utils.importsr   Zcelery.utils.logr   r   r   Zcelery.utils.textr   r   r   __all__r   r_   r'   Z	is_jythonhasattrr   r   r   r}   r/   r8   r   r   r   r   r   r   r   r   r   r   r   r*   r*   r*   r+   <module>   s~   
 F




  
