B
    Ce                 @   s   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 dZG d	d
 d
ZdS )    N)SpawnProcess)socket)	FrameType)CallableListOptional)get_subprocess)Configzuvicorn.errorc               @   sv   e Zd Zeeeee  gdf ee ddddZe	ee
 ddddZddd	d
ZddddZddddZdS )MultiprocessN)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   t/var/www/downstreamdata.science/rtclock/rtclock-venv/lib/python3.7/site-packages/uvicorn/supervisors/multiprocess.py__init__   s    
zMultiprocess.__init__)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 )N)startupr   waitshutdown)r   r   r   r   run+   s    
zMultiprocess.runc             C   s   d t| j}d tjt| jddd}tj|d|id xtD ]}t|| j	 qDW x<t
| jjD ],}t| j| j| jd}|  | j| qhW d 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   Z_idxprocessr   r   r   r   0   s    
zMultiprocess.startupc             C   sb   x| j D ]}|  |  qW dt| j}dtjt| jddd}tj	|d|id d S )NzStopping parent process [{}]r"   T)r#   r$   r%   )r&   )
r   	terminatejoinr'   r(   r   r)   r*   r+   r,   )r   r4   r3   r%   r   r   r   r    A   s    zMultiprocess.shutdown)__name__
__module____qualname__r	   r   r   r   r   r   intr   r   r!   r   r    r   r   r   r   r
      s   r
   )loggingr   r.   r   Zmultiprocessing.contextr   r   typesr   typingr   r   r   r)   Zuvicorn._subprocessr   Zuvicorn.configr	   SIGINTSIGTERMr-   	getLoggerr+   r
   r   r   r   r   <module>   s   
