o
    i                     @   sP   d Z ddlZddl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)Instance   )KernelRestarterc                   @   s4   e Zd ZdZedZdd ZdZdd Zdd	 Z	dS )
IOLoopKernelRestarterz!Monitor and autorestart a kernel.ztornado.ioloop.IOLoopc                 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DeprecationWarningtornador   IOLoopcurrent)selfr    r   Z/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/jupyter_client/ioloop/restarter.py_loop_default   s   
z#IOLoopKernelRestarter._loop_defaultNc                 C   s<   | j du rddlm} || jd| j | _ | j   dS dS )z Start the polling of the kernel.Nr   )PeriodicCallbacki  )
_pcallbacktornado.ioloopr   polltime_to_deadstart)r   r   r   r   r   r   !   s   
zIOLoopKernelRestarter.startc                 C   s"   | j dur| j   d| _ dS dS )zStop the kernel polling.N)r   stop)r   r   r   r   r   ,   s   


zIOLoopKernelRestarter.stop)
__name__
__module____qualname____doc__r   loopr   r   r   r   r   r   r   r   r      s    
r   c                   @   s   e Zd ZdZdd ZdS )AsyncIOLoopKernelRestarterz"An async io loop kernel restarter.c                    sJ  | j r
| j d | j I dH }t }|sp|| _| jr&|  jd7  _nd| _| j| jkrF| j	d | 
d d| _d| _|   dS | joK| j}| jd| j| j|rXd	nd
 | 
d | jjd|dI dH  d| _dS | j}| jjr| jjj|d}| jr|| j |krd| _| jr|| j |kr| j d d| _dS dS dS )zPoll the kernel.zPolling kernel...N   z*AsyncIOLoopKernelRestarter: restart faileddeadFr   zFAsyncIOLoopKernelRestarter: restarting kernel (%i/%i), %s random portsnewkeeprestartT)nownewports)recommendedz8AsyncIOLoopKernelRestarter: restart apparently succeeded)debuglogkernel_manageris_alivetime
_last_dead_restarting_restart_countrestart_limitwarning_fire_callbacksr   random_ports_until_alive_initial_startupinforestart_kernelstable_start_timeprovisionerget_stable_start_time)r   r+   r%   r&   r7   r   r   r   r   6   sJ   



	
zAsyncIOLoopKernelRestarter.pollN)r   r   r   r   r   r   r   r   r   r   3   s    r   )	r   r,   r	   	traitletsr   	restarterr   r   r   r   r   r   r   <module>   s    #