a
    Žù»j}  ã                   @   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	yb   dZY n0 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| ƒ 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   úIE:\soccer\ml_env\Lib\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 0 |d d d… D ]&}z| ¡  W q> t jyb   Y q>0 q>zt  | j¡ ¡  W n t jyŽ   Y n0 |  ¡  d S )NT)Ú	recursiveéÿÿÿÿ)r   ÚProcessÚpidÚchildrenZNoSuchProcessÚkillÚjoin)r   ZdescendantsZ
descendantr   r   r	   r   !   s    r   c                 C   sd   z$t jdkrt| jƒ n
t| jƒ W n2 tyV   t ¡ }t 	d|› �¡ |  
¡  Y n0 |  ¡  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 n2 t jyR } z|jdvr>‚ W Y d }~n
d }~0 0 d S )NZ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 n2 tyP } z|jtjkr<‚ W Y d }~n
d }~0 0 d S )NZ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 n8 t jyV } z|jdkr@d}n‚ W Y d}~n
d}~0 0 | ¡ 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 ur|j ‘qS ©N©Úexitcode©Ú.0Úpr   r   r	   Ú
<listcomp>Œ   s   z3get_exitcodes_terminated_worker.<locals>.<listcomp>r   r0   c                 S   s   g | ]}|j d ur|j ‘qS r5   r6   r8   r   r   r	   r;   ‘   s   
þgš™™™™™©?)ÚlistÚvaluesÚtimeÚsleepÚ_format_exitcodes)Z	processesZpatienceÚ	exitcodesr   r   r	   Úget_exitcodes_terminated_worker�   s    
ÿ
þrB   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)r9   r'   r   r   r	   r;   �   s   z%_format_exitcodes.<locals>.<listcomp>Ú{z, Ú})r   )rA   Zstr_exitcodesr   r   r	   r@   ›   s    ÿr@   c                 C   sV   t jdkrdS | dk rFzdd l}| |  ¡jW S  tyB   Y dS 0 n| dkrRdS dS )Nr   ÚUNKNOWNr   r!   ZEXIT)r   r   r)   ÚSignalsÚnameÚ
ValueError)r7   r)   r   r   r	   rE   £   s    

rE   )T)T)r+   r   r>   r-   r)   r   r"   r   r   ÚImportErrorr
   r   r   r   r   r.   r   rB   r@   rE   r   r   r   r	   Ú<module>   s*   


	