Celery中的速率限制是如何执行的?
我在运行一个Django网站,使用Celery来实现预防性缓存,也就是说,我会在用户请求之前就计算并缓存结果。
不过,我有一个Celery任务在某些情况下可能会被调用很多次(其实比它完成的速度要快一点)。我想给它设置一个速率限制,这样在不太需要的时候就不会消耗太多资源。
不过,我想先了解一下Celery的celery.task.base.Task.rate_limit这个属性是怎么执行的。任务会被拒绝吗?还是会被延迟执行,等到稍后再执行?
提前谢谢你!
1 个回答
16
被限制速率的任务不会被丢掉,它们会在后台的工作程序中排队,等到可以执行的时候再运行。
令牌桶算法并没有规定要丢弃数据包(这是一种选择,但Celery并没有这样做)。