ruby-on-rails 如何在sidekiq中设置作业超时

kmpatx3s  于 2023-02-26  发布在  Ruby
关注(0)|答案(3)|浏览(172)

我遇到了一个问题:
我想为作业设置超时,这意味着当作业的处理时间大于超时时,该作业将停止。
我已经在sidekiq.yml文件中搜索了如何设置全局超时配置。
但是我想为不同的独立作业设置独立的超时,这意味着定义工人的类之一将具有特定的超时配置。
你能帮帮我吗?
非常感谢。

rbl8hiat

rbl8hiat1#

没有被认可的方法来执行此操作。您无法在线程执行时安全地停止它。您需要更改作业以定期检查它是否应该停止。
您可以设置网络超时对任何第三方呼叫您正在使他们超时。

ajsxfq5m

ajsxfq5m2#

您可以将职务代码封装在超时块中,如下所示:
超时::超时(2.hours)do

***.  do possibly long-running task *****

结束
作业将在2小时后自动失败。

ryoqjall

ryoqjall3#

这与 Yasson 建议的方法相同,但更为具体。

class MyCustomWorker 
    include Sidekiq::Worker

    def perform
        begin
            Timeout::timeout(30.minutes) do # set timeout to 30 minutes
                perform_job()
            end
        rescue Timeout::Error
            Rails.logger.error "timeout reached for worker"
        end
    end

    def perform_job
        # worker logic here
    end
end

相关问题