我有一个 Python Django 项目,有两个 RabbitMQ worker,使用 pika lib,它接收作业以对请求中指定的某个 Django 对象执行操作。
问题是,我不希望 worker A 和 B 同时对同一个 Django 对象 x 执行他们的操作,因为这可能会导致问题。哪个 worker 先走并不重要,但如果 A 正在处理 x 并且 B 收到一份工作要处理 x,我希望这项工作等到 A 完成。
所以问题归结为能够知道其他 worker 正在做什么以及能够暂停工作直到特定时间。请注意,在我的实际项目中,我有超过 2 个必须应用此方法的 worker ,我在我的示例中选择了两个,以便更容易剖析。
感谢您的帮助, 马蒂亚斯
请您参考如下方法:
您将不得不使用一些锁定机制,可能基于数据库。
当工作人员处理 django 对象时,它会在数据库中标记工作。一个 MySQL 示例:
worker 编号 | object_id |任务类型 22 44 3//插入条目以标记作品
当另一个工作人员拿起一个 django 对象时,它会检查它是否没有像 #1 中那样标记,然后继续选择下一个项目。
当工作人员完成对对象的处理后,数据库锁定行将被删除或标记为已完成。
