o
    * ia                     @  sf   d dl mZ d dlZd dlZd dlmZ ddlmZ er"ddlm	Z	 G dd dZ
G d	d
 d
e
ZdS )    )annotationsN)TYPE_CHECKING   )Status)	Containerc                   @  s   e Zd Zdd ZdS )PodSpecc                 C  sH   d dd tdD | _g | _g | _d| _d | _d| _d| _d| _	d S )N c                 s  s    | ]}t d V  qdS )abcdefghijklmnopqrstuvwxyzN)randomchoice).0_ r   m/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddle/distributed/launch/job/pod.py	<genexpr>   s    

z#PodSpec.__init__.<locals>.<genexpr>   r   )
joinrange_name_init_containers_containers_rank_init_timeout_restart	_replicasZ
_exit_codeselfr   r   r   __init__   s   


zPodSpec.__init__N)__name__
__module____qualname__r   r   r   r   r   r      s    r   c                      s"  e Zd Z fddZdd Z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dd Zdd Zedd Zdd Zedd Zdd Zd5dd Zd6d!d"Zed#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd6d-d.Zd6d/d0Zejgejgd1d2fd3d4Z  ZS )7Podc                   s   t    d S N)superr   r   	__class__r   r   r   0   s   zPod.__init__c                 C  s   d| j  d| j d| j S )NzPod: z, replicas z	, status )namereplicasstatusr   r   r   r   __str__3   s   zPod.__str__c                 C  s*   g }| j D ]}|jtjkr|| q|S r#   )r   r)   r   FAILEDappend)r   cscr   r   r   failed_container8   s   

zPod.failed_containerc                 C     | j S r#   )r   r   r   r   r   r'   ?      zPod.namec                 C  r0   r#   )r   r   r   r   r   r(   C   r1   zPod.replicasc                 C  s   t |d| _d S Nr   )maxr   r   rr   r   r   r(   G   s   c                 C  r0   r#   r   r   r   r   r   rankK   r1   zPod.rankc                 C  s
   || _ d S r#   r6   r4   r   r   r   r7   O   s   
c                 C  r0   r#   )r   r   r   r   r   restartS   r1   zPod.restartc                 C  r0   r#   )r   r   r   r   r   
containersW   r1   zPod.containersc                 C     t | j|_| j| d S r#   )lenr   r7   r,   r   r.   r   r   r   add_container[      zPod.add_containerc                 C  r0   r#   )r   r   r   r   r   init_containers_   r1   zPod.init_containersc                 C  r:   r#   )r;   r   r7   r,   r<   r   r   r   add_init_containerc   r>   zPod.add_init_containerc                 C  s$   | j D ]}|jdkr|j  S qdS Nr   )r   	exit_coder<   r   r   r   rB   g   s
   


zPod.exit_codec                 C  sF   | j D ]}|  || j q| jD ]}|  q|  jd7  _d S r2   )r   startwaitr   r   r   )r   ir.   r   r   r   deployn   s   


z
Pod.deploy   Nc                 C  sj   | j D ]}t|tr|d u r|| q|  qt|tr3| |s1| j D ]}|jdd q&dS dS d S )NT)forceF)r   
isinstanceintsend_signal	terminater   )r   Zsiginttimeoutr.   r   r   r   stopx   s   




zPod.stopc                 C  s    | j D ]
}||s dS qdS NFT)r   rD   )r   rM   r.   r   r   r   r      s
   

zPod.joinc                 C  s0   |   rtjS |  rtjS |  rtjS tjS r#   )	is_failedr   r+   is_completed	COMPLETED
is_runningRUNNINGZREADYr   r   r   r   r)      s   z
Pod.statusc                 C  s   g | _ g | _d S r#   )r   r   r   r   r   r   reset   s   
z	Pod.resetc                 C  s"   | j D ]}|jtjkr dS qdS )NTF)r   r)   r   r+   r<   r   r   r   rP      
   
zPod.is_failedc                 C  "   | j D ]}|jtjkr dS qdS rO   )r   r)   r   rR   r<   r   r   r   rQ      rV   zPod.is_completedc                 C  rW   rO   )r   r)   r   rT   r<   r   r   r   rS      rV   zPod.is_runningc                 C  sZ   |d u r$t | jdkr| jd   t | jdkr"| jd   d S d S | j|   d S rA   )r;   r   logsr   r   idxr   r   r   rX      s   zPod.logsc                 C  s,   |d u r| j d   d S | j |   d S rA   )r   tailrY   r   r   r   r[      s   zPod.tailr   r   c                 C  s   t   | }|dk st   |k rQ| j| j D ]}|j|v r"|j  S qdd | j| j D }tt|dkr@|d |v r@|d S t | |dk st   |k sdS dS )zn
        watch return if any container status in any_list
        or all container status in all_list
        r   c                 S  s   g | ]}|j qS r   )r)   )r   r.   r   r   r   
<listcomp>   s    zPod.watch.<locals>.<listcomp>r   N)timer   r   r)   r;   setsleep)r   Zall_listZany_listintervalrM   endr.   sr   r   r   watch   s   


z	Pod.watch)rG   Nr#   ) r   r    r!   r   r*   r/   propertyr'   r(   setterr7   r8   r9   r=   r?   r@   rB   rF   rN   r   r)   rU   rP   rQ   rS   rX   r[   r   rR   r+   rc   __classcell__r   r   r%   r   r"   /   sP    














	r"   )
__future__r   r
   r]   typingr   r)   r   	containerr   r   r"   r   r   r   r   <module>   s   