o
    ZhB                     @   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                   @   s>   e Zd ZdZedZdefddZdZdddZ	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DeprecationWarningtornador
   ZIOLoopcurrent)selfr
    r   V/var/www/html/lang_env/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  )
_pcallbackZtornado.ioloopr   pollZ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r   N)__name__
__module____qualname____doc__r   loopr   r   r   r   r   r   r   r   r   r      s    

r   c                   @   s   e Zd ZdZdddZdS )AsyncIOLoopKernelRestarterz"An async io loop kernel restarter.r   Nc                    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 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   sJ   



	
zAsyncIOLoopKernelRestarter.pollr   )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    #