
    h                     (   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 jB                  e jD                  cZ!Z"d Z#d Z$ G d de      Z%y)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           
         t        j                  d       t        d       t        j                  j                  t
          t        j                  j                  t          t        j                  d|       | j                  j                          | j                  j                          t        j                  j                  d      xs d}|r#d|j                         v rd| j                   _        | j                   j%                  t'        t        j                  j                  d	d
      xs d
      |t)        t        j                  j                  dd            t+        t        j                  j                  d            |       t        j                  j                  d      rt-        j.                  | |       n@| j1                          t3        |        | j5                          | j6                  t,        _        d
dlm} | j<                  j?                         D ]!  \  }} |||| j                  ||       |_         # d
dl!m"} |jG                          t        jH                  jK                  d       y)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_states          V/var/www/Befach/backend/env/lib/python3.12/site-packages/celery/concurrency/prefork.pyr   r   &   s    I&d#_-./""9x@ JJJJ""$jjnn./74G47==?* %GGMM#bjjnn%7;@qArzz~~&;UCDbjjnn%@AB#	  %
 
zz~~12((h7zz-iioo'
d%dD#**h*-/ ( 4$$D$1    c                 H    t         j                  j                  d| |       y)z_Pool child process destructor.

    Dispatch the :signal:`worker_process_shutdown` signal.
    N)r(   pidexitcode)r
   worker_process_shutdownrG   )rO   rP   s     rL   r   r   R   s$    
 ##((x ) rM   c                   l     e Zd ZdZeZeZdZdZd Z	d Z
d Zd Zd Zd	 Zd
 Z fdZed        Z xZS )r   z$Multiprocessing Pool implementation.TNc           
      $   t        | j                          | j                  j                  dd      r| j                  n| j                  }| j
                  r | j
                  j                  j                  nd } |d| j                  t        t        dd|d| j                  x}| _        |j                  | _        |j                  | _        |j                  | _        |j                   | _        |j"                  | _        t%        |dd       | _        y )NthreadsTF)	processesinitializeron_process_exitenable_timeoutssynackproc_alive_timeoutflush )r   optionsr4   BlockingPoolr   r&   confworker_proc_alive_timeoutlimitr   r   _poolapply_asyncon_applymaintain_poolterminate_jobgrowshrinkgetattrr[   )selfr   rZ   Ps       rL   on_startzTaskPool.on_starte   s    t**+%)\\%5%5i%F!!YY 	 8<xxDHHMM33 	  .

*=.@.2%*1C. !%. 	.DJ ____FF	hhQ.
rM   c                 v    | j                   j                          | j                   j                  t               y N)rb   restartrc   r   rj   s    rL   ro   zTaskPool.restart}   s$    



t$rM   c                 6    | j                   j                         S rn   )rb   did_start_okrp   s    rL   rr   zTaskPool.did_start_ok   s    zz&&((rM   c                 ^    	 | j                   j                  } ||      S # t        $ r Y y w xY wrn   )rb   register_with_event_loopAttributeError)rj   loopregs      rL   rt   z!TaskPool.register_with_event_loop   s6    	**55C 4y  		s     	,,c                     | j                   _| j                   j                  t        t        fv r<| j                   j	                          | j                   j                          d| _         yyy)zGracefully stop the pool.N)rb   _stater   r   closejoinrp   s    rL   on_stopzTaskPool.on_stop   sO    ::!djj&7&7C<&GJJJJOODJ 'H!rM   c                 `    | j                   "| j                   j                          d| _         yy)zForce terminate the pool.N)rb   	terminaterp   s    rL   on_terminatezTaskPool.on_terminate   s(    ::!JJ  "DJ "rM   c                     | j                   9| j                   j                  t        k(  r| j                   j                          y y y rn   )rb   ry   r   rz   rp   s    rL   on_closezTaskPool.on_close   s5    ::!djj&7&73&>JJ '?!rM   c           	         t        | j                  dd       }t        |          }|j	                  | j
                  | j                  j                  D cg c]  }|j                   c}| j                  j                  xs d| j                  | j                  j                  xs d| j                  j                  xs df| |       ndd       |S c c}w )Nhuman_write_statszN/Ar   )zmax-concurrencyrU   zmax-tasks-per-childzput-guarded-by-semaphoretimeoutswrites)ri   rb   super	_get_infoupdatera   rO   _maxtasksperchildputlockssoft_timeouttimeout)rj   write_statsinfop	__class__s       rL   r   zTaskPool._get_info   s    djj*=tDw "#zz)-)9)9:A!%%:#'::#?#?#H5(,005A++0q2'2'>kmE
 	  ;s   C
c                 .    | j                   j                  S rn   )rb   
_processesrp   s    rL   num_processeszTaskPool.num_processes   s    zz$$$rM   )__name__
__module____qualname____doc__r   r   r^   uses_semaphorer   rl   ro   rr   rt   r|   r   r   r   propertyr   __classcell__)r   s   @rL   r   r   \   sV    .DLNK/0%) % %rM   r   )&r   r2   billiardr   billiard.commonr   r   billiard.poolr   r   r   r^   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   r\   rM   rL   <module>r      s    
 # 7 $ . % D  , ( ' 
C
  ,/ z	H	)2XP%x P%rM   