实现像 uWSGI 这样可定制的“harakiri”的 WSGI 中间件
项目描述
WSGI 原切
弃
不要使用这个,它不是实现请求超时的最佳方式。您可能最好使用和改进 wsgi 服务器中内置的任何此类功能,因为它将更可靠地终止事物。
WSGI 中间件,它实现了一个可定制的“harakiri”,如 uWSGI。
安装
使用点子:
pip install wsgi-harakiri
在 Python 2.7、3.4 和 3.5 上测试。
用法
使用中间件包装 WSGI 应用程序,例如wsgi.py中的 Django 应用程序:
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
application = get_wsgi_application()
from wsgi_harakiri import HarakiriMiddleware
# By default adds a request timeout of 30 seconds
application = HarakiriMiddleware(application)
您的应用程序不能运行多线程服务器(多进程是可以的),并且它必须在 POSIX 系统上运行。使用了警报系统调用,因此它不能与其他使用它的东西结合使用,例如 uWSGI 中的“harakiri”功能。
API
HarakiriMiddleware(应用程序,超时=30,on_harakiri=None,error_app=None)
使用 harakiri 功能包装 WSGI 应用程序。
应用程序可以是任何 WSGI 应用程序。
timeout可以是任意整数秒,默认为 30。
on_harakiri将在发生 harakiri 时从警报函数内部调用 - 因此它适用于记录导致超时的堆栈跟踪。它的返回值被忽略。
error_app是第二个 WSGI 应用程序,当发生超时时将调用它以产生错误响应。默认响应是带有 HTML '<h1>Page load timeout</h1>' 的相当简单的“500 Internal server error”。
所有参数的示例用法:
application = get_wsgi_application()
from wsgi_harakiri import HarakiriMiddleware
def harakiri_handler():
logger.error("Harakiri occured", extra={'stack': True})
def harakiri_page(environ, start_response):
start_response(
'500 Internal server error',
[('Content-Type', 'text/html')]
)
return [b'<h1>Sorry, this page timed out.</h1>']
application = HarakiriMiddleware(
application,
timeout=15,
on_harakiri=harakiri_handler,
error_app=harakiri_page,
)
原切
这是发生超时时引发的异常。您不应该 在代码中的任何地方捕获它,但是您可以使用它来检测它何时发生在特定代码路径中。例如:
from wsgi_harakiri import Harakiri
def find_users(search_term):
conn = make_db_connection()
try:
return conn.query(search_term)
except Harakiri:
logger.error("A search timed out", extra={'search_term': search_term})
raise
历史
待发布
新的发行说明在这里
1.0.0 (2016-03-28)
PyPI 上的第一个版本,带有HarakiriMiddleware。
项目详情
关
wsgi_harakiri -1.0.0-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b28fcdf2696bcf4d0877174c802e732072d4a0dda4702eebc921fc15da54da37 |
|
MD5 | 2e19d8a3b5c648b3af8b6283e8212dc4 |
|
布莱克2-256 | 2044eb5d49be9ec0610ef8762e9d37689c8308ceac8231b01799e01aad2c81b7 |