跳转到主要内容

实现可自定义的“harakiri”功能的WSGI中间件

项目描述

WSGI Harakiri

废弃

不要使用这个,这不是实现请求超时的最佳方式。您可能更愿意使用并改进您WSGI服务器内置的任何此类功能,因为它将更可靠地终止事物。

https://img.shields.io/pypi/v/wsgi-harakiri.svg https://img.shields.io/travis/adamchainz/wsgi-harakiri.svg

实现可自定义的‘harakiri’功能的WSGI中间件。

安装

使用 pip

pip install wsgi-harakiri

在Python 2.7、3.4和3.5上进行了测试。

用法

使用中间件包装您的WSGI应用程序,例如在Django应用程序的 wsgi.py

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系统上运行。使用 alarm 系统调用,因此 不能 与使用它的其他东西结合,例如uWSGI中的‘harakiri’功能。

API

HarakiriMiddleware(application, timeout=30, on_harakiri=None, error_app=None)

使用harakiri功能包装WSGI应用程序。

application 可以是任何WSGI应用程序。

timeout 可以是任何整数秒数,默认为30。

on_harakiri 当发生哈克瑞里(harakiri)时将被调用,在警报函数内部 - 因此它适合用于记录导致超时的堆栈跟踪。它的返回值将被忽略。

error_app 是第二个WSGI应用,当发生超时时将被调用以产生错误响应。默认响应是一个相当简单的“500内部服务器错误”,带有HTML“<h1>页面加载超时</h1>”。

使用所有参数的示例用法

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,
)

哈克瑞里(Harakiri)

这是一个在超时时抛出的异常。你应在代码的任何地方都不要捕获它,但你可以使用它来检测在特定的代码路径中是否发生了这种情况。例如

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.tar.gz (5.5 kB 查看哈希值)

上传时间 源代码

构建分布

wsgi_harakiri-1.0.0-py2.py3-none-any.whl (5.8 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者