a
    xd0                     @   s   d Z ddlZddlmZ ddlmZmZ ddlmZm	Z	 ddlm
Z ddl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 ddlmZ dZh dZerdehZndhZeeZ e j!e j" Z!Z"dd Z#dd Z$G dd deZ%dS )zKPrefork execution pool.

Pool implementation using :mod:`multiprocessing`.
    N)forking_enable)REMAP_SIGTERMTERM_SIGNAME)CLOSERUN)Pool)	platformssignals)_set_task_join_will_blockset_default_app)trace)BasePool)noop)
get_logger   )AsynPool)TaskPoolprocess_initializerprocess_destructor>   SIGHUPSIGUSR1SIGTTOUSIGTTINSIGTERMSIGINTc                 C   sB  t d tjjt  tjjt  tjd|d | j	  | j
  tjdpPd}|rjd| v rjd| j_| jjttjdd	pd	|ttjd
dttjd|d tjdrt| | n |   t|  |   | jt_d	dlm} | j D ]\}}|||| j|| d|_qd	dl m!} |"  tj#j$dd dS )zPool child process initializer.

    Initialize the child pool process to ensure the correct
    app instance is used and things like logging works.
    TZceleryd)hostnameZCELERY_LOG_FILENz%iFZCELERY_LOG_LEVELr   ZCELERY_LOG_REDIRECTZCELERY_LOG_REDIRECT_LEVELZFORKED_BY_MULTIPROCESSING)build_tracer)app)state)sender)%r
   r   r	   resetWORKER_SIGRESETignoreWORKER_SIGIGNOREZset_mp_process_titleloaderZinit_workerZinit_worker_processosenvirongetlowerlogZalready_setupsetupintboolstrr   Zsetup_worker_optimizationsZset_currentr   finalizeZ_tasksZcelery.app.tracer   ZtasksitemsZ	__trace__Zcelery.workerr   Zreset_stateZworker_process_initsend)r   r   logfiler   nameZtaskZworker_state r3   R/var/www/html/Ranjet/env/lib/python3.9/site-packages/celery/concurrency/prefork.pyr   &   s:    


r   c                 C   s   t jjd| |d dS )z_Pool child process destructor.

    Dispatch the :signal:`worker_process_shutdown` signal.
    N)r   pidexitcode)r	   Zworker_process_shutdownr0   )r5   r6   r3   r3   r4   r   P   s    r   c                   @   sl   e Zd ZdZeZeZdZ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edd ZdS )r   z$Multiprocessing Pool implementation.TNc              	   C   s   t | j  | jddr| jn| j}| jr4| jjjnd }|f | jt	t
dd|d| j }| _|j| _|j| _|j| _|j| _|j| _t|dd | _d S )NthreadsTF)	processesZinitializerZon_process_exitZenable_timeoutsZsynackproc_alive_timeoutflush)r   optionsr'   BlockingPoolr   r   confZworker_proc_alive_timeoutlimitr   r   _poolapply_asyncZon_applyZmaintain_poolZterminate_jobZgrowshrinkgetattrr:   )selfr   r9   Pr3   r3   r4   on_startc   s,    
	zTaskPool.on_startc                 C   s   | j   | j t d S N)r?   restartr@   r   rC   r3   r3   r4   rG   {   s    
zTaskPool.restartc                 C   s
   | j  S rF   )r?   did_start_okrH   r3   r3   r4   rI      s    zTaskPool.did_start_okc                 C   s*   z| j j}W n ty    Y d S 0 ||S rF   )r?   register_with_event_loopAttributeError)rC   Zloopregr3   r3   r4   rJ      s
    z!TaskPool.register_with_event_loopc                 C   s8   | j dur4| j jttfv r4| j   | j   d| _ dS )zGracefully stop the pool.N)r?   _stater   r   closejoinrH   r3   r3   r4   on_stop   s    

zTaskPool.on_stopc                 C   s   | j dur| j   d| _ dS )zForce terminate the pool.N)r?   	terminaterH   r3   r3   r4   on_terminate   s    

zTaskPool.on_terminatec                 C   s$   | j d ur | j jtkr | j   d S rF   )r?   rM   r   rN   rH   r3   r3   r4   on_close   s    zTaskPool.on_closec                 C   s\   t | jdd }| jdd | jjD | jjp,d| j| jjp:d| jjpDdf|d urT| nddS )NZhuman_write_statsc                 S   s   g | ]
}|j qS r3   )r5   ).0pr3   r3   r4   
<listcomp>       z&TaskPool._get_info.<locals>.<listcomp>zN/Ar   )zmax-concurrencyr8   zmax-tasks-per-childzput-guarded-by-semaphoreZtimeoutsZwrites)rB   r?   r>   Z_maxtasksperchildZputlocksZsoft_timeouttimeout)rC   write_statsr3   r3   r4   	_get_info   s    


zTaskPool._get_infoc                 C   s   | j jS rF   )r?   Z
_processesrH   r3   r3   r4   num_processes   s    zTaskPool.num_processes)__name__
__module____qualname____doc__r   r   r<   Zuses_semaphorerY   rE   rG   rI   rJ   rP   rR   rS   rZ   propertyr[   r3   r3   r3   r4   r   Z   s   r   )&r_   r%   Zbilliardr   Zbilliard.commonr   r   Zbilliard.poolr   r   r   r<   Zceleryr   r	   Zcelery._stater
   r   Z
celery.appr   Zcelery.concurrency.baser   Zcelery.utils.functionalr   Zcelery.utils.logr   Zasynpoolr   __all__r!   r#   r\   loggerwarningdebugr   r   r   r3   r3   r3   r4   <module>   s,   
*
