Skip to main content

实现像 uWSGI 这样可定制的“harakiri”的 WSGI 中间件

项目描述

WSGI 原切

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

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

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

已上传 source

内置分布

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

已上传 py2 py3