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
3条答案
按热度按时间rbl8hiat1#
没有被认可的方法来执行此操作。您无法在线程执行时安全地停止它。您需要更改作业以定期检查它是否应该停止。
您可以设置网络超时对任何第三方呼叫您正在使他们超时。
ajsxfq5m2#
您可以将职务代码封装在超时块中,如下所示:
超时::超时(2.hours)do
结束
作业将在2小时后自动失败。
ryoqjall3#
这与 Yasson 建议的方法相同,但更为具体。