我正在使用sidekiq gem作为队列。而且我想在队列中处理执行并行操作。
这是我的队列代码
def perform(disbursement_id)
some logic...
Parallel.each(disbursement.employee_disbursements, in_threads: 2) do |employee|
amount = amount_format(employee.amount)
res = unload_company_account(cmp_acc_id, amount.to_s)
load_employee_account(employee) unless res.empty?
end
end
现在,当我在不使用线程的情况下使用Parallel.each()时,效果很好,但是当我使用Parallel.each(..,in_threads:3)时,它将进入队列的繁忙状态。
不确定为什么in_threads使我的队列进入繁忙状态。我无法解决。
答案 0 :(得分:0)
尝试下使其正常工作
Parallel.each(disbursement.employee_disbursements, in_threads: 2) do |employee|
ActiveRecord::Base.connection_pool.with_connection do
amount = amount_format(employee.amount)
res = unload_company_account(cmp_acc_id, amount.to_s)
load_employee_account(employee) unless res.empty?
end
end
此外,当使用地图而不是每个地图或将属性preserve_results
用作true
或false
时,该问题就消失了。这有点神秘,因为:
def each(array, options={}, &block)
map(array, options.merge(:preserve_results => false), &block)
end