如何处理延迟作业的循环
How to handle loop for delayed job
我在延迟作业中添加了 pdf 生成任务,如下所示
@employe.each do |em|
em.details.each do |detail|
Delayed::Job.enqueue GeneratePdf.new(detail)
end
end
这工作正常,但循环遍历所有雇员及其详细信息并完成请求大约需要 2 分钟。
我怎样才能减少这个时间?或者我怎样才能添加循环延迟作业。我当前生成的 pdf class
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
首先,我假设您的 @employe
变量应该被称为 @employees
并且只存储:几个员工
您通常应该只将对象的 ID 传递给作业。该工作将查询数据库以检索员工。时间再长一点也没关系,这就是工作的目的。
就这样,你把主要的工作负担交给了工作:
# some_controller
@employees.pluck(:id).each { |id| Delayed::Job.enqueue(id) }
# generate_pdf_job.rb
class GeneratePdf < Struct.new(:id)
def perform
employee = Employee.find(id)
employee.details.each do |detail|
pdf = EmployeDetailsPdf.new(detail)
pdf.render_file(detail.id.to_s + ".pdf")
end
end
end
我在延迟作业中添加了 pdf 生成任务,如下所示
@employe.each do |em|
em.details.each do |detail|
Delayed::Job.enqueue GeneratePdf.new(detail)
end
end
这工作正常,但循环遍历所有雇员及其详细信息并完成请求大约需要 2 分钟。
我怎样才能减少这个时间?或者我怎样才能添加循环延迟作业。我当前生成的 pdf class
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
首先,我假设您的 @employe
变量应该被称为 @employees
并且只存储:几个员工
您通常应该只将对象的 ID 传递给作业。该工作将查询数据库以检索员工。时间再长一点也没关系,这就是工作的目的。
就这样,你把主要的工作负担交给了工作:
# some_controller
@employees.pluck(:id).each { |id| Delayed::Job.enqueue(id) }
# generate_pdf_job.rb
class GeneratePdf < Struct.new(:id)
def perform
employee = Employee.find(id)
employee.details.each do |detail|
pdf = EmployeDetailsPdf.new(detail)
pdf.render_file(detail.id.to_s + ".pdf")
end
end
end