
    g}                         d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZ	 d dlZddZ
ddZd Zd Zd Zd Zd Zd	 Zd
 Zd Zy# e	$ r dZY *w xY w)    Nc                 B    |rt         t        |        yt        |        y)z2Terminate process and its descendants with SIGKILLN)psutil_kill_process_tree_with_psutil!_kill_process_tree_without_psutilprocess
use_psutils     X/var/www/openai/venv/lib/python3.12/site-packages/joblib/externals/loky/backend/utils.pykill_process_treer      s    f(&w/)'2    c                 R    t        j                  dt               t        | |       y )NzKrecursive_terminate is deprecated in loky 3.2, use kill_process_treeinstead)r	   )warningswarnDeprecationWarningr   r   s     r
   recursive_terminater      s"    MM	
 g*5r   c                    	 t        j                  | j                        j                  d      }|d d d   D ]  }	 |j                           	 t        j                  | j                        j                          | j                          y # t         j                  $ r Y y w xY w# t         j                  $ r Y w xY w# t         j                  $ r Y Xw xY w)NT)	recursive)r   ProcesspidchildrenNoSuchProcesskilljoin)r   descendants
descendants      r
   r   r   !   s    nnW[[1::T:J "$B$'
	OO (w{{#((* LLN   ## 		
  s4   /B B'-C  B$#B$'B=<B= CCc                 8   	 t         j                  dk(  rt        | j                         nt	        | j                         | j                          y# t
        $ r? t        j                         }t        j                  d|        | j                          Y Xw xY w)z(Terminate a process and its descendants.win32zqFailed to kill subprocesses on this platform. Please installpsutil: https://github.com/giampaolo/psutil
Details:
N)sysplatform_windows_taskkill_process_treer   _posix_recursive_kill	Exception	traceback
format_excr   r   r   r   )r   detailss     r
   r   r   6   s{    <<7"*7;;7!'++. LLN  &&( 	#	
 	s   >A ABBc           	          	 t        j                  ddddt        |       gd        y # t         j                  $ r}|j                  dvr Y d }~y d }~ww xY w)Ntaskkillz/Fz/Tz/PID)stderr)      )
subprocesscheck_outputstrCalledProcessError
returncode)r   es     r
   r!   r!   M   sW    	tVSX6t	
 (( <<z)  *s   %( AAAc                     t        t        dt        j                        }	 t        j                  | |       y # t
        $ r(}|j                  t        j                  k7  r Y d }~y d }~ww xY w)NSIGKILL)getattrsignalSIGTERMosr   OSErrorerrnoESRCH)r   kill_signalr1   s      r
   _killr<   \   sS    
 &)V^^<K
[!  77ekk! "	s   8 	A)A$$A)c                     	 t        j                  ddt        |       gdd      }|j                         D ]  }t        |      }t        |        t        |        y# t         j                  $ r}|j                  dk(  rd}n Y d}~bd}~ww xY w)z@Recursively kill the descendants of a process before killing it.pgrepz-PNT)r)   text    )	r,   r-   r.   r/   r0   
splitlinesintr"   r<   )r   children_pidsr1   cpids       r
   r"   r"   l   s    	"//dCH%d
 ((*4yd# + 
#J (( <<1M s   $A B0BBc                 t   d}t        | j                               D cg c]  }|j                  |j                   }}|sc|dkD  r^|dz  }t        | j                               D cg c]  }|j                  |j                   }}t        j                  d       |s|dkD  r^t        |      S c c}w c c}w )zReturn a formatted string with the exitcodes of terminated workers.

    If necessary, wait (up to .25s) for the system to correctly set the
    exitcode of one terminated worker.
       r   r@   g?)listvaluesexitcodetimesleep_format_exitcodes)	processespatiencep	exitcodess       r
   get_exitcodes_terminated_workerrR      s     H !!1!1!344q

8N

4   HqLA )**,-
-zz% JJ- 	 

 	

4 HqL Y''

s   B0B0'B5c                 |    | D cg c]  }|t        |       d| d }}ddj                  |      z   dz   S c c}w )z@Format a list of exit code with names of the signals if possible(){z, })_get_exitcode_namer   )rQ   r1   str_exitcodess      r
   rM   rM      sX     2;1:Aama 
!1#Q'   =))C//s   99c                     t         j                  dk(  ry| dk  r"	 dd l} |j                  |        j                  S | dk7  ryy# t
        $ r Y yw xY w)Nr   UNKNOWNr   r+   EXIT)r   r    r5   Signalsname
ValueError)rJ   r5   s     r
   rX   rX      s`    
||w !|	!6>>8),111 
S   		s    A 	AA)T)r7   r   rK   r9   r5   r   r,   r$   r   ImportErrorr   r   r   r   r!   r<   r"   rR   rM   rX    r   r
   <module>rb      sn    	 
      
36*. *(40o  Fs   A AA