o
    Df                     @   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r]d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SIGTERMSIGTTINSIGTTOUSIGUSR1SIGINTc                 C   sL  t d td t jjt  t jjt  t jd|d | j	
  | j	  tjdp-d}|r:d| v r:d| j_| jjttjd	d
pFd
|ttjddttjd|d tjdrht| | 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.
    SIGKILLTceleryd)hostnameCELERY_LOG_FILENz%iFCELERY_LOG_LEVELr   CELERY_LOG_REDIRECTCELERY_LOG_REDIRECT_LEVELFORKED_BY_MULTIPROCESSING)build_tracer)app)state)sender)&r   set_pdeathsigr
   r	   resetWORKER_SIGRESETignoreWORKER_SIGIGNOREset_mp_process_titleloaderinit_workerinit_worker_processosenvirongetlowerlogalready_setupsetupintboolstrr   setup_worker_optimizationsset_currentr   finalize_taskscelery.app.tracer#   tasksitems	__trace__celery.workerr%   reset_stateworker_process_initsend)r$   r   logfiler#   nametaskworker_state rJ   S/home/ubuntu/webapp/venv/lib/python3.10/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	   worker_process_shutdownrE   )rL   rM   rJ   rJ   rK   r   R   s   
r   c                       st   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 fddZedd Z  ZS )r   z$Multiprocessing Pool implementation.TNc              	   C   s   t | j  | jddr| jn| j}| jr| jjjnd }|d| jt	t
dd|d| j }| _|j| _|j| _|j| _|j| _|j| _t|dd | _d S )NthreadsTF)	processesinitializeron_process_exitenable_timeoutssynackproc_alive_timeoutflushrJ   )r   optionsr2   BlockingPoolr   r$   confworker_proc_alive_timeoutlimitr   r   _poolapply_asyncon_applymaintain_poolterminate_jobgrowshrinkgetattrrV   )selfr   rU   PrJ   rJ   rK   on_starte   s,   
	zTaskPool.on_startc                 C   s   | j   | j t d S N)r\   restartr]   r   rd   rJ   rJ   rK   rh   }   s   
zTaskPool.restartc                 C   s
   | j  S rg   )r\   did_start_okri   rJ   rJ   rK   rj      s   
zTaskPool.did_start_okc                 C   s(   z	| j j}W ||S  ty   Y d S w rg   )r\   register_with_event_loopAttributeError)rd   loopregrJ   rJ   rK   rk      s   
z!TaskPool.register_with_event_loopc                 C   s@   | j dur| j jttfv r| j   | j   d| _ dS dS dS )zGracefully stop the pool.N)r\   _stater   r   closejoinri   rJ   rJ   rK   on_stop   s
   


zTaskPool.on_stopc                 C   s"   | j dur| j   d| _ dS dS )zForce terminate the pool.N)r\   	terminateri   rJ   rJ   rK   on_terminate   s   


zTaskPool.on_terminatec                 C   s,   | j d ur| j jtkr| j   d S d S d S rg   )r\   ro   r   rp   ri   rJ   rJ   rK   on_close   s   zTaskPool.on_closec              	      sp   t | jdd }t  }|| jdd | jjD | jjpd| j| jjp$d| jj	p)df|d ur1| ndd |S )Nhuman_write_statsc                 S   s   g | ]}|j qS rJ   )rL   ).0prJ   rJ   rK   
<listcomp>   s    z&TaskPool._get_info.<locals>.<listcomp>zN/Ar   )zmax-concurrencyrP   zmax-tasks-per-childzput-guarded-by-semaphoretimeoutswrites)
rc   r\   super	_get_infoupdater[   _maxtasksperchildputlockssoft_timeouttimeout)rd   write_statsinfo	__class__rJ   rK   r}      s   



	zTaskPool._get_infoc                 C   s   | j jS rg   )r\   
_processesri   rJ   rJ   rK   num_processes   s   zTaskPool.num_processes)__name__
__module____qualname____doc__r   r   rX   uses_semaphorer   rf   rh   rj   rk   rr   rt   ru   r}   propertyr   __classcell__rJ   rJ   r   rK   r   \   s     r   )&r   r0   billiardr   billiard.commonr   r   billiard.poolr   r   r   rX   celeryr   r	   celery._stater
   r   
celery.appr   celery.concurrency.baser   celery.utils.functionalr   celery.utils.logr   asynpoolr   __all__r)   r+   r   loggerwarningdebugr   r   r   rJ   rJ   rJ   rK   <module>   s.    
,
