契约效用的随机设计
hesitate的Python项目详细描述
像assert,但不太…自信。
由于性能原因,您是否跳过编写assert语句?别再跳过了! 犹豫不决,通过概率的方法,使你的设计合同断言更快!
怎么做?
不处决他们。
…
是的。
犹豫不决将测量您编写的每个assert语句的执行时间,并执行慢的 比快的频率低。你决定你认为合理的时间 平均每个断言,并且犹豫将控制断言运行的频率以匹配 那。
看起来是这样的:
# worker.pydefdo_work(data):assertdata_is_valid(data)# Super slow!returnwork_work(data)# main.pyimporthesitatehesitate.attach_hook(target_timing=0.002,# 2 milliseconds per assert on average)importworkerworker.do_work(invalid_data)# Might not raise AssertionError! Who knows?
使用受py.test影响的ast重写器时,会出现犹豫。它连接到python的模块加载程序 在加载代码时,它会动态地截取和重写代码。犹豫存储断言时间 在一本普通的字典里,当应用程序退出时,所有的东西都会被遗忘。这是最重要的 对于长寿命进程(如应用程序服务器)很有用。
安装
pip install hesitate
应用程序启动时尽快调用hesitate.attach_hook()。必须这样做 在加载任何要插入的模块之前,请不要犹豫。attach_hook接受三个可选参数:
- initial_probability-在知道断言的时间之前,它最初运行的概率。 默认值为1.0,这将导致所有断言在第一次运行时触发。将此值降低到 避免每次应用程序启动时,系统中都充斥着可能很慢的断言。
- target_timing-每个断言应该聚合的预期持续时间(秒)。违约 是0.1。
- convergence_factor-断言的度量收敛的速度。时机 一个断言是低通过滤,这控制了过滤的速度。1.0意味着 总是使用新值。0.0意味着它永远不会改变其初始值。违约 是0.7。
python支持
使用Python2.7、3.2、3.3、3.4和PyPy2.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.0HESITATE_TARGET_TIMING=0.1HESITATE_CONVERGENCE_FACTOR=0.7