等待eventmachine队列为空?

时间:2015-11-26 23:07:18

标签: ruby resque eventmachine

我使用的Ruby库假定它在eventmachine(Faye)中运行,并且如果它不在EM.run上下文中,则在单独的线程中启动eventmachine reactor。当在瘦服务器内启动Rails应用程序时,没问题。但对于后台作业,Rails环境已加载,然后启动resque,这会为每个作业生成一个新进程(下面的self.perform方法)。

所以,我知道我有反应堆运行,但我需要知道从self.perform返回是否安全,因为这将退出当前进程并切断EM反应堆中的任何待处理操作。或者,我可以在EM.run块内运行该作业,但是需要知道何时可以安全退出。

class AsanaPopulateJob
  @queue = :profiles

  def self.logger; Rails.logger; end

  def self.perform(ident_id)
    begin
      logger.debug "==> Start AsanaPopulateJob[#{ident_id}]"
      ident = Identity.find(ident_id)
      conn = AsanaConnector.new(ident)
      Faye.ensure_reactor_running!
      conn.populate_profile!
      logger.debug "=== Sleep 5..."
      sleep(5)
    ensure
      logger.debug "<== Done AsanaPopulateJob[#{ident_id}]"
    end
  end
end

现在,我正在运行调用em-hiredis的函数调用,然后睡眠5秒钟让事情稳定下来。当然还有更好的东西。

0 个答案:

没有答案