Используя Sucker Punch с Active Job, есть ли способ отменить задание в очереди?
Так что я MyJob.perform_in(60, @user)
Который выполнит мою работу за 60 секунд.
Я хочу отменить это задание, если эта строка кода запускается снова, заменяя ее в очереди.
Мне не повезло, исследуя.
2 ответа
Внутри инфраструктуры SuckerPunch, как я вижу из исходного кода, нет встроенного метода отмены одного задания в очереди или задания, которое выполняется в данный момент. Похоже, что очистка очереди заданий является функцией "все или ничего".
Тем не менее, добавление метода расширения, который запрашивает базовую платформу ConcurrentTask и сопоставляет вашу новую работу с уже поставленной в очередь работой на основе значения параметра @user, должно быть тривиальным делом.
Чтобы получить статистику, связанную с заданиями SuckerPunch
[14] pry(main)> SuckerPunch::Queue.stats
{
"CreateVVLinkJob" => {
"workers" => {
"total" => 1,
"busy" => 0,
"idle" => 1
},
"jobs" => {
"processed" => 1,
"failed" => 0,
"enqueued" => 0
}
}
}
И очистить предыдущие вакансии
[24] pry(main)> SuckerPunch::Queue.clear
[
[0] #<SuckerPunch::Queue:0x0000000b150da0 @__lock__=#<Mutex:0x0000000b150d50>, @__condition__=#<Thread::ConditionVariable:0x0000000b150d28>, @running=false, @name="CreateVVLinkJob", @pool=#<Concurrent::ThreadPoolExecutor:0x0000000b146ad0 @__lock__=#<Mutex:0x0000000b1469e0>, @__condition__=#<Thread::ConditionVariable:0x0000000b1469b8>, @min_length=2, @max_length=2, @idletime=60, @max_queue=0, @fallback_policy=:abort, @auto_terminate=false, @pool=[], @ready=[], @queue=[], @scheduled_task_count=1, @completed_task_count=1, @largest_length=1, @ruby_pid=22314, @gc_interval=30, @next_gc_time=25973.834404648, @StopEvent=#<Concurrent::Event:0x0000000b1468c8 @__lock__=#<Mutex:0x0000000b146878>, @__condition__=#<Thread::ConditionVariable:0x0000000b146850>, @set=true, @iteration=0>, @StoppedEvent=#<Concurrent::Event:0x0000000b1467d8 @__lock__=#<Mutex:0x0000000b146788>, @__condition__=#<Thread::ConditionVariable:0x0000000b146760>, @set=true, @iteration=0>>>
]
Надеюсь, это полезно!