o
    * i~                     @   s:   d dl Z d dlZd dlmZ ddlmZ G dd dZdS )    N)ProcessContext   )Statusc                   @   s  e Zd ZdZg di dfddZedd Zedd	 Zejd
d	 Zedd Z	e	jdd Z	edd Z
e
jdd Z
edd Zejdd Zedd Zejdd Zi fddZdd Zdd Zdd Zd2dd Zd3d"d#Zed$d% Zed&d' Zd(d) Zd4d-d.Zd5d0d1Zd!S )6	Containerz_
    TODO(kuizhiqing) A container can be run by process/thread or just a callable function
    Fc                 C   sT   || _ || _d | _d | _|| _d | _d| _d| _d | _d| _	|r%d| _
d S d| _
d S )N   
   Fwa)_entrypoint_rank_out_err_env_procZ_retryZ_grace_period_log_handler_shelllog_mode)self
entrypointrankenvZoverwrite_log r   s/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddle/distributed/launch/job/container.py__init__   s   zContainer.__init__c                 C      | j S N)r   r   r   r   r   r   ,      zContainer.envc                 C   r   r   r   r   r   r   r   r   0   r   zContainer.entrypointc                 C   
   || _ d S r   r   )r   entryr   r   r   r   4      
c                 C   r   r   r   r   r   r   r   r   8   r   zContainer.rankc                 C   r    r   r#   )r   rr   r   r   r   <   r"   c                 C   r   r   r   r   r   r   r   outfile@   r   zContainer.outfilec                 C   r    r   r%   )r   outr   r   r   r&   D   r"   c                 C   r   r   r   r   r   r   r   errfileH   r   zContainer.errfilec                 C   r    r   r(   )r   errr   r   r   r)   L   r"   c                 C   r   r   r   r   r   r   r   shellP   r   zContainer.shellc                 C   r    r   r+   )r   r,   r   r   r   r,   T   r"   c                 K   s@   dd |  D }| j| dd |  D }| j| d S )Nc                 S       i | ]\}}t |tr||qS r   
isinstancestr.0kvr   r   r   
<dictcomp>Y        z(Container.update_env.<locals>.<dictcomp>c                 S   r-   r   r.   r1   r   r   r   r5   \   r6   )itemsr   update)r   r   kwargsr   r   r   
update_envX   s   zContainer.update_envc                 C   sB   | j  D ]\}}t|trt|tsJ d| d| dqd S )Nzenv :z must be str)r   r7   r/   r0   )r   r3   r4   r   r   r   _validate_env_   s
   zContainer._validate_envc                 C   sJ   |sd S zt j|}t j|st j|dd t|| jW S    Y d S )NT)exist_ok)ospathdirnameisdirmakedirsopenr   )r   pthdr   r   r   _get_fde   s   zContainer._get_fdc                 C   s   | j r
| j  r
dS |   | | jptj| _| j| jkr#| j| _	n| jr0| | jp.tj
| _	| jrI| jsIt| j| _| jdd | j | _t| j| j| j| j	| jd| _ | j   d S )NTr      )r   r'   r*   r,   )r   aliver<   rF   r   sysstdoutZ_stdoutr   _stderrstderrr   rC   seektell_log_start_offsetr   r   r   r   startr   r   r   r   rP   q   s(   
zContainer.startc                 C   s:   | j r| j   d | _ | jr| j r| j|S d S d S r   )r   closer   rH   	terminate)r   forcer   r   r   rR      s   
zContainer.terminateNc                 C   s(   z	| j | W dS  ty   Y dS w )NTF)r   wait	Exception)r   timeoutr   r   r   rT      s   zContainer.waitc                 C   s   | j r| j  S dS )Nr   )r   	exit_coder   r   r   r   rW      s   zContainer.exit_codec                 C   s6   | j stjS | j  rtjS | j  dkrtjS tjS )Nr   )r   r   ZUNINITrH   RUNNINGrW   Z	COMPLETEDZFAILEDr   r   r   r   status   s   
zContainer.statusc                 C   s   t jdd }|dks|dkr+d| j d| j d| j d| j d	| j d
| j	 S d| j d| j d| j d| j d	| j 
S )NZFLAGS_print_launcher_envfalsetrue1zContainer rank z status z cmd z code z log z 
env )
r>   environgetlowerr   rY   r   rW   r)   r   )r   Z
need_printr   r   r   __str__   s   4,zContainer.__str__r   r     c                 C   s   | j sd S |d u rtj}z5|dks|dkr(|dkr!|| jk r!| j}| j || t|D ]}| j  }|s9 W dS || q,W dS    Y d S )Nr   r   FT)r   rI   rJ   rO   rM   rangereadlinewrite)r   fnoffsetwhencelimit_liner   r   r   logs   s"   
zContainer.logs  c                 C   s`   | j sd S z| j dd | j  }W n   Y ||kr'| j|| dd d S | jddd d S )Nr   rG   )rf   rg   )r   rM   rN   rk   )r   lengthZedr   r   r   tail   s   zContainer.tail)Fr   )Nr   r   ra   )rl   )__name__
__module____qualname____doc__r   propertyr   r   setterr   r&   r)   r,   r:   r<   rF   rP   rR   rT   rW   rY   r`   rk   rn   r   r   r   r   r      sL    
















r   )r>   rI   Z/paddle.distributed.launch.utils.process_contextr   rY   r   r   r   r   r   r   <module>   s
   