如何杀死 Sidekiq 工人?

yza*_*vin 3 ruby ruby-on-rails sidekiq

我有一个应用程序,每次部署后都需要杀死特定的 Sidekiq 工作人员。因为它的api建议我可以通过从 queue 中删除所有作业来做到这一点Sidekiq::Queue.new.clear

但是,运行此命令后,worker 大小的数量Sidekiq::Workers.new.size仍然相同。实际上,我尝试了很多方法,但没有任何效果。请帮忙!

Mik*_*ham 6

一旦工作人员开始处理作业,您无法在不关闭整个进程的情况下从外部停止它。没有安全的方法来停止线程。

您可以通过定期检查工作人员代码以查看它是否应该停止,将停止工作人员的功能添加到您自己的代码中,类似于作业取消


Pra*_*nth 3

我自己没有尝试过,但根据文档:

您可以将所有要删除的工作人员添加为队列的一部分(例如 post_deploy)

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

  def perform()
  ...
  end
end
Run Code Online (Sandbox Code Playgroud)

删除工人:

require 'sidekiq/api'
Sidekiq::Queue.new("post_deploy").clear
Run Code Online (Sandbox Code Playgroud)

要查找队列下的作业数量,需要这样查找

Sidekiq::Queue.new("post_deploy").size
Run Code Online (Sandbox Code Playgroud)

仅为了查找当前正在运行的 Sidekiq 线程数,您将使用 Sidekiq::Worker.size

如果我误解了你的问题,请告诉我。