一组用于调节和控制Python代码执行时间的工具。
pythrottle的Python项目详细描述
这个项目提供了一些方便的节流和控制工具 函数或Python代码迭代块的执行时间。在
主要特点
- 简单且时间精确的循环迭代。在
- 支持同步和异步编程。在
- 速率限制连续函数调用。在
- 环路速率测量。在
安装
$ pip install pythrottle
入门
节气门
限制代码块执行的基本用途是使用 Throttle.loop()(对于异步模式,Throttle.aloop())。 这将允许每隔1 / rate秒执行代码:
^{pr2}$下一个示例代码从默认值记录一个15秒的视频文件 视频源以24帧/秒的准确帧速率使用 OpenCV。在
importcv2fromthrottleimportThrottlerate=24.0# Target frame ratecap=cv2.VideoCapture(0)out=cv2.VideoWriter('output.avi',cv2.VideoWriter_fourcc(*'XVID'),rate,(640,480))t=Throttle(interval=(1/rate))for_int.loop(duration=15.0):ret,frame=cap.read()# Frame captureout.write(frame)# Save frame to output file# Display the resulting framecv2.imshow('frame',frame)ifcv2.waitKey(1)&0xFF==ord('q'):break
如果你只是 sleep() 对于帧捕获之间的1 / 24秒,将有一个 捕获率和输出视频速率之间的差异,因为 帧捕获所需的时间。如果还添加图像处理 (运动检测,文本覆盖…),延迟可能导致输出 完全不同步。在
节气门装饰器
您还可以使用throttle.throttle()和throttle.athrottle() decorators来限制对函数的调用次数。在下一个 例如,函数hello()经过修饰以限制 /throttledendpoint,使用 Flask服务器。只有2个请求 每5秒一次。在
fromflaskimportFlaskfromthrottleimportthrottleapp=Flask(__name__)@app.route("/throttled")@throttle(limit=2,interval=5,on_fail=("Limit reached :(",429))defhello():return"Hi, Throttle!"if__name__=='__main__':app.run()
可以嵌套修饰符来创建更复杂的限制规则。在
费率表
RateMeter类用于测量迭代的速率 代码只考虑最后几秒钟,所以 值保持更新。在
下一个代码块打印开始的循环的执行率 循环速度为10个IP(每秒迭代次数),最多可减少5个IP。在 显示并考虑到每次迭代的速率 最近2秒的迭代历史记录。在
importtimefromrate_meterimportRateMeterrate_meter=RateMeter(interval=2.0)foriinrange(100):rate_meter.update()measured_rate=rate_meter.rate()print(f"Rate: {rate_meter.rate()}")time.sleep(0.1+i*0.001)
许可证
根据MIT License的条款分发。在
- 项目
标签: