简单的python速率限制对象

ratelimiter的Python项目详细描述


PyPI VersionBuild StatusPython VersionLicense

提供速率限制的简单python模块。

概述

这个包提供ratelimiter模块,它确保 操作在 给定的时间段。在使用第三方api时,这可能会证明是有用的 这需要例如每秒最多10个请求。

用法

装潢师

fromratelimiterimportRateLimiter@RateLimiter(max_calls=10,period=1)defdo_something():pass

上下文管理器

fromratelimiterimportRateLimiterrate_limiter=RateLimiter(max_calls=10,period=1)foriinrange(100):withrate_limiter:do_something()

回拨

回调是在它自己的线程中调用的,因此回调可以使用 sleep不延迟速率限制。

importtimefromratelimiterimportRateLimiterdeflimited(until):duration=int(round(until-time.time()))print('Rate limited, sleeping for {:d} seconds'.format(duration))rate_limiter=RateLimiter(max_calls=2,period=3,callback=limited)foriinrange(3):withrate_limiter:print('Iteration',i)

输出:

Iteration 0
Iteration 1
Rate limited, sleeping for 3 seconds
Iteration 2

异步

RateLimiter对象可以在上的async with语句中使用 python 3.5+。注意,在这个上下文中,回调必须是一个协程。 协同程序回调不在单独的线程中调用。

importasyncioimporttimefromratelimiterimportRateLimiterasyncdeflimited(until):duration=int(round(until-time.time()))print('Rate limited, sleeping for {:d} seconds'.format(duration))asyncdefcoro():rate_limiter=RateLimiter(max_calls=2,period=3,callback=limited)foriinrange(3):asyncwithrate_limiter:print('Iteration',i)loop=asyncio.get_event_loop()loop.run_until_complete(coro())

热门话题
java如何在表被注释到配置之前获取表的元数据?   java滚动条不会出现在JList上   java JOGL监视器GPU内存   java为什么要使用RecyclerView onDraw延迟   java定制Oppo Reno 2 Z CPH1951(手机型号)的固件(闪存文件)   java自定义线程池执行器   java如何解决发布版本中重复的jar条目[com/安卓/volley/R.class]?   java如何使用Bukkit API触发事件?   java在blazemeter jmeter RTE插件中使用ctrl+w输入   C#/Visual Studio的java JDT等价物   java为什么当maxread值很大而收到的消息数量很小时,卡夫卡消费者会无限期消费?   java游戏2。x:包含模板列表的绑定模型   带压缩的java日志旋转   运行时。exec用java运行程序读取它正在做什么