启动同一作业的多个延迟作业进程

2024-06-19

我在运行多个工作人员的设置中使用延迟作业。就我的问题而言,这并不重要,但假设我运行 10 个工作线程(当前在开发模式下执行此操作)。

我遇到的问题是两个不同的工作人员有时开始处理同一项工作,调用我的工作对象上的执行方法。

据我所知,延迟作业正在使用悲观锁定来防止这种情况发生,但有时在第一个工作人员有时间实际锁定作业之前,它似乎仍然有足够的时间来锁定窃取作业。

我只是想看看其他人是否遇到过这个问题,或者是否是我的设置行为不当。我正在使用 Postrgres,这种情况在我的开发机器和我托管它的 Heroku 上都会发生。

我会在工作中尝试解决这个问题,但发生这种情况仍然有点问题。理想情况下,永远不会发生延迟作业从两个进程处理同一个作业的情况。

Thanks!


我们通过 12 名工人的延迟工作运营了约 6000 万个工作岗位,但从未收到过此类报告。您的延迟作业工作者正在运行的 SQL 是什么?您是否使用正在改变 postgres 锁定行为的 gem?

对于我来说,DJ sql 是这样的:

UPDATE "delayed_jobs" SET locked_at = '2014-05-02 21:16:35.419748', locked_by =
'host:whatever.local pid:4729' WHERE id IN (SELECT id FROM "delayed_jobs" 
WHERE ((run_at <= '2014-05-02 21:16:35.415923' 
AND (locked_at IS NULL OR locked_at < '2014-05-02 17:16:35.415947') 
OR locked_by = 'host:whatever.local pid:4729') AND failed_at IS NULL) 
ORDER BY priority ASC, run_at ASC LIMIT 1 FOR UPDATE) RETURNING *

您是否遇到其他代码的锁定问题?您可以尝试运行两个 Rails 控制台会话并执行以下操作:

控制台会话 1:

User.find(1).with_lock do sleep(10); puts "worker 1 done" end

控制台会话 2:

User.find(1).with_lock do sleep(1); puts "worker 2 done" end

同时启动这两个任务,如果 2 在 1 之前结束,那么您就会遇到比延迟作业更普遍的锁定问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

启动同一作业的多个延迟作业进程 的相关文章

