clockwork+sidekiq做耗时任务

2013年9月28日 10:29

sidekiq是一个基于colluloid的任务队列系统,在使用sidekiq之前,我自己用clockwork和redis构建了一个任务调度和分发系统,其中有一些统计的工作,需要遍历redis中的所有记录。随着记录的不断增长,遍历一次的时间越来越长,影响到clockwork的工作了,于是将这部分耗时的工作丢给sidekiq处理。

将原来的类变成sidekiq的worker,将所有这些类的rb文件在sidekiq_env.rb中require进来。

class HardJob
  include Sidekiq::Worker
  def perform opt=:take_snapshot
    case opt.to_sym
    when :take_snapshot
      HardJob.new.take_snapshot
    when
    ...
  end
  ...
end

clockwork的脚本中,require "sidekiq_env.rb"

HardJob.delay.perform_async :take_snapshot

在另一个终端中运行

sidekiq -r ./sidekiq_env.rb

从日志中可以看到sidekiq开始异步执行任务。