最近有空和同事共同开发了一个基于python的速率控制器,可以控制数据的处理速度,在很多场景中相信都会用到,故在此分享给大家。
一、代码
主要思想:控制一段时间内处理数据的速度,速度不能超过设定的speed值。例如,speed值设定为100,那就是说每秒数据处理的速度上限是100.
#coding=utf-8
import time
import datetime
from time import sleep
class SpeedControl(object):
def __init__(self, speed):
self.speed_per_sec = speed
self.now_speed = 0
self.last_control_time = int(time.time())
self.counter = 0
def control(self):
while True:
interval = int(time.time()) - self.last_control_time
if interval == 0 and self.counter >= self.speed_per_sec:
sleep(0.5)
continue
if interval >= 1:
self.now_speed = self.counter / interval
if self.now_speed >= self.speed_per_sec:
sleep(0.5)
continue
if interval >= 60:
self.counter = 0
self.last_control_time = int(time.time())
self.counter += 1
break
def current_speed(self):
return self.now_speed
def change_speed(self, speed):
self.speed_per_sec = speed
def main():
speed_control = SpeedControl(10)
if __name__ == '__main__':
main()
二、使用方法
生产一个持久的SpeedCtrol对象,除非脚本退出,否则该对象不能析构。然后每处理一条数据或发送一条请求等代码之后,调用crontrol()方法即可实现速率控制,例如:
speed_controller = SpeedControl(100)
...
...
...
// process data
func()
// control speed
speed_controller.control()