我有一个应用程序,在每次部署后需要杀死特定的Sidekiq工作者。正如api所建议的,我可以通过从队列Sidekiq::Queue.new.clear中删除所有作业来完成。然而,运行这个命令后,工作线程大小Sidekiq::Workers.new.size的数量仍然相同。实际上,我已经尝试了很多方法,但没有任何效果。请帮助!
Sidekiq::Queue.new.clear
Sidekiq::Workers.new.size
5cnsuln71#
一旦工作线程开始处理作业,您就不能在不关闭整个进程的情况下从外部停止它。没有安全的方法可以停止线程。您可以通过定期检查员工代码以查看是否应该停止(类似于作业取消),在自己的代码中添加停止员工的功能。
1tu0hz3e2#
我自己还没试过,但根据文件:您可以将所有要删除的工作线程添加为队列的一部分(例如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线程数,您将使用Sidekiq::Worker.size如果我误解了你的问题,请告诉我。
gab6jxml3#
简单回答。终止进程。然后运行此命令。
Sidekiq::Queue.new("default").clear
“default”是您的队列名称。
3条答案
按热度按时间5cnsuln71#
一旦工作线程开始处理作业,您就不能在不关闭整个进程的情况下从外部停止它。没有安全的方法可以停止线程。
您可以通过定期检查员工代码以查看是否应该停止(类似于作业取消),在自己的代码中添加停止员工的功能。
1tu0hz3e2#
我自己还没试过,但根据文件:
您可以将所有要删除的工作线程添加为队列的一部分(例如post_deploy)
要删除工作机:
要查找队列下的作业数,需要按以下方式查找
为了只查找当前正在运行的Sidekiq线程数,您将使用Sidekiq::Worker.size
如果我误解了你的问题,请告诉我。
gab6jxml3#
简单回答。终止进程。然后运行此命令。
“default”是您的队列名称。