2013-07-03 5 views
4

특정 Sidekiq 작업자/실행중인 작업을 도킹하거나 취소 할 수 있습니까? 효과적으로 작업자 스레드에 예외 또는 무언가를 호출하여 종료하십시오.특정 측익 근로자를 도요 또는 종업원으로 내보내는 방법은 무엇입니까?

사이드 킥 (최신)의 백그라운드 루비 (MRI 1.9.3) 작업이 매우 잘 실행되고 외부 시스템에 종속됩니다. 외부 시스템은 작업자가 계속 사용할 수 있어야하는 동안 다양한 시간이 소요될 수 있습니다.

사이드 키의 API를 사용하여 적절한 작업자에게 접근 할 수 있다고 생각하지만 문서에서 '종료/취소/종료/종료'메소드가 표시되지 않습니다. 가능한가요? 이것은 다른 사람들이 한 짓인가요?

ps. 관련 업무를 수행하는 동안 비동기 루프를 사용하여 관련 신호를 잡아 끌 수 있다는 것을 알고 있습니다.하지만 외부 시스템의 특성으로 인해 복잡해집니다.

답변

0

sidekiq이 실행중인 작업을 종료 할 수있는 방법이 없기 때문에 비동기 루프가이를 수행하는 가장 좋은 방법입니다.

def perform 
    main_thread = Thread.new do 
    ActiveRecord::Base.connection_pool.with_connection do 
     begin 
     # ... 
     ensure 
     $redis.set some_thread_key, 1 
     end 
    end 
    end 

    watcher_thread = Thread.new do 
    ActiveRecord::Base.connection_pool.with_connection do 
     until $redis.del(some_thread_key) == 1 do 
     sleep 1 
     end 
     main_thread.kill 
     until !!main_thread.status == false do 
     sleep 0.1 
     end 
    end 
    end 

    [main_thread, watcher_thread].each(&:join) 
end