o
    ?Hh}                     @   s   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zd dlZW n e	y1   dZY nw dddZ
dd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dS )    NTc                 C   s$   |rt durt|  dS t|  dS )z2Terminate process and its descendants with SIGKILLN)psutil_kill_process_tree_with_psutil!_kill_process_tree_without_psutilprocess
use_psutil r   c/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/joblib/externals/loky/backend/utils.pykill_process_tree   s   r
   c                 C   s   t dt t| |d d S )NzKrecursive_terminate is deprecated in loky 3.2, use kill_process_treeinstead)r   )warningswarnDeprecationWarningr
   r   r   r   r	   recursive_terminate   s
   r   c              	   C   s   zt | jjdd}W n t jy   Y d S w |d d d D ]}z|  W q t jy1   Y qw z
t | j  W n
 t jyF   Y nw |   d S )NT)	recursive)r   ProcesspidchildrenNoSuchProcesskilljoin)r   descendants
descendantr   r   r	   r   !   s"   r   c                 C   sd   zt jdkrt| j nt| j W n ty+   t }t	d|  | 
  Y nw |   dS )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   detailsr   r   r	   r   6   s   


r   c              
   C   sX   zt jddddt| gd d W d S  t jy+ } z|jdvr  W Y d }~d S d }~ww )Ntaskkillz/Fz/Tz/PID)stderr)      )
subprocesscheck_outputstrCalledProcessError
returncode)r   er   r   r	   r   M   s   
r   c              
   C   sV   t tdtj}z	t| | W d S  ty* } z|jtjkr W Y d }~d S d }~ww )NSIGKILL)getattrsignalSIGTERMosr   OSErrorerrnoESRCH)r   kill_signalr+   r   r   r	   _kill\   s   r5   c              
   C   s   zt jddt| gddd}W n t jy+ } z|jdkr d}n W Y d}~nd}~ww | D ]
}t|}t| q0t|  dS )z@Recursively kill the descendants of a process before killing it.pgrepz-PNT)r#   text    )	r&   r'   r(   r)   r*   
splitlinesintr   r5   )r   children_pidsr+   cpidr   r   r	   r   l   s   


r   c                 C   sb   d}dd t |  D }|s-|dkr-|d8 }dd t |  D }td |s-|dkst|S )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.
       c                 S      g | ]
}|j d ur|j qS Nexitcode.0pr   r   r	   
<listcomp>   s    z3get_exitcodes_terminated_worker.<locals>.<listcomp>r   r8   c                 S   r?   r@   rA   rC   r   r   r	   rF      s
    
g?)listvaluestimesleep_format_exitcodes)	processespatience	exitcodesr   r   r	   get_exitcodes_terminated_worker   s   


	rO   c                 C   s    dd | D }dd | d S )z@Format a list of exit code with names of the signals if possiblec                 S   s(   g | ]}|d urt | d| dqS )N())_get_exitcode_name)rD   r+   r   r   r	   rF      s    "z%_format_exitcodes.<locals>.<listcomp>{z, })r   )rN   str_exitcodesr   r   r	   rK      s   rK   c                 C   sT   t jdkrdS | dk r"zdd l}||  jW S  ty!   Y dS w | dkr(dS dS )Nr   UNKNOWNr   r%   EXIT)r   r   r.   Signalsname
ValueError)rB   r.   r   r   r	   rR      s   
rR   )T)r0   r   rI   r2   r.   r   r&   r   r   ImportErrorr
   r   r   r   r   r5   r   rO   rK   rR   r   r   r   r	   <module>   s.    

	