Sha256: 7a986be66b5fa28227ecde81efc26dd598090968e393739c29b91b644966dc79

Contents?: true

Size: 1.06 KB

Versions: 13

Compression:

Stored size: 1.06 KB

Contents

module ProconBypassMan
  class Worker
    attr_accessor :pid

    def self.run
      new.run
    end

    # @return [Worker]
    def run
      return self if @thread
      @thread = Thread.new do
        while(item = ProconBypassMan::Background::JobQueue.pop)
          # プロセスを越えるので文字列になっている. evalしてクラスにする
          work(job_class: eval(item[:job_class]), args: item[:args])
          sleep(0.2) # busy loopしないように
        end
      end

      return self
    end

    def work(job_class: , args: )
      begin
        job_class.perform(*args)
      rescue => e
        ProconBypassMan.logger.error(e)
        if job_class.respond_to?(:re_enqueue_if_failed) && job_class.re_enqueue_if_failed
          job_class.perform_async(args)
          ProconBypassMan.logger.error("エラーが起きたので#{job_class}を積み直しました。")
        end
      end
    end

    # 重要な非同期ジョブは存在しないのでqueueが捌けるのを待たずにkill
    def shutdown
      @thread&.kill
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
procon_bypass_man-0.3.12 lib/procon_bypass_man/worker.rb
procon_bypass_man-0.3.11 lib/procon_bypass_man/worker.rb
procon_bypass_man-0.3.10 lib/procon_bypass_man/worker.rb
procon_bypass_man-0.3.9 lib/procon_bypass_man/worker.rb
procon_bypass_man-0.3.8.1 lib/procon_bypass_man/worker.rb
procon_bypass_man-0.3.8 lib/procon_bypass_man/worker.rb
procon_bypass_man-0.3.7 lib/procon_bypass_man/worker.rb
procon_bypass_man-0.3.6 lib/procon_bypass_man/worker.rb
procon_bypass_man-0.3.5 lib/procon_bypass_man/worker.rb
procon_bypass_man-0.3.4 lib/procon_bypass_man/worker.rb
procon_bypass_man-0.3.3.1 lib/procon_bypass_man/worker.rb
procon_bypass_man-0.3.3 lib/procon_bypass_man/worker.rb
procon_bypass_man-0.3.2 lib/procon_bypass_man/worker.rb