U
    Z+d                     @   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mZmZ ddlmZ ddlmZ dd	lmZ d
ZedZdddddejdejfddZG dd dZdS )zBase Execution Pool.    N)ExceptionInfo)WorkerLostError)	safe_repr)WorkerShutdownWorkerTerminatereraise)timer2)
get_logger)truncate)BasePoolapply_targetzcelery.pool c	                 K   s   |si n|}|r"||p| |  z| ||}
W n |k
rF    Y n t k
rZ    Y n ttfk
rr    Y nj tk
r } zDz tttt|t d  W n tk
r   |t	  Y nX W 5 d}~X Y n
X ||
 dS )z#Apply function within pool context.   N)
	Exceptionr   r   BaseExceptionr   r   reprsysexc_infor   )targetargskwargscallbackZaccept_callbackpidgetpid	propagate	monotonic_retexcr   r   ;/tmp/pip-unpacked-wheel-ucduq0nd/celery/concurrency/base.pyr      s&    
"r   c                   @   s  e Zd ZdZdZdZdZejZdZ	dZ
dZdZdZdZdZdZd7d	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dd Zd8dd Zd!d" Zd#d$ Zd%d& Zd'd( Z d)d* Z!d+d, Z"d9d-d.Z#d/d0 Z$e%d1d2 Z&e%d3d4 Z'e%d5d6 Z(dS ):r   z
Task pool.   r      TFNr   c                 K   s(   || _ || _|| _|| _|| _|| _d S N)limitputlocksoptionsforking_enablecallbacks_propagateapp)selfr#   r$   r&   r'   r(   r%   r   r   r   __init__H   s    zBasePool.__init__c                 C   s   d S r"   r   r)   r   r   r   on_startQ   s    zBasePool.on_startc                 C   s   dS )NTr   r+   r   r   r   did_start_okT   s    zBasePool.did_start_okc                 C   s   d S r"   r   r+   r   r   r   flushW   s    zBasePool.flushc                 C   s   d S r"   r   r+   r   r   r   on_stopZ   s    zBasePool.on_stopc                 C   s   d S r"   r   )r)   Zloopr   r   r   register_with_event_loop]   s    z!BasePool.register_with_event_loopc                 O   s   d S r"   r   r)   r   r   r   r   r   on_apply`   s    zBasePool.on_applyc                 C   s   d S r"   r   r+   r   r   r   on_terminatec   s    zBasePool.on_terminatec                 C   s   d S r"   r   r)   Zjobr   r   r   on_soft_timeoutf   s    zBasePool.on_soft_timeoutc                 C   s   d S r"   r   r4   r   r   r   on_hard_timeouti   s    zBasePool.on_hard_timeoutc                 O   s   d S r"   r   r1   r   r   r   maintain_pooll   s    zBasePool.maintain_poolc                 C   s   t t|  dd S )Nz does not implement kill_jobNotImplementedErrortype)r)   r   signalr   r   r   terminate_jobo   s    zBasePool.terminate_jobc                 C   s   t t|  dd S )Nz does not implement restartr8   r+   r   r   r   restarts   s    zBasePool.restartc                 C   s   |    | j| _d S r"   )r/   	TERMINATE_stater+   r   r   r   stopw   s    zBasePool.stopc                 C   s   | j | _|   d S r"   )r>   r?   r3   r+   r   r   r   	terminate{   s    zBasePool.terminatec                 C   s"   t tj| _|   | j| _d S r"   )loggerisEnabledForloggingDEBUG_does_debugr,   RUNr?   r+   r   r   r   start   s    zBasePool.startc                 C   s   | j | _|   d S r"   )CLOSEr?   on_closer+   r   r   r   close   s    zBasePool.closec                 C   s   d S r"   r   r+   r   r   r   rJ      s    zBasePool.on_closec                 K   sb   |si n|}|sg n|}| j rBtd|tt|dtt|d | j|||f| j| jd|S )zEquivalent of the :func:`apply` built-in function.

        Callbacks should optimally return as soon as possible since
        otherwise the thread which handles the result will get blocked.
        z&TaskPool: Apply %s (args:%s kwargs:%s)i   )Zwaitforslotr'   )rF   rB   debugr
   r   r2   r$   r'   )r)   r   r   r   r%   r   r   r   apply_async   s     zBasePool.apply_asyncc                 C   s
   d| j iS )Nzmax-concurrencyr#   r+   r   r   r   	_get_info   s     zBasePool._get_infoc                 C   s   |   S r"   )rO   r+   r   r   r   info   s    zBasePool.infoc                 C   s   | j | jkS r"   )r?   rG   r+   r   r   r   active   s    zBasePool.activec                 C   s   | j S r"   rN   r+   r   r   r   num_processes   s    zBasePool.num_processes)NTTr   N)N)NN))__name__
__module____qualname____doc__rG   rI   r>   r   TimerZsignal_safeZis_greenr?   _poolrF   Zuses_semaphoreZtask_join_will_blockZbody_can_be_bufferr*   r,   r-   r.   r/   r0   r2   r3   r5   r6   r7   r<   r=   r@   rA   rH   rK   rJ   rM   rO   propertyrP   rQ   rR   r   r   r   r   r   .   sT       
	



r   )rV   rD   osr   timeZbilliard.einfor   Zbilliard.exceptionsr   Zkombu.utils.encodingr   Zcelery.exceptionsr   r   r   Zcelery.utilsr   Zcelery.utils.logr	   Zcelery.utils.textr
   __all__rB   r   r   r   r   r   r   r   r   <module>   s*      
