U
    ªº|e}  ã                   @   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	k
rd   dZY nX 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k	rt| ƒ n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   ú`/var/www/website-v5/atlas_env/lib/python3.8/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k
r0   Y d S X |d d d… D ](}z| ¡  W q@ t jk
rf   Y q@X q@zt  | j¡ ¡  W n t jk
r”   Y nX |  ¡  d S )NT)Ú	recursiveéÿÿÿÿ)r   ÚProcessÚpidÚchildrenZNoSuchProcessÚkillÚjoin)r   ZdescendantsZ
descendantr   r   r	   r   !   s    r   c                 C   sf   z$t jdkrt| jƒ n
t| jƒ W n4 tk
rX   t ¡ }t 	d|› �¡ |  
¡  Y nX |  ¡  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   sV   z t jddddt| ƒgd d� W n0 t jk
rP } z|jdkr@‚ W 5 d }~X Y nX d S )NZtaskkillz/Fz/Tz/PID)Ústderr)é€   éÿ   )Ú
subprocessÚcheck_outputÚstrÚCalledProcessErrorÚ
returncode)r   Úer   r   r	   r   M   s     ÿ

r   c              
   C   sT   t tdtjƒ}zt | |¡ W n0 tk
rN } z|jtjkr>‚ W 5 d }~X Y nX d S )NÚSIGKILL)ÚgetattrÚsignalÚSIGTERMÚosr   ÚOSErrorÚerrnoZESRCH)r   Zkill_signalr'   r   r   r	   Ú_kill\   s    r/   c              
   C   s€   zt jddt| ƒgddd�}W n6 t jk
rT } z|jdkrBd}n‚ W 5 d}~X Y nX | ¡ D ]}t|ƒ}t|ƒ q^t| ƒ dS )z@Recursively kill the descendants of a process before killing it.Zpgrepz-PNT)r   Útexté   Ú )	r"   r#   r$   r%   r&   Ú
splitlinesÚintr   r/   )r   Zchildren_pidsr'   Zcpidr   r   r	   r   l   s      ÿ


r   c                 C   sX   d}dd„ t |  ¡ ƒD ƒ}|sP|dkrP|d8 }dd„ t |  ¡ ƒD ƒ}t d¡ qt|ƒS )z¸Return 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   s   g | ]}|j d k	r|j ‘qS ©N©Úexitcode©Ú.0Úpr   r   r	   Ú
<listcomp>Œ   s    
 z3get_exitcodes_terminated_worker.<locals>.<listcomp>r   r1   c                 S   s   g | ]}|j d k	r|j ‘qS r6   r7   r9   r   r   r	   r<   ‘   s   
þgš™™™™™©?)ÚlistÚvaluesÚtimeÚsleepÚ_format_exitcodes)Ú	processesZpatienceÚ	exitcodesr   r   r	   Úget_exitcodes_terminated_worker�   s    
ÿ
þrD   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 k	rt |ƒ› d|› d�‘qS )Nú(ú))Ú_get_exitcode_name)r:   r'   r   r   r	   r<   �   s     z%_format_exitcodes.<locals>.<listcomp>Ú{z, Ú})r   )rC   Zstr_exitcodesr   r   r	   rA   ›   s    ÿrA   c                 C   sX   t jdkrdS | dk rHzdd l}| |  ¡jW S  tk
rD   Y dS X n| dkrTdS dS )Nr   ÚUNKNOWNr   r!   ÚEXIT)r   r   r*   ÚSignalsÚnameÚ
ValueError)r8   r*   r   r   r	   rG   £   s    

rG   )T)T)r,   r   r?   r.   r*   r   r"   r   r   ÚImportErrorr
   r   r   r   r   r/   r   rD   rA   rG   r   r   r   r	   Ú<module>   s*   


	