随机推荐

  • 如何将数据从 Parse.com 迁移到 Firebase

    我有两个当前正在使用 Parse com 的生产应用程序 我没有计划使用 Parse 服务器 我想切换到 firebase 服务 我想知道是否有办法将我的数据库从 Parse com 迁移到 Firebase Parse 和 Firebas
  • 保留字符串中的所有反斜杠

    我有一个包含反斜杠的字符串 time 4 4 key c major d 4 当我尝试将其传递到 nodejs child process 或只是将其传递到 console log 时 反斜杠被删除 console log time 4 4
  • 是否存在可处理 PRC/.mobi 文件的 PHP 库?

    我正在写一个WordPress 插件 http github com chrisclarke eBook Export Plugin for WordPress以大多数主要电子书格式从选定类别创建电子书 我想支持 MobiPocket 因为
  • Labview按钮按下一次后冻结

    我正在尝试编写一些程序来从 Labview ULx 库读取电压并将电压添加到数组中 我尝试使用事件结构来执行此操作 同时将布尔按钮的机械操作设置为 按下时锁定 然而 按下时锁定 选项似乎不起作用 程序读取电压并将其正确添加到阵列中 然后冻结
  • maven 编译失败,因为我有一个非 maven jar

    我有几个内部库 我还没有 不知道如何添加到我的本地 Maven 存储库中 我已将它们添加到项目的类路径中 但我的 maven compile 失败 指出它无法在外部 jar 中找到类 如预期 ERROR Failed to execute
  • 覆盖 Web 浏览器控件上的 window.location

    这似乎是一个奇怪的问题 但是有没有办法覆盖 window location 而不使浏览器控件导航到它 我遇到的问题是我在控件中注入 html 代码 而 window location 是 about blank 导致某些 javascrip
  • PHP 中给定日期的下一个工作日

    有人有一个 PHP 代码片段来计算给定日期的下一个工作日吗 例如 需要如何转换 YYYY MM DD 才能找到下一个工作日 例子 对于 03 04 2011 DD MM YYYY 下一个工作日是 04 04 2011 对于 2011 年 4
  • ResNet34 在 Keras.application 中可用吗?

    我想包装一个 keras ResNet34 模型 但似乎只有 ResNet50 可以从 keras applications 导入 有没有一种方法可以直接导入 ResNet34 而不用构建 ResNet34 我在网上找到了以下代码 但我想知
  • 加密数据库字段的好方法?

    我被要求加密数据库中的各种数据库字段 问题是这些字段在读取后需要解密 我在用着Django and SQL Server 2005 有什么好主意吗 See 在 SQL Server 2005 数据库中使用对称加密 https web arc
  • 如何将光标样式更改为悬停在图表点上的指针?

    我正在使用 Chart js v 2 库 当用户将鼠标悬停在图表点上时 我试图将光标样式更改为 指针 我将把它与条形图 饼图 折线图一起使用 看来charts js v 2 中应该支持这个选项 但我在任何地方都找不到例子 编辑 我没有提到我
  • 如何在自定义组件中使用 Vue.js 插件?

    我需要输出一个表格及其内容 可以通过 Ajax 进行更新 所以我打算使用vue tables 2 https github com matfish2 vue tables 2 https github com matfish2 vue ta
  • Qt - 如何使用 QNetworkAccessmanager 获取响应文本

    这是我的代码 Widget Widget manager new QNetworkAccessManager this connect manager SIGNAL finished QNetworkReply this SLOT repl
  • 有没有办法在 Blazor 中进行外部身份验证而不使用数据库?

    所以本质上我有一个 Blazor 服务器端应用程序 我正在尝试使用 Azure AD SAML 添加外部身份验证 我在用Sustainsys Saml2 AspNetCore2用于外部身份验证的包 我不太熟悉 ASP NET 或 Blazo
  • 只有根级导航目的地对于具有同质路径的导航堆栈有效

    我正在尝试整合NavigationStack在我的 SwiftUI 应用程序中 我有四个看法 CealUIApp OnBoardingView UserTypeView and RegisterView 我想从OnBoardingView
  • 在 VB.NET 中 a = b = 5 - 不可能吗?

    VB NET 中可以这样做吗a b 5 我知道 也是比较运算符 我的意思是做not结果 例如 如果 b 2 a false b 2 然而 在下面的情况下该怎么做呢 不方便在我的代码中引起了这个问题 一些对象a b z由方法中的 ref 传递
  • Django 简单历史 - save_without_historical_record() 对我不起作用

    我花了两天时间努力完成这项工作 我正在尝试使用 Django Simple History 进行记录而不保存历史记录 情况如下 我有一个模型 class Artikel models Model treaty models ForeignK
  • 如何使用 JQuery 克隆没有事件的数据元素

    我想克隆一个
  • 将列表中的列转换为 R 中的数据框

    我有使用 R 创建的以下列表 set seed 326581 X1 rnorm 10 0 1 Y1 rnorm 10 0 2 data data frame X1 Y1 lst lt replicate 100 df smpl lt dat
  • Stripe 支付网关使用 PayumBundle 创建定期付款

    我在用支付包 https github com Payum PayumBundle将 Stripe 支付网关集成到我的 symfony2 应用程序中 我可以创建成功的直接付款 但无法创建定期付款 因为捆绑包的文档非常差 我的问题是如何使用
  • 启动同一作业的多个延迟作业进程

    我在运行多个工作人员的设置中使用延迟作业 就我的问题而言 这并不重要 但假设我运行 10 个工作线程 当前在开发模式下执行此操作 我遇到的问题是两个不同的工作人员有时开始处理同一项工作 调用我的工作对象上的执行方法 据我所知 延迟作业正在使