Celery:确保按顺序执行任务

时间:2014-10-21 08:34:40

标签: multithreading concurrency celery

在我目前正在进行的项目中,我每隔一段时间就会发布一次Celery任务。这些任务适用于特定客户,因此可以执行以下任务: clientA,用于clientB和clientC。还有一些额外的条件:

  • 同一客户端的任务可能永远不会并行执行。
  • 必须按顺序执行同一客户端的任务,即消息队列顺序。

Celery cookbook(另请参阅this article)显示了一种锁定机制,可确保一次只能执行一项任务。可以轻松地调整此机制,以确保单个客户端的任务一次只能执行一个。这满足了第一个条件。

第二个条件难以确保。由于任务是从不同的进程生成的,因此我无法使用任务链。也许我可以修改锁定机制以在等待锁定时重试任务,但这仍然无法保证顺序(由于重试超时,但也是由于获取锁定时的竞争条件。)

就目前而言,我已将我的并发性限制为1以确保顺序,尽管某些任务需要很长时间并且这会非常严重。

0 个答案:

没有答案