U
    lufB                     @   s\   d Z ddlZddlZddlmZ ddlmZ ddlmZ G dd deZ	G d	d
 d
e	Z
dS )zA basic in process kernel monitor with autorestarting.

This watches a kernel's state using KernelManager.is_alive and auto
restarts the kernel if it dies.
    N)Any)Instance   )KernelRestarterc                   @   sF   e Zd ZdZedZedddZdZddddZ	ddd	d
Z
dS )IOLoopKernelRestarterz!Monitor and autorestart a kernel.ztornado.ioloop.IOLoopreturnc                 C   s&   t jdtdd ddlm} |j S )Nz>IOLoopKernelRestarter.loop is deprecated in jupyter-client 5.2   )
stacklevelr   )ioloop)warningswarnDeprecationWarningZtornador   ZIOLoopcurrent)selfr    r   C/tmp/pip-unpacked-wheel-naub1w99/jupyter_client/ioloop/restarter.py_loop_default   s    z#IOLoopKernelRestarter._loop_defaultNc                 C   s8   | j dkr4ddlm} || jd| j | _ | j   dS )z Start the polling of the kernel.Nr   )PeriodicCallbacki  )
_pcallbackZtornado.ioloopr   pollZtime_to_deadstart)r   r   r   r   r   r   "   s    
zIOLoopKernelRestarter.startc                 C   s   | j dk	r| j   d| _ dS )zStop the kernel polling.N)r   stop)r   r   r   r   r   -   s    

zIOLoopKernelRestarter.stop)__name__
__module____qualname____doc__r   Zloopr   r   r   r   r   r   r   r   r   r      s   
r   c                   @   s   e Zd ZdZddddZdS )AsyncIOLoopKernelRestarterz"An async io loop kernel restarter.Nr   c                    sD  | j r| j d | j I dH }t }|s|| _| jrJ|  jd7  _nd| _| j| jkr| j	d | 
d d| _d| _|   nP| jo| j}| jd| j| j|rd	nd
 | 
d | jjd|dI dH  d| _nf| j}| jjr| jjj|d}| jr|| j |krd| _| jr@|| j |kr@| j d d| _dS )zPoll the kernel.zPolling kernel...N   z*AsyncIOLoopKernelRestarter: restart failedZdeadFr   zFAsyncIOLoopKernelRestarter: restarting kernel (%i/%i), %s random portsnewZkeepZrestartT)nownewports)Zrecommendedz8AsyncIOLoopKernelRestarter: restart apparently succeeded)debuglogZkernel_manageris_alivetimeZ
_last_deadZ_restartingZ_restart_countZrestart_limitwarningZ_fire_callbacksr   Zrandom_ports_until_aliveZ_initial_startupinfoZrestart_kernelstable_start_timeZprovisionerZget_stable_start_time)r   r$   r    r!   r(   r   r   r   r   7   sF    



	zAsyncIOLoopKernelRestarter.poll)r   r   r   r   r   r   r   r   r   r   4   s   r   )r   r%   r   typingr   Z	traitletsr   Z	restarterr   r   r   r   r   r   r   <module>   s   #