2016-02-01 122 views
0

我有一個應用程序,每個部署後需要殺死特定的Sidekiq工作。因爲它是api建議我可以通過從隊列Sidekiq::Queue.new.clear中刪除所有工作來完成。如何殺死Sidekiq工人?

但是,運行此命令後,工作人員大小Sidekiq::Workers.new.size的數量仍然相同。其實,我嘗試了很多方法,但沒有任何作用。請幫忙!

+0

重複:http://stackoverflow.com/questions/12143350/gracefully-shutting-down-sidekiq-processes – aliibrahim

+0

也許我不夠了解,但我不需要停止整個sidekiq過程。相反,我想要刪除特定的工作人員。 – yzalavin

+1

我不認爲這是可能的,因爲sidekiq工作人員作爲流程運行。 – aliibrahim

回答

1

我還沒有嘗試過自己,但基於文檔:

您可以添加所有的工人打算被刪除(如post_deploy)

class MyWorker 
    include Sidekiq::Worker 
    sidekiq_options :retry => 5, :dead => false, queue: :post_deploy 

    def perform() 
    ... 
    end 
end 

對於隊列的一部分刪除工:

require 'sidekiq/api' 
Sidekiq::Queue.new("post_deploy").clear 

要查找的隊列中下作業的數量,你需要找到它這樣

Sidekiq::Queue.new("post_deploy").size 

只有找到當前正在運行,您將使用Sidekiq :: Worker.size

讓我知道如果我誤解你的問題Sidekiq線程數。

+0

如果你有興趣刪除工人正在運行,這應該就足夠了,https://github.com/mperham/sidekiq/wiki/FAQ#how-do-i-cancel-a-sidekiq-job – Prashanth

+0

是的,我試過所有這些方法。什麼都沒有 – yzalavin

2

一旦工作人員開始處理作業,無法在不關閉整個過程的情況下從外部阻止它。沒有安全的方法來阻止線程。

您可以通過讓工人代碼定期檢查以確定是否應該停止,從而增加停止工人到自己的代碼的能力,類似於job cancellation