在我目前正在进行的项目中,我每隔一段时间就会发布一次Celery任务。这些任务适用于特定客户,因此可以执行以下任务: clientA,用于clientB和clientC。还有一些额外的条件:
Celery cookbook(另请参阅this article)显示了一种锁定机制,可确保一次只能执行一项任务。可以轻松地调整此机制,以确保单个客户端的任务一次只能执行一个。这满足了第一个条件。
第二个条件难以确保。由于任务是从不同的进程生成的,因此我无法使用任务链。也许我可以修改锁定机制以在等待锁定时重试任务,但这仍然无法保证顺序(由于重试超时,但也是由于获取锁定时的竞争条件。)
就目前而言,我已将我的并发性限制为1以确保顺序,尽管某些任务需要很长时间并且这会非常严重。