我遇到的情况是单个或多个公司可以拥有多个用户,并且所有用户都可以使用资源,但只有一个用户可以同时使用资源而其他用户必须等待。因此,我在表中维护用户挂起的任务数据,并使用celery函数AsyncResult
检查是否有任何任务状态未决,如果它处于挂起状态,则不会产生其他任务。接下来,如果任务成功,那么我查询我的表并立即获取所有待处理任务并将其放入celery canvas function chain()
以按顺序执行任务。
我在我的Django API中创建了一个celery函数,它为每个请求执行,如果任务完成,我从表中删除了该任务条目,所以我为 post _delete 编写了一个django信号接收函数这对于已删除任务所属的同一公司来说会获得更多任务。
我遵循的流程步骤如下:
现在更糟糕的是,当我用10个用户测试这个场景时,任务执行两次,有时同时执行。如果我做错了,请告诉我。
注意:我之所以选择芹菜是因为我有多个公司方案,他们的用户可以并行运行他们的任务。资源争用仅针对单个公司中的多个用户的资源。