gpt4 book ai didi

python - RabbitMQ:防止作业在两个不同的 worker 上同时运行

转载 作者:太空宇宙 更新时间:2023-11-04 06:08:47 27 4
gpt4 key购买 nike

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

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

所以问题归结为能够知道其他 worker 正在做什么以及能够暂停工作直到特定时间。请注意,在我的实际项目中,我有超过 2 个必须应用此方法的 worker ,我在我的示例中选择了两个,以便更容易剖析。

感谢您的帮助,马蒂亚斯

最佳答案

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

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

    worker 编号 | object_id |任务类型 22 44 3//插入条目以标记作品

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

  3. 当工作人员完成对对象的处理后,数据库锁定行将被删除或标记为已完成。

关于python - RabbitMQ:防止作业在两个不同的 worker 上同时运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20095451/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com