python速率控制器

   最近有空和同事共同开发了一个基于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()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值