如何为顺序任务执行多个队列

时间:2016-11-10 17:29:18

标签: django-rest-framework celery django-celery celery-task celery-canvas

我遇到的情况是单个或多个公司可以拥有多个用户,并且所有用户都可以使用资源,但只有一个用户可以同时使用资源而其他用户必须等待。因此,我在表中维护用户挂起的任务数据,并使用celery函数AsyncResult检查是否有任何任务状态未决,如果它处于挂起状态,则不会产生其他任务。接下来,如果任务成功,那么我查询我的表并立即获取所有待处理任务并将其放入celery canvas function chain()以按顺序执行任务。

我在我的Django API中创建了一个celery函数,它为每个请求执行,如果任务完成,我从表中删除了该任务条目,所以我为 post _delete 编写了一个django信号接收函数这对于已删除任务所属的同一公司来说会获得更多任务。

我遵循的流程步骤如下:

  • 执行芹菜功能
  • 如果没有任务执行公司任务,我会动态为每个公司创建单独的队列。
  • 如果有其他任务,我只根据以前的任务状态存储它们。
  • 如果任务被删除,那么再次使用信号事件我检查公司是否有任何其他任务被删除,如果在链中执行它们
  • 因此,对于每个公司,只有初始任务从API执行一次,其余的从信号事件执行。

现在更糟糕的是,当我用10个用户测试这个场景时,任务执行两次,有时同时执行。如果我做错了,请告诉我。

注意:我之所以选择芹菜是因为我有多个公司方案,他们的用户可以并行运行他们的任务。资源争用仅针对单个公司中的多个用户的资源。

0 个答案:

没有答案
相关问题