基于随机设计契约的实用工具
项目描述
像 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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | d2ad1735b96a61e0c4939a59df95e6a92d182bc0e1268e38414921d8b01c8290 |
|
MD5 | 651bcb24d93b64716cb55071ea6e5f0e |
|
BLAKE2b-256 | 2191abd39bd7dbeeaa401ccfcf26b3b83ea6fe3164fe37cd9c9e4cca31cd8a3e |
hesitate-0.0.2-py2.py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8e03af55f723819656809f726cfae29853df2fd8f112e69adb01a3782ae7861f |
|
MD5 | 073a0eef5c42729a21504ee16860b4d6 |
|
BLAKE2b-256 | 928ca648ac346f500f235b79a27ffd1eab6f0f90a8665c1ecf92623b7deed1a6 |