o
    "j                     @   sJ   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gZG dd dZdS )    NZTRAINER_IP_PORT_LISTZPADDLE_TRAINER_ENDPOINTSc                   @   sd   e Zd ZejejejdddfddZdd Z	dd	 Z
d
d Zdd Zdd ZdddZdddZdS )ProcessContextTNFc                 C   sH   || _ || _|| _|| _|| _tjdkr|nd| _d | _d | _	|| _
d S )NntF)_cmd_env_preexec_fn_stdout_stderrosname_group_proc_code_shell)selfcmdenvouterrgroup
preexec_fnshell r   p/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/paddle/distributed/launch/utils/process_context.py__init__   s   

zProcessContext.__init__c           
      C   s  | j rtjnd }| jd }tj|dd | jd}|d urut|}ttj	|d| d}d|i}tt
dd	}| j D ]\}}|tvsNt||k rR|||< q@t|d
}	tjt| j|	ddd W d    n1 sow   Y  n| j}tj| j|| j| j| jp|| jd| _d S )NZPADDLE_LOG_DIRT)exist_okZPADDLE_TRAINER_IDzbackup_env.z.jsonZPADDLE_BACKUP_ENV_PATHZPADDLE_ENV_LIMIT_LENi  w   )indent	sort_keys)r   stdoutstderrr   r   )r   r	   setsidr   makedirsgetintstrpathjoingetenvitemsLIMIT_LEN_ENVSlenopenjsondumpdict
subprocessPopenr   r   r   r   r   r   )
r   Zpre_fnZlog_dirrankZbackup_env_pathZenvsmax_lenkvfr   r   r   _start.   s8   
zProcessContext._startc                 C   sB   z| j  s| j   | j s| j  W d S W d S    Y d S N)r   isattycloser   r   r   r   r   
_close_stdN   s   


zProcessContext._close_stdc                 C   s   | j o	| j  d u S r8   r   pollr;   r   r   r   aliveX      zProcessContext.alivec                 C   s   | j r| j  S d S r8   r=   r;   r   r   r   	exit_code[   r@   zProcessContext.exit_codec                 C   s   |    d S r8   )r7   r;   r   r   r   start^   s   zProcessContext.start   c                 C   sr   t |D ]!}|  r%| jrtt| jjtj	 n| j
  td q |r1|  r1| j  |   |  S )Ng?)ranger?   r   r	   killpggetpgidr   pidsignalSIGTERM	terminatetimesleepkillr<   )r   forceZ	max_retryir   r   r   rJ   a   s   

zProcessContext.terminatec                 C   s   | j | d S r8   )r   wait)r   timeoutr   r   r   rP   s   s   zProcessContext.wait)FrC   r8   )__name__
__module____qualname__r	   environsysr   r    r   r7   r<   r?   rA   rB   rJ   rP   r   r   r   r   r      s    
 

r   )r-   r	   rH   r0   rV   rK   r*   r   r   r   r   r   <module>   s   