从工人内部的班级更新工人的状态

时间:2019-05-18 00:31:38

标签: ruby-on-rails ruby sidekiq

我有一个工作人员,它从s3下载JSON,然后是将文件解析为我的db的流JSON解析器(Oj Saj)。我可以从工作人员的类中更新工作人员的状态,但是一旦进入解析器类,它就不在工作人员的范围之内(或者对我来说似乎如此)

class Worker

  include Sidekiq::Worker
  include Sidekiq::Status::Worker



  class SajParser << Oj::Saj

    at 5 #this doesn't update the status of the worker

  end

  def perform()

    at 5 #this does update the status of the worker

  end

end

我想要一个解决方案,允许我在解析器检查JSON并将其插入db时更新worker的状态。

1 个答案:

答案 0 :(得分:0)

如果您可以使Sidekiq :: Status #at方法采用作业的jid进行更新及其当前状态,则可以。也许您可以跟进这个issue,似乎与您所拥有的一样。

如果我可能建议实际使用Sidekiq的能力来并行化解析器的工作,则将它分配给更多的工作程序,而不是让一个工作程序来完成工作,因为您将json存储在内存中,则可以为json的每个部分旋转作业,并且每当一个完成后,它应该将其状态存储在所有作业(例如DB)之间可访问的位置。