작업은 프로그래밍 방식으로 예약 된 것이 아니라 프로그래밍 방식으로 실행해야합니다. API 문서를 읽었지만 실행중인 작업 취소에 대해서는 실제로 찾지 못했습니다. sidekiq이 가능합니까?Sidekiq 단일 작업 실행 중지
직접적으로 가능하지 않을 때, 신호를 호출 할 때 작업에서 예외를 발생시킨 다음 재 시도에서 작업을 삭제하여이 문제를 피하는 것이 좋습니다. 이것은 분명히 최적이 아닙니다. 작업 자체를 중지하는
작업은 프로그래밍 방식으로 예약 된 것이 아니라 프로그래밍 방식으로 실행해야합니다. API 문서를 읽었지만 실행중인 작업 취소에 대해서는 실제로 찾지 못했습니다. sidekiq이 가능합니까?Sidekiq 단일 작업 실행 중지
직접적으로 가능하지 않을 때, 신호를 호출 할 때 작업에서 예외를 발생시킨 다음 재 시도에서 작업을 삭제하여이 문제를 피하는 것이 좋습니다. 이것은 분명히 최적이 아닙니다. 작업 자체를 중지하는
올바른 사전에
덕분에 작업을 중지 할 수있는 유일한 방법입니다. 응용 프로그램에서 해당 논리를 구현해야합니다.
https://github.com/mperham/sidekiq/wiki/FAQ#how-do-i-cancel-a-sidekiq-job
당신이 장기 실행 작업의 스레드 ID를 알고있는 경우, 그 수는 다른 작업에서 종료하기 :
class ThreadLightly
include Sidekiq::Worker
def perform(tid)
puts "I'm %s, and I'll be terminating TID: %s..." % [self.class, tid]
Thread.list.each {|t|
if t.object_id.to_s == tid
puts "Goodbye %s!" % t
t.exit
end
}
end
end
당신은 sidekiq_pusher에서 트리거 할 수 있습니다
bundle exec ./pusher.rb ThreadLightly $YOURJOBSTHREADID
UI가 보이지 않기 때문에 각 작업에서 Thread.current.object_id를 로깅해야합니다. 또한 배포 된 사이드 키를 실행하는 경우 동일한 인스턴스에서 실행될 때까지이 작업을 실행해야합니다.
정확히 무엇을 찾고 있어요!. 약간의 수정 :이 순간 (2017)에는'object_id.to_s (36)'을 사용해야합니다. – sigra
어떻게이 문제를 해결 했습니까? 해결 방법을 공유 할 수 있습니까? – lazywei
첫 번째 대답에서 FAQ를 보면 아이디어가 정말 잘 설명되어 있습니다. 수행 작업 (즉, 각 블록의 시작 부분)에 여러 개의 중단 점을 추가하여 비슷한 작업을 수행했습니다. Thats는 유스 케이스에 크게 의존합니다. 수행 방법의 실행을 중단하려는 경우/어디 – Figedi