跳转到主要内容

基于随机设计契约的实用工具

项目描述

https://travis-ci.org/mhallin/hesitate-py.svg?branch=master

assert,但不太...断言。


你是否因为性能原因而跳过编写 assert 语句?不再跳过了!Hesitate将通过概率手段使你的设计契约断言更快!

如何?

通过不执行它们。

是的。

Hesitate会测量每个断言的执行时间,并将执行缓慢的断言的频率降低,使其低于执行快速的断言。你决定每个断言平均认为合理的时间,Hesitate将控制断言运行的频率以匹配该时间。

看起来像这样

# worker.py

def do_work(data):
    assert data_is_valid(data)  # Super slow!

    return work_work(data)


# main.py

import hesitate
hesitate.attach_hook(
    target_timing=0.002,  # 2 milliseconds per assert on average
)

import worker
worker.do_work(invalid_data)  # Might not raise AssertionError! Who knows?

Hesitate与受 py.test 影响的AST重写器一起工作。它在Python的模块加载器上挂载,在模块加载时拦截和重写代码。Hesitate将断言计时存储在普通字典中,因此当应用程序退出时,一切都会被遗忘。这使得它对于长期运行的过程非常有用,如应用程序服务器。

安装

pip install hesitate

当你的应用程序启动时,尽快调用 hesitate.attach_hook()。必须在加载你希望Hesitate连接的任何模块之前完成此操作。 attach_hook有三个可选参数

  • initial_probability - 在其计时未知之前,断言最初运行的概率。默认值为1.0,这意味着所有断言都会在其第一次运行时触发。降低此值以避免每次应用程序启动时都向系统注入潜在的慢速断言。

  • target_timing - 每个断言应收敛到的预期持续时间,以秒为单位。默认值为0.1。

  • convergence_factor - 断言测量收敛的速度。断言的计时是低通滤波,这控制滤波器跟随的速度。1.0表示它始终使用新值。0.0表示它永远不会从其初始值更改。默认值为0.7。

Python 支持情况

犹豫 (Hesitate) 已在 Python 2.7、3.2、3.3、3.4 和 PyPy 2.4 上进行了测试。

Django 集成

犹豫预装了一个与您的设置集成的 Django 应用程序,并支持 Django 1.6 和 1.7。

INSTALLED_APPS = (
    # Hesitate should be loaded first of all apps!
    'hesitate.wrappers.django',

    # The rest of your apps here
)

HESITATE_ENABLED = True  # Optional, defaults to the inverse of DEBUG

# These parameters reflect the attach_hook parameters and are all optional:
HESITATE_INITIAL_PROBABILITY = 1.0
HESITATE_TARGET_TIMING = 0.1
HESITATE_CONVERGENCE_FACTOR = 0.7

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源代码分发

hesitate-0.0.2.tar.gz (7.6 kB 查看哈希值)

上传时间 源代码

构建分发

hesitate-0.0.2-py2.py3-none-any.whl (5.3 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下提供支持