U
    Z+d1                  %   @   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                   @   s   e Zd ZdZdZdd ZdS )
CeleryBeatzCelery Beat flag.Z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appZ
IS_WINDOWSfailselfvalueparamctx r   5/tmp/pip-unpacked-wheel-ucduq0nd/celery/bin/worker.pyconvert   s    
zCeleryBeat.convertN__name__
__module____qualname____doc__namer   r   r   r   r   r      s   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   Zget_available_pool_names)r   	__class__r   r   r)   *   s    zWorkersPool.__init__c                    sh   t |trt|tr|S t |||}|jjjj	}|dkrL|rLt
|}nt
|}|sdt
|}|S )Nprefork)
isinstancetype
issubclassr
   r(   r   r   r   confworker_poolr   Zget_implementation)r   r   r   r   r1   r*   r   r   r   .   s    

zWorkersPool.convert)r!   r"   r#   r$   r%   r)   r   __classcell__r   r   r*   r   r&   %   s   r&   c                   @   s   e Zd ZdZdZdd ZdS )HostnamezHostname option.hostnamec                 C   s   t t|S N)r   r   r   r   r   r   r   I   s    zHostname.convertNr    r   r   r   r   r3   D   s   r3   c                   @   s   e Zd ZdZdZdd ZdS )	AutoscalezAutoscaling parameter.z<min workers>, <max workers>c              	   C   s   | d}t|dkr,| dt| d t|dkrtzt|d df}W n& tk
rr   | d| d Y nX zttttt|W S  tk
r   | d|	d d Y nX d S )	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   R   s    
zAutoscale.convertNr    r   r   r   r   r6   M   s   r6   
C_FAKEFORKFc              
   C   s   t rdn|}t||}t|||||||dd z0|
dk	r>|
} t| | g|  tW W  5 Q R  S  tk
r   |	dkrddlm} |}	|	j	j
d||d tjd	d
| g| dd t Y W  5 Q R  S X W 5 Q R X dS )zDetach program by argv.r9   F)Zafter_forkersNr   )current_appERROR)r4   zCan't exec %r T)exc_info)rC   r   r   osexecvr   	ExceptionceleryrD   logZsetup_logging_subsystemloggercriticalrB   r   )pathargvlogfilepidfileuidgidumaskworkdirZfaker   
executabler4   rD   r   r   r   detachn   s.    
  rX   Zallow_extra_argsT)clsZcontext_settingsz-nz
--hostnamezWorker Optionsz]Set custom hostname (e.g., 'w1@%%h').  Expands: %%h (hostname), %%n (name) and %%d, (domain).)defaultrY   r.   
help_grouphelp-D--detachz%Start worker as a background process.)rY   is_flagrZ   r[   r\   z-Sz	--statedbc                 C   s   |p| j jjjS r5   )r   r   r0   Zworker_state_dbr   _r   r   r   r   <lambda>   s    rb   zPPath to the state database. The extension '.db' may be appended to the filename.)rY   r.   callbackr[   r\   z-lz
--loglevelWARNINGzLogging level.optimizationz-OrZ   )rZ   ZfairzApply optimization profile.z--prefetch-multiplierz<prefetch multiplier>c                 C   s   |p| j jjjS r5   )r   r   r0   Zworker_prefetch_multiplierr`   r   r   r   rb      s    z>Set custom prefetch multiplier value for this worker instance.)r.   metavarrc   rY   r[   r\   z-cz--concurrencyz<concurrency>c                 C   s   |p| j jjjS r5   )r   r   r0   Zworker_concurrencyr`   r   r   r   rb      s    zPool OptionszlNumber of child processes processing the queue.  The default is the number of CPUs available on your system.z-Pz--poolr,   zPool implementation.)rZ   r.   rY   r[   r\   z-Ez--task-eventsz--eventszdSend task-related events that can be captured by monitors like celery events, celerymon, and others.)r_   rZ   rY   r[   r\   z--time-limitz;Enables a hard time limit (in seconds int/float) for tasks.)r.   rY   r[   r\   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)r_   rY   r[   z--queuesz-Q)r.   rY   r[   z--exclude-queuesz-Xz	--includez-Iz--without-gossipZFeaturesz--without-minglez--without-heartbeatz--heartbeat-intervalz--autoscalez-Bz--beatzEmbedded Beat Options)r.   rY   r_   r[   z-sz--schedule-filenamez
--schedulec                 C   s   |p| j jjjS r5   )r   r   r0   Zbeat_schedule_filenamer`   r   r   r   rb   #  s    )rc   rY   r[   z--scheduler)rY   r[   c
                 K   sx  z0| j j}| jrbz|j| jdd W n: ttfk
r` } ztjd| | dW 5 d}~X Y nX |
ddrdd	gt	j
d
d  }d|kr|d d|kr|d tt	j||||||
dd|
dd||
dd|dW S t||d |jf ||||t||t|	|| j j| j jd|
}|  |jW S  tk
rr } z | j |jd  | d
 W 5 d}~X Y nX dS )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   NrX   Fz-mrK   r9   r^   r]   rU   rV   rW   )	rQ   rR   rS   rT   rU   rV   r   rW   r4   )rS   rT   )r4   pool_clsloglevelrQ   rR   statedbno_colorquietr   )r   r   argsZconfig_from_cmdlineKeyErrorr=   clickZ
UsageErrorgetsysrP   removerX   rW   r   ZWorkerr   rl   rm   startexitcoder   errorexit)r   r4   ri   r   rS   rT   rj   rQ   rR   rk   kwargserP   rg   r   r   r   rg      s^     1

 


  rg   )
NNNNNNFNNN)	NNNNNNNNN)4r$   rH   rr   rp   r   Zclick.typesr   rK   r   Zcelery.bin.baser   r   r   r   r	   Zcelery.concurrency.baser
   Zcelery.exceptionsr   Zcelery.platformsr   r   r   r   Zcelery.utils.logr   Zcelery.utils.nodenamesr   r   r   r!   rM   r   ZChoicer&   r3   r6   ZCELERY_BEATZWORKERS_POOLHOSTNAMEZ	AUTOSCALEenvironrq   rC   rX   commandoptionPathr<   floatZpass_contextrg   r   r   r   r   <module>   s  	             

			
        