
    xai                     D   d Z ddlZddl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 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$jJ                  e$jL                  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)get_event_loop)	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          l/var/www/html/BankruptcyAI-uat/bankruptcy-ai/venv/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_shutdownrH   )rP   rQ   s     rM   r   r   U   s$    
 ##((x ) rN   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   optionsr5   BlockingPoolr   r'   confworker_proc_alive_timeoutlimitr   r   _poolapply_asyncon_applymaintain_poolterminate_jobgrowshrinkgetattrr\   )selfr   r[   Ps       rM   on_startzTaskPool.on_starth   s    t**+%)\\%5%5i%F!!YY 	 8<xxDHHMM33 	  .

*=.@.2%*1C. !%. 	.DJ ____FF	hhQ.
rN   c                 v    | j                   j                          | j                   j                  t               y N)rc   restartrd   r   rk   s    rM   rp   zTaskPool.restart   s$    



t$rN   c                 6    | j                   j                         S ro   )rc   did_start_okrq   s    rM   rs   zTaskPool.did_start_ok   s    zz&&((rN   c                 ^    	 | j                   j                  } ||      S # t        $ r Y y w xY wro   )rc   register_with_event_loopAttributeError)rk   loopregs      rM   ru   z!TaskPool.register_with_event_loop   s6    	**55C 4y  		s     	,,c                    | j                   | j                   j                  t        t        fv r| j                   j	                          t               t        j                         fd}t        j                  |dd      }|j                          	 | j                   j                          j                          |j                  d       |j                         r0t        j                  d       n| j                   j                          d| _         yyy# j                          |j                  d       |j                         rt        j                  d       w w xY w)	zGracefully stop the pool.Nc                      j                         s8	  j                          t        j                  d       j                         s7y y # t        $ r t        j	                  dd       Y Jw xY w)Nz2Exception in timer thread during prefork on_stop()T)exc_infog      ?)is_setfire_timers	Exceptionloggerwarningtimesleep)hubshutdown_events   rM   fire_timers_loopz*TaskPool.on_stop.<locals>.fire_timers_loop   sa    ,335OO- 

3 -335  ) "NN T)- + s   A  A.-A.Tzprefork-timer-shutdown)targetdaemonrJ   g      ?)timeoutz;Timer thread in prefork on_stop() did not terminate cleanly)rc   _stater   r   closer	   	threadingEventThreadstartjoinsetis_aliver   r   )rk   r   timer_threadr   r   s      @@rM   on_stopzTaskPool.on_stop   s)   ::!djj&7&7C<&GJJ
 !"C!*!2(  )//+1 
 ""$	JJOO%"&&( %%c%2#,,.Y 

!DJY 'H!D #&&( %%c%2#,,.Y /s   D! !A
E+c                 `    | j                   "| j                   j                          d| _         yy)zForce terminate the pool.N)rc   	terminaterq   s    rM   on_terminatezTaskPool.on_terminate   s(    ::!JJ  "DJ "rN   c                     | j                   9| j                   j                  t        k(  r| j                   j                          y y y ro   )rc   r   r   r   rq   s    rM   on_closezTaskPool.on_close   s5    ::!djj&7&73&>JJ '?!rN   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-concurrencyrV   zmax-tasks-per-childzput-guarded-by-semaphoretimeoutswrites)rj   rc   super	_get_infoupdaterb   rP   _maxtasksperchildputlockssoft_timeoutr   )rk   write_statsinfop	__class__s       rM   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 ro   )rc   
_processesrq   s    rM   num_processeszTaskPool.num_processes   s    zz$$$rN   )__name__
__module____qualname____doc__r   r   r_   uses_semaphorer   rm   rp   rs   ru   r   r   r   r   propertyr   __classcell__)r   s   @rM   r   r   _   sW    .DLNK/0%).` % %rN   r   )*r   r3   r   r   billiardr   billiard.commonr   r   billiard.poolr   r   r   r_   kombu.asynchronousr	   celeryr
   r   celery._stater   r   
celery.appr   celery.concurrency.baser   celery.utils.functionalr   celery.utils.logr   asynpoolr   __all__r,   r.   r   r   r   debugr   r   r   r]   rN   rM   <module>r      s    
   # 7 $ . - % D  , ( ' 
C
  ,/ z	H	)2Xy%x y%rN   