
     O=d                         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dS )    N)SpawnProcess)socket)	FrameType)CallableListOptional)get_subprocess)Configzuvicorn.errorc                       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dS )MultiprocessconfigtargetNsocketsreturnc                     || _         || _        || _        g | _        t	          j                    | _        t          j                    | _	        d S N)
r   r   r   	processes	threadingEventshould_exitosgetpidpid)selfr   r   r   s       JD:\Sites\api_v1\venv\Lib\site-packages\uvicorn/supervisors/multiprocess.py__init__zMultiprocess.__init__   sA     -/$?,,9;;    sigframec                 8    | j                                          dS )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                     |                                   | j                                         |                                  d S r   )startupr   waitshutdown)r   s    r   runzMultiprocess.run+   s5    r   c                 &   d                     t          | j                            }d                     t          j        t          | j                  dd                    }t
                              |d|i           t          D ]}t          j        || j	                   t          | j        j                  D ]Q}t          | j        | j        | j                  }|                                 | j                            |           Rd S )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6s48}}EE5<<KDH&t<<<
 
 	GO]#CDDD" 	4 	4CM#t23333,-- 	+ 	+C${4;  G MMOOON!!'****	+ 	+r   c                 l   | j         D ]*}|                                 |                                 +d                    t	          | j                            }d                    t          j        t	          | j                  dd                    }t          	                    |d|i           d S )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LLNNNN077DHFF6==KDH&t<<<
 
 	GO]#CDDDDDr   )r   N)__name__
__module____qualname__r
   r   r   r   r   r   intr   r"   r'   r$   r&    r   r   r   r      s         (4<01478 f	
 
   # hy.A d       
+ + + +"	E 	E 	E 	E 	E 	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 0 0 0 0 0             + + + + + + + + + +  . . . . . . ! ! ! ! ! ! M
N
 
	?	+	+3E 3E 3E 3E 3E 3E 3E 3E 3E 3Er   