
    df                         d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZ d dlZd dlmZ d dlmZ ej$                  ej&                  fZ e j*                  d      Z G d	 d
      Zy)    N)SpawnProcess)socket)	FrameType)CallableListOptional)get_subprocess)Configzuvicorn.errorc                   t    e Zd Zdedeeee      gdf   dee   ddfdZde	dee
   ddfd	Zdd
ZddZddZy)MultiprocessconfigtargetNsocketsreturnc                     || _         || _        || _        g | _        t	        j
                         | _        t        j                         | _	        y N)
r   r   r   	processes	threadingEventshould_exitosgetpidpid)selfr   r   r   s       Y/home/api-vastappli/venv/lib/python3.12/site-packages/uvicorn/supervisors/multiprocess.py__init__zMultiprocess.__init__   s<     -/$??,99;    sigframec                 8    | j                   j                          y)zN
        A signal handler that is registered with the parent process.
        N)r   set)r   r   r   s      r   signal_handlerzMultiprocess.signal_handler%   s     	r   c                 x    | j                          | j                  j                          | j                          y r   )startupr   waitshutdown)r   s    r   runzMultiprocess.run+   s&    r   c                 >   dj                  t        | j                              }dj                  t        j                  t        | j                        dd            }t
        j                  |d|i       t        D ]"  }t        j                  || j                         $ t        | j                  j                        D ]Y  }t        | j                  | j                  | j                        }|j!                          | j"                  j%                  |       [ y )NzStarted parent process [{}]cyanTfgboldcolor_messageextra)r   r   r   )formatstrr   clickstyleloggerinfoHANDLED_SIGNALSsignalr"   ranger   workersr	   r   r   startr   append)r   messager-   r   _idxprocesss         r   r$   zMultiprocess.startup0   s    /66s488}E5<<KKDHH&t<
 	GO]#CD" 	4CMM#t223	4 $++--. 	+D${{4;;G MMONN!!'*	+r   c                 T   | j                   D ]"  }|j                          |j                          $ dj                  t	        | j
                              }dj                  t        j                  t	        | j
                        dd            }t        j                  |d|i       y )NzStopping parent process [{}]r)   Tr*   r-   r.   )
r   	terminatejoinr0   r1   r   r2   r3   r4   r5   )r   r>   r<   r-   s       r   r&   zMultiprocess.shutdownA   s    ~~ 	GLLN	 177DHHF6==KKDHH&t<
 	GO]#CDr   )r   N)__name__
__module____qualname__r
   r   r   r   r   r   intr   r"   r'   r$   r&    r   r   r   r      sv     (4<01478 f	
 
# hy.A d 
+"	Er   r   )loggingr   r7   r   multiprocessing.contextr   r   typesr   typingr   r   r   r2   uvicorn._subprocessr	   uvicorn.configr
   SIGINTSIGTERMr6   	getLoggerr4   r   rF   r   r   <module>rP      s`     	   0   + +  . ! MM
NN
 
		?	+3E 3Er   