如何处理延迟作业的循环

时间:2017-07-18 11:08:10

标签: ruby-on-rails delayed-job

我在延迟的工作中添加pdf生成任务,如下所示

@employe.each do |em|
        em.details.each do |detail|
          Delayed::Job.enqueue GeneratePdf.new(detail)
        end
      end

这样可以正常工作,但需要2分钟才能遍历所有雇员及其详细信息并完成请求。

我怎样才能减少这段时间?或者我如何添加循环延迟作业。我目前生成pdf类

class GeneratePdf < Struct.new(:detail)
  def perform
    filename =  detail.id.to_s
    pdf = EmployeDetailsPdf.new(detail) #this generates a pdf
    pdf.render_file(filename + ".pdf")
  end
end

1 个答案:

答案 0 :(得分:2)

首先,我假设您的struct coord *read_init(FILE *fp, int *n){ //... char *line; //... for(int i = 0; i<(*n); i++) { read_line(fp, line, MAX_COORDINATE_SIZE); coords[i] = read_coords(line); //Put coordinates in coords line = '\0'; // <<--- you set line to NULL here. *line = 0; // this is what you wanted to do, is not necessary... } // .... } 变量应该被称为@employe并且只存储:几名员工

您通常只应将对象的ID传递给作业。该作业将查询数据库以检索该员工。如果需要更长的时间并不重要,那就是这里的工作。

就像那样,你将主要的工作量传递给工作:

@employees