o
    2cd                     @   s   d dl Z d dlZd dlZzd dlZW n ey   edw d dlZd dlZd dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ ejdkZG dd	 d	eZdS )
    Nz.You need tornado installed to use this worker.)IOLoopPeriodicCallback)WSGIContainer)Worker)__version__)   r   r   c                       sT   e Zd Zedd Z fddZdd Zdd Zd	d
 Z fddZ	dd Z
  ZS )TornadoWorkerc                    s6   t jd}|jj  fdd}||j_|t jd< d S )Nztornado.webc                    s4    |  d| j d vr| j d  dt 7  < d S d S )NGunicornServerz (Gunicorn/%s))_headersgversionself	old_clear O/var/www/html/gps/gps/lib/python3.10/site-packages/gunicorn/workers/gtornado.pyclear&   s   z"TornadoWorker.setup.<locals>.clear)sysmodulespopRequestHandlerr   )clswebr   r   r   r   setup!   s
   zTornadoWorker.setupc                    s   | j rt || d S d S N)alivesuperhandle_exit)r   sigframe	__class__r   r   r   -   s   zTornadoWorker.handle_exitc                 C   s>   |  j d7  _ | jr| j | jkr| jd d| _d S d S d S )N   z,Autorestarting worker after current request.F)nrr   max_requestsloginfor   r   r   r   handle_request1   s
   
zTornadoWorker.handle_requestc                 C   s8   | j r|   | jt kr| jd|  d| _ d S d S )Nz!Parent changed, shutting down: %sF)r   notifyppidosgetppidr&   r'   r   r   r   r   watchdog7   s   
zTornadoWorker.watchdogc                 C   s   | j s?| jr!t| drz| j  W n	 ty   Y nw d| _d S tr4| jD ]}|  q&| j  d S | jj	sA| j  d S d S d S )NserverF)
r   server_alivehasattrr.   stop	ExceptionTORNADO5	callbacksioloop
_callbacks)r   callbackr   r   r   	heartbeat?   s"   



zTornadoWorker.heartbeatc                    s   t   t   d S r   )r   clear_currentr   init_processr   r!   r   r   r:   Q   s   zTornadoWorker.init_processc           	         s  t  _d_d_tr/g _jtj	d jtj
d jD ]}|  q'ntj	djd  tj
djd  j}tjd dk rbt|tjjr]t|tjjrat|}n	t|tskt|}tjd }t|dr|jjfd	d
}||j_|tjd< tjj}nG  fdddtjj  }jjrtjj}|d= |d= tr|||d}n||j|d}ntr||}n||jd}|_ d_j!D ]}|"d t|dr|#| qt|dr||j$|% < q׈jj&dk|_'|jdd j  d S )NTFi  )io_loopr      ztornado.httpserverHTTPConnectionc                    s       |  d S r   )r(   )other)old_connection_finishr   r   r   finish|   s   z!TornadoWorker.run.<locals>.finishc                       s    e Zd Z fddZ  ZS )z&TornadoWorker.run.<locals>._HTTPServerc                    s      t | | d S r   )r(   r   on_close)instanceserver_conn)_HTTPServerr"   r   r   r   rA      s   z/TornadoWorker.run.<locals>._HTTPServer.on_close)__name__
__module____qualname__rA   __classcell__r   )rD   r   r!   r   rD      s    rD   do_handshake_on_connectsuppress_ragged_eofs)ssl_options)r;   rK   
add_socket_socketsr#   )num_processes)(r   rB   r5   r   r/   r3   r4   appendr   r-   r8   startwsgitornadoversion_info
isinstancer   ApplicationWSGIApplicationr   r   r   r0   r=   r@   
httpserver
HTTPServercfgis_sslcopydeepcopyrK   r.   socketssetblockingrL   rM   fileno	keepaliveno_keep_alive)	r   r7   apprW   r@   server_class_ssl_optr.   sr   )rD   r?   r   r   runY   sl   












zTornadoWorker.run)rE   rF   rG   classmethodr   r   r(   r-   r8   r:   rf   rH   r   r   r!   r   r      s    
r   )r[   r+   r   rR   ImportErrorRuntimeErrortornado.webtornado.httpservertornado.ioloopr   r   tornado.wsgir   gunicorn.workers.baser   gunicornr   r   rS   r3   r   r   r   r   r   <module>   s    
	