python 功能限制包装器(来自https://github.com/themiurgo/ratelim)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 功能限制包装器(来自https://github.com/themiurgo/ratelim)相关的知识,希望对你有一定的参考价值。

class patient(object):
    def __init__(self, max_calls, time_interval):
    	if max_calls <= 0:
    	    raise ValueError("max_calls must be positive")
    	if time_interval <= 0:
    	    raise ValueError("time_interval must be positive")
        self.__last_call = None
        self.__time_interval = float(time_interval) / max_calls # seconds

    def __call__(self, f, *args, **kwargs):
        def wrapped_f(*args, **kwargs):
            now = datetime.datetime.now()
            # At the first call, reset the time
            if self.__last_call == None:
                self.__last_call = now
                result = f(*args, **kwargs)
                return result

            time_delta = now - self.__last_call
            time_delta = int(time_delta.total_seconds())
            assert time_delta >= 0
            if time_delta <= self.__time_interval:
                to_sleep = self.__time_interval - time_delta
                # print "To sleep", to_sleep
                time.sleep(to_sleep)

            result = f(*args, **kwargs)
            self.__last_call = datetime.datetime.now()
            return result
        return wrapped_f

    def __numcalls__(self):
        return self.__numcalls

以上是关于python 功能限制包装器(来自https://github.com/themiurgo/ratelim)的主要内容,如果未能解决你的问题,请参考以下文章

Swift | 属性包装器

python3 functools partial 用于函数的包装器详解

Python 高效包装器

为啥某些python代码的包装器和包装函数是相同的。

SWIG包装器未声明(此功能首次使用)

试图理解 Python 包装器