gpt4 book ai didi

ruby-on-rails - 如何通过作业类、队列名称和参数查询 Sidekiq 队列?

转载 作者:行者123 更新时间:2023-12-05 04:43:21 26 4
gpt4 key购买 nike

在再次入队之前,我必须检查是否已经将相同的作业添加到队列中。

目前我使用这段代码,但它非常低效,因为它将所有对象加载到内存中。有没有办法像普通事件记录一样查询?

理想情况下,我会喜欢

Sidekiq::Queue.where(job_class: "SyncJob", queue_name:"high", arguments: [1,2,3])

当前代码:

def list_queued_jobs(job_class, queue_name,  arguments)
found_jobs = []
queues = Sidekiq::Queue.all
queues.each do |queue|
queue.each do |job|
job.args.each do |arg|
if arg['job_class'].to_s == job_class.to_s && arg['queue_name'] == queue_name && ActiveJob::Arguments.deserialize(arg['arguments']) == arguments
found_jobs << job
end
end
end
end
return found_jobs
end

最佳答案

没有开箱即用的解决方案,但有一种更简单的方法来确定作业是否已经排队(true/false):

def in_queues?(job_class, queue_name,  arguments = [])
Sidekiq::Queue.new(queue_name).any? do |job|
job_class == job.klass && job.args == arguments
end
end

请记住,sidekiq 参数以数组形式呈现。例如,如果您这样称呼您的工作:

SyncJob.perform_async([1, 2, 3])

然后您检查它是否按如下方式排队:

in_queues?("SyncJob", "high", [[1, 2, 3]])

关于ruby-on-rails - 如何通过作业类、队列名称和参数查询 Sidekiq 队列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69617976/

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