U
    	fl                     @  s   d dl mZ 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 d dlZd dlmZ d dlmZ ejejfZed	ZG d
d dZdS )    )annotationsN)SpawnProcess)socket)	FrameType)Callable)get_subprocess)Configzuvicorn.errorc                   @  s\   e Zd ZdddddddZdd	dd
ddZddddZddddZddddZdS )Multiprocessr   z%Callable[[list[socket] | None], None]zlist[socket]None)configtargetsocketsreturnc                 C  s0   || _ || _|| _g | _t | _t | _	d S N)
r   r   r   	processes	threadingEventshould_exitosgetpidpid)selfr   r   r    r   c/var/www/html/apigroqsegura/apigroq/lib/python3.8/site-packages/uvicorn/supervisors/multiprocess.py__init__   s    
zMultiprocess.__init__intzFrameType | None)sigframer   c                 C  s   | j   dS )zN
        A signal handler that is registered with the parent process.
        N)r   set)r   r   r   r   r   r   signal_handler'   s    zMultiprocess.signal_handler)r   c                 C  s   |    | j  |   d S r   )startupr   waitshutdown)r   r   r   r   run-   s    
zMultiprocess.runc                 C  s   dt | j d}dtjt | jddd}tj|d|id tD ]}t|| j	 qDt
| jjD ],}t| j| j| jd	}|  | j| qdd S )
NzStarted parent process []zStarted parent process [{}]cyanTfgboldcolor_messageextra)r   r   r   )strr   formatclickstyleloggerinfoHANDLED_SIGNALSsignalr   ranger   workersr   r   r   startr   append)r   messager)   r   Z_idxprocessr   r   r   r    2   s    zMultiprocess.startupc                 C  s`   | j D ]}|  |  qdt| j d}dtjt| jddd}tj	|d|id d S )	NzStopping parent process [r$   zStopping parent process [{}]r%   Tr&   r)   r*   )
r   	terminatejoinr,   r   r-   r.   r/   r0   r1   )r   r9   r8   r)   r   r   r   r"   ?   s    

zMultiprocess.shutdownN)__name__
__module____qualname__r   r   r#   r    r"   r   r   r   r   r	      s
   r	   )
__future__r   loggingr   r3   r   Zmultiprocessing.contextr   r   typesr   typingr   r.   uvicorn._subprocessr   uvicorn.configr   SIGINTSIGTERMr2   	getLoggerr0   r	   r   r   r   r   <module>   s    
