【问题标题】:Spread Celery Django tasks out over 24 hours在 24 小时内传播 Celery Django 任务
【发布时间】:2019-08-07 09:18:03
【问题描述】:
我有任务向 API 发出 get 请求。
我有大约 70 000 个请求需要处理,我想在 24 小时内将它们分发出去。因此,并非所有 70k 请求都在例如上午 10 点运行。
我将如何在 celery django 中做到这一点?我一直在寻找几个小时,但找不到一个好的简单解决方案。
数据库中有一个需要刷新的游戏列表。目前我有一个每小时创建任务的 cron。但是为每个游戏创建一个任务并让它每小时重复一次会更好吗?
【问题讨论】:
标签:
python
python-3.x
celery
django-celery
【解决方案1】:
典型的方法是在您需要完成某些工作时发送它们,无论有多少(甚至数十万)。但是,执行由您订阅专用队列的工作人员(和工作进程)的数量控制。这里的关键是专用队列——这是一种不允许所有工作人员开始执行新创建任务的常用方法。这超出了 Celery 的基本用法。对于此用例,您需要使用 celery multi,或者使用不同的队列手动创建两个或多个单独的 Celery worker。
如果您不想让事情变得过于复杂,您可以使用当前设置,但将这些任务设置为最低优先级,因此如果创建了任何新的、更重要的任务,它将首先执行。这种方法的问题是,据我所知,只有 Redis 和 RabbitMQ 后端支持优先级。