2

我有一个带有两个 RabbitMQ 工作人员的 Python Django 项目,使用 pika lib,它接收作业以对请求中指定的某个 Django 对象执行操作。

问题是,我不希望工作人员 A 和 B 同时对同一个 Django 对象 x 执行操作,因为这可能会导致问题。哪个工人先去并不重要,但如果 A 正在处理 x 并且 B 收到一份工作来处理 x,我希望这项工作等到 A 完成。

所以问题归结为能够知道其他工人在做什么,并且能够暂停工作直到某个时间。请注意,在我的实际项目中,我有超过 2 名工人,这必须适用于,我在我的示例中选择了两个,以便更容易剖析。

感谢您的帮助,马蒂亚斯

4

1 回答 1

1

您将不得不使用一些锁定机制,可能基于数据库。

  1. 当工作人员处理 django 对象时,它会在数据库中标记该工作。一个 MySQL 示例:

    worker_id | object_id | task_type 22 44 3 // 插入条目以标记工作

  2. 当另一个工作人员拿起一个 django 对象时,它会检查它是否没有被标记为 #1,然后继续选择下一个项目。

  3. 当工作人员完成一个对象的工作时,数据库锁行被删除或标记为 FINISHED。

于 2013-11-20T12:12:09.543 回答