o
    DfV2                      @   s  d 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
mZmZmZmZ ddlmZ ddlmZ dd	lmZmZmZmZ dd
lmZ ddlmZmZmZ eeZG dd deZ G dd dej!Z"G dd deZ#G dd deZ$e  Z%e" Z&e# Z'e$ Z(ej)*dZ+			doddZ,ej-eddidej.ddeedee'dddej.d d!edddd"d#ej.d$d%ee/ d&d' dd(d)ej.d*d+d,eedd-dej.d.d/d0ee!d1dd2dej.d3e0d4d5d' edd6d7ej.d8d9e0d:d;d' ed<d=d7ej.d>d?d@e&ed<dAdBej.dCdDdEdded<dFdGej.dHe1ed<dIdJej.dKe1ed<dLdJej.dMe0ed<dNdJej.dOe0ed<dPdJej.dQdRdedSdTej.dUdVe
edSdWej.dXdYe
edSdWej.dZd[e
edSdWej.d\ded]dTej.d^ded]dTej.d_ded]dTej.d`e0ed]dWej.dae(ed]dWej.dbdce%eddddeej.dfdgdhdid' edddjej.dkedddlej2e		dpdmdnZ3dS )qz/Program used to start a Celery worker instance.    N)	ParamType)StringParamType)concurrency)COMMA_SEPARATED_LIST	LOG_LEVELCeleryDaemonCommandCeleryOptionhandle_preload_options)BasePool)SecurityError)
EX_FAILUREEX_OKdetachedmaybe_drop_privileges)
get_logger)default_nodenamehost_formatnode_formatc                   @      e Zd ZdZdZdd ZdS )
CeleryBeatzCelery Beat flag.beatc                 C   s   |j jjr|r| d |S )NzR-B option does not work on Windows.  Please run celery beat as a separate service.)objapp
IS_WINDOWSfailselfvalueparamctx r    J/home/ubuntu/webapp/venv/lib/python3.10/site-packages/celery/bin/worker.pyconvert   s   
zCeleryBeat.convertN__name__
__module____qualname____doc__namer"   r    r    r    r!   r          r   c                       s0   e Zd ZdZdZ fddZ fddZ  ZS )WorkersPoolzWorkers pool option.poolc                    s   t  t  dS )z=Initialize the workers pool option with the relevant choices.N)super__init__r   get_available_pool_names)r   	__class__r    r!   r-   (   s   zWorkersPool.__init__c                    sj   t |trt|tr|S t |||}|jjjj	}|dkr'|r't
|}|S t
|}|s3t
|}|S )Nprefork)
isinstancetype
issubclassr
   r,   r"   r   r   confworker_poolr   get_implementation)r   r   r   r   r6   r/   r    r!   r"   ,   s   


zWorkersPool.convert)r$   r%   r&   r'   r(   r-   r"   __classcell__r    r    r/   r!   r*   #   s
    r*   c                   @   r   )HostnamezHostname option.hostnamec                 C   s   t t|S N)r   r   r   r    r    r!   r"   G   s   zHostname.convertNr#   r    r    r    r!   r9   B   r)   r9   c                   @   r   )	AutoscalezAutoscaling parameter.z<min workers>, <max workers>c              	   C   s   | d}t|dkr| dt| d t|dkr9z
t|d df}W n ty8   | d| d Y nw zttttt|W S  ty[   | d|	d d Y d S w )	N,   z9Expected two comma separated integers or one integer.Got z	 instead.   r   zExpected an integer. Got z*Expected two comma separated integers.Got )
splitlenr   int
ValueErrortuplereversedsortedmapjoinr   r    r    r!   r"   P   s$   

zAutoscale.convertNr#   r    r    r    r!   r<   K   r)   r<   
C_FAKEFORKFc              
   C   s   t rdn|}t||}t|||||||ddP z|
dur|
} t| | g|  tW W  d   S  tyf   |	du rDddlm} |}	|	j	j
d||d tjd	d
| g| dd t Y W  d   S w 1 sjw   Y  dS )zDetach program by argv.r?   F)after_forkersNr   )current_appERROR)r:   zCan't exec %r T)exc_info)rI   r   r   osexecvr   	ExceptionceleryrK   logsetup_logging_subsystemloggercriticalrH   r   )pathargvlogfilepidfileuidgidumaskworkdirfaker   
executabler:   rK   r    r    r!   detachl   s2   
ra   allow_extra_argsT)clscontext_settingsz-nz
--hostnamezWorker Optionsz]Set custom hostname (e.g., 'w1@%%h').  Expands: %%h (hostname), %%n (name) and %%d, (domain).)defaultrc   r3   
help_grouphelp-D--detachz%Start worker as a background process.)rc   is_flagre   rf   rg   z-Sz	--statedbc                 C      |p| j jjjS r;   )r   r   r5   worker_state_dbr   _r   r    r    r!   <lambda>      ro   zPPath to the state database. The extension '.db' may be appended to the filename.)rc   r3   callbackrf   rg   z-lz
--loglevelWARNINGzLogging level.z-Oz--optimizationre   )re   fairzApply optimization profile.z--prefetch-multiplierz<prefetch multiplier>c                 C   rk   r;   )r   r   r5   worker_prefetch_multiplierrm   r    r    r!   ro      rp   z>Set custom prefetch multiplier value for this worker instance.)r3   metavarrq   rc   rf   rg   z-cz--concurrencyz<concurrency>c                 C   rk   r;   )r   r   r5   worker_concurrencyrm   r    r    r!   ro      rp   zPool OptionszlNumber of child processes processing the queue.  The default is the number of CPUs available on your system.z-Pz--poolr1   zPool implementation.)re   r3   rc   rf   rg   z-Ez--task-eventsz--eventszdSend task-related events that can be captured by monitors like celery events, celerymon, and others.)rj   re   rc   rf   rg   z--time-limitz;Enables a hard time limit (in seconds int/float) for tasks.)r3   rc   rf   rg   z--soft-time-limitz;Enables a soft time limit (in seconds int/float) for tasks.z--max-tasks-per-childzfMaximum number of tasks a pool worker can execute before it's terminated and replaced by a new worker.z--max-memory-per-childa  Maximum amount of resident memory, in KiB, that may be consumed by a child process before it will be replaced by a new one.  If a single task causes a child process to exceed this limit, the task will be completed and the child process will be replaced afterwards.
Default: no limit.z--purgez	--discardzQueue Options)rj   rc   rf   z--queuesz-Q)r3   rc   rf   z--exclude-queuesz-Xz	--includez-Iz--without-gossipFeaturesz--without-minglez--without-heartbeatz--heartbeat-intervalz--autoscalez-Bz--beatzEmbedded Beat Options)r3   rc   rj   rf   z-sz--schedule-filenamez
--schedulec                 C   rk   r;   )r   r   r5   beat_schedule_filenamerm   r    r    r!   ro   !  rp   )rq   rc   rf   z--scheduler)rc   rf   c
                 K   s  z| j j}| jr+z
|j| jdd W n ttfy* } z
tjd| | dd}~ww |
ddr}dd	gt	j
d
d  }d|v rE|d d|v rN|d d|v rW|d d|v r`|d tt	j||||||
dd|
dd||
dd|dW S t||d |jd||||t||t|	|| j j| j jd|
}|  | |j W dS  ty } z| j |jd  | d
 W Y d}~dS d}~ww )a*  Start worker instance.

    
    Examples
    --------

    
    $ celery --app=proj worker -l INFO
    $ celery -A proj worker -l INFO -Q hipri,lopri
    $ celery -A proj worker --concurrency=4
    $ celery -A proj worker --concurrency=1000 -P eventlet
    $ celery worker --autoscale=10,0

    worker)	namespacez?Unable to parse extra configuration from command line.
Reason: )r   Nra   Fz-mrR   r?   ri   rh   z--uidz--gidr]   r^   r`   )	rY   rZ   r[   r\   r]   r^   r   r`   r:   )r[   r\   )r:   pool_clsloglevelrY   rZ   statedbno_colorquietr   r    )r   r   argsconfig_from_cmdlineKeyErrorrC   click
UsageErrorgetsysrX   removera   r`   r   Workerr   r~   r   startexitexitcoder   error)r   r:   r{   r   r[   r\   r|   rY   rZ   r}   kwargserX   ry   r    r    r!   ry      sl    4






ry   )
NNNNNNFNNN)	NNNNNNNNN)4r'   rO   r   r   r   click.typesr   rR   r   celery.bin.baser   r   r   r   r	   celery.concurrency.baser
   celery.exceptionsr   celery.platformsr   r   r   r   celery.utils.logr   celery.utils.nodenamesr   r   r   r$   rU   r   Choicer*   r9   r<   CELERY_BEATWORKERS_POOLHOSTNAME	AUTOSCALEenvironr   rI   ra   commandoptionPathrB   floatpass_contextry   r    r    r    r!   <module>   s   	

			
F