Ant*_*nel 7 python rate-limiting ratelimit celery
我正在寻找一种限制何时调用函数的方法,但仅当输入参数不同时,即:
@app.task(rate_limit="60/s")
def api_call(user):
do_the_api_call()
for i in range(0,100):
api_call("antoine")
api_call("oscar")
Run Code Online (Sandbox Code Playgroud)
所以,我想api_call("antoine")被称为每秒60次和api_call("oscar") 每秒60次为好.
有什么帮助,我该怎么办?
--EDIT 27/04/2015我尝试在任务中调用带有rate_limit的子任务,但它也不起作用:rate_limit总是应用于所有实例化的子任务或任务(这是逻辑的).
@app.task(rate_limit="60/s")
def sub_api_call(user):
do_the_api_call()
@app.task
def api_call(user):
sub_api_call(user)
for i in range(0,100):
api_call("antoine")
api_call("oscar")
Run Code Online (Sandbox Code Playgroud)
最好!
我认为使用 Celery 的内置任务限制器不可能实现这一点。
假设您正在为 API 使用某种缓存,最好的解决方案可能是创建任务名称和参数的哈希值,并将该密钥用于基于缓存的节流器。
如果您使用 Redis,则可以设置 60 秒超时的锁定,或使用增量计数器来计算每分钟的调用次数。
这篇文章可能会为您提供一些有关使用 Redis 对 Celery 任务进行分布式节流的指导:
https://callhub.io/distributed-rate-limiting-with-redis-and-celery/
| 归档时间: |
|
| 查看次数: |
3125 次 |
| 最近记录: |