芹菜如何分配用户'公平的任务?

时间:2014-03-31 10:53:36

标签: python django celery

我实施的任务与刮取一些URL的基本信息有关,例如标题,描述和OGP元数据。如果用户A要求抓取200个URL,并且在用户B请求10个URL之后,用户B可能会等待比他/他期望的更多。

我想要实现的目标是对每个用户的特定任务进行评级,或者至少在用户之间保持公平。

it uses the task name only

以来,速度限制的Celery实施过于宽泛

你有什么建议可以实现这种公平吗?

相关 Celery (Django) Rate limiting

3 个答案:

答案 0 :(得分:1)

另一种方法是使用锁定对单个用户进行速率限制。使用用户标识作为锁定名称。如果在某些任务相关的延迟之后锁已经被重试。

基本上,这样做:

Ensuring a task is only executed one at a time

锁定用户ID并重试,如果无法获取锁定,则不执行任何操作。此外,最好使用Redis而不是Django缓存,但无论哪种方式都可以使用。

答案 1 :(得分:0)

解决这个问题的一种方法是控制用户不会排队超过x个任务,这意味着为每个用户计算排队的未处理任务的数量(在django方面,而不是尝试使用芹菜)。

答案 2 :(得分:0)

如果不是在一个任务中运行所有URL抓取,而是将每个抓取到一个任务中,然后将它们作为chains or groups运行?