Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/site-packages/aiohttp/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/site-packages/aiohttp/__pycache__/worker.cpython-35.opt-1.pyc



���Z��@sdZddlZddlZddlZddlZddlZddlmZddlm	Z
ddlmZddl
mZddlmZmZyddlZWnek
r�dZYnXdZGdd	�d	ej�ZGd
d
�d
e�ZGdd�de�ZdS)z%Async gunicorn worker for aiohttp.web�N)�suppress)�AccessLogFormat)�base)�web�)�AccessLogger�
set_result�GunicornWebWorker�GunicornUVLoopWebWorker�GunicornTokioWebWorkercs�eZdZejZejZ�fdd�Z	�fdd�Z
dd�Zdd�Zd	d
�Z
ddd
�Zdd�Zdd�Zdd�Zedd��Zdd�Z�S)r	cs;t�j||�d|_d|_d|_d|_dS)Nr)�super�__init__�_runner�_task�	exit_code�_notify_waiter)�self�args�kw)�	__class__��A/opt/alt/python35/lib64/python3.5/site-packages/aiohttp/worker.pyr
"s
			zGunicornWebWorker.__init__cs@tj�j�tj�|_tj|j�t�j�dS)N)�asyncio�get_event_loop�closeZnew_event_loop�loopZset_event_loopr�init_process)r)rrrr*szGunicornWebWorker.init_processc
Cs|jjr|jjnd}td|jd|jjd|d|j|jj��}tj	|j
|�|_|jj
|jj��|jj|j��|_tt��|jj
|j�WdQRXt|jd�r�|jj
|jj��|jj�tj|j�dS)NZloggerZkeepalive_timeout�
access_log�access_log_format�shutdown_asyncgens)�cfgZ	accesslog�logr�dictZ	keepalive�_get_valid_log_formatrrZ	AppRunnerZwsgirrZrun_until_completeZsetupZcreate_task�_runrr�	Exception�hasattrrr�sys�exitr)rrZparamsrrr�run3s 	

zGunicornWebWorker.runc�sl|jjr|j|j�nd}xO|jD]D}tj|j|d|d|jjdd�}|j�IdHq.Wt	j
�}y�x�|jr?|j�|jj
j}|jjr�||jjkr�d|_|jjd|�q�|t	j
�kr-|jt	j�kr-d|_|jjd|�q�|j�IdHq�WWntk
rUYnX|jj�IdHdS)NZssl_contextZshutdown_timeout�d�_FzMax requests, shutting down: %sz!Parent changed, shutting down: %s)r Zis_ssl�_create_ssl_contextZsocketsrZSockSiterZgraceful_timeout�start�os�getpid�aliveZnotifyZserverZrequests_countZmax_requestsr!�infoZppid�getppid�_wait_next_notify�
BaseExceptionZcleanup)r�ctxZsockZsite�pidZcntrrrr$Gs*$
	'	
zGunicornWebWorker._runcCs=|j�|jj�|_}|jjd|j|�|S)Ng�?)�_notify_waiter_donerZ
create_futurerZ
call_later)r�waiterrrrr3es
z#GunicornWebWorker._wait_next_notifyNcCsJ|dkr|j}|dk	r.t|d�||jkrFd|_dS)NT)rr)rr8rrrr7ms	
z%GunicornWebWorker._notify_waiter_donecCs�|jjtj|jtjd�|jjtj|jtjd�|jjtj|jtjd�|jjtj|j	tjd�|jjtj
|jtj
d�|jjtj|j
tjd�tjtjd�tjtj
d�dS)NF)rZadd_signal_handler�signal�SIGQUIT�handle_quit�SIGTERMZhandle_exit�SIGINT�SIGWINCHZhandle_winch�SIGUSR1Zhandle_usr1�SIGABRT�handle_abort�siginterrupt)rrrr�init_signalsvs





zGunicornWebWorker.init_signalscCs'd|_|jj|�|j�dS)NF)r0r Z
worker_intr7)r�sig�framerrrr;�s	zGunicornWebWorker.handle_quitcCs3d|_d|_|jj|�tjd�dS)NFr)r0rr Zworker_abortr'r()rrDrErrrrA�s		zGunicornWebWorker.handle_abortcCs�tdkrtd��tj|j�}|j|j|j�|j|_|j	re|j
|j	�|jr~|j|j�|S)z Creates SSLContext instance for usage in asyncio.create_server.

        See ssl.SSLSocket.__init__ for more details.
        NzSSL is not supported.)
�ssl�RuntimeErrorZ
SSLContextZssl_versionZload_cert_chainZcertfileZkeyfileZ	cert_reqsZverify_modeZca_certsZload_verify_locationsZciphersZset_ciphers)r r5rrrr,�s		z%GunicornWebWorker._create_ssl_contextcCs?||jkr|jStjd|�r7td��n|SdS)Nz%\([^\)]+\)z�Gunicorn's style options in form of `%(name)s` are not supported for the log formatting. Please use aiohttp's format specification to configure access log formatting: http://docs.aiohttp.org/en/stable/logging.html#format-specification)�DEFAULT_GUNICORN_LOG_FORMAT�DEFAULT_AIOHTTP_LOG_FORMAT�re�search�
ValueError)rZ
source_formatrrrr#�sz'GunicornWebWorker._get_valid_log_format)�__name__�
__module__�__qualname__rZ
LOG_FORMATrI�GunicornAccessLogFormat�defaultrHr
rr)r$r3r7rCr;rA�staticmethodr,r#rr)rrr	s					cs"eZdZ�fdd�Z�S)r
cs@ddl}tj�j�tj|j��t�j�dS)Nr)�uvlooprrr�set_event_loop_policy�EventLoopPolicyrr)rrS)rrrr�sz$GunicornUVLoopWebWorker.init_process)rMrNrOrrr)rrr
�scs"eZdZ�fdd�Z�S)rcs@ddl}tj�j�tj|j��t�j�dS)Nr)�tokiorrrrTrUrr)rrV)rrrr�sz#GunicornTokioWebWorker.init_process)rMrNrOrrr)rrr�s)r	r
r)�__doc__rr.rJr9r'�
contextlibrZgunicorn.configrrPZgunicorn.workersrZaiohttprZhelpersrrrF�ImportError�__all__ZWorkerr	r
rrrrr�<module>s(
