Как использовать потоки для создания нескольких листов в книге - используя гем Axlsx в Ruby on Rails? - PullRequest
0 голосов
/ 12 марта 2019

Я использую axlsx gem для создания книги Excel, используя код ниже; Я использовал многопоточность, ожидая, что Excel будет отображаться быстрее:

wb = xlsx_package.workbook

threads = []


wb.add_worksheet(name: "S1") do |sheet|
    sheet.sheet_view.show_grid_lines = false

threads << Thread.new{
    render :partial => "partial1_sheet1.xlsx.axlsx", :locals => {:wb => wb, :sheet => sheet}
}

threads << Thread.new{
    render :partial => "partial2_sheet1.xlsx.axlsx", :locals => {:wb => wb, :sheet => sheet}
}

threads << Thread.new{
    render :partial => "partial3_sheet1.xlsx.axlsx", :locals => {:wb => wb, :sheet => sheet}
}

end



threads << Thread.new{    
wb.add_worksheet(name: "S2") do |sheet|
    sheet.sheet_view.show_grid_lines = false

    render :partial => "partial_sheet2.xlsx.axlsx", :locals => {:wb => wb, :sheet => sheet}
end
}

threads << Thread.new{
wb.add_worksheet(name: "S3") do |sheet|
    sheet.sheet_view.show_grid_lines = false

    render :partial => "partial_sheet3.xlsx.axlsx", :locals => {:wb => wb, :sheet => sheet}
end
}

threads.each { |thr| thr.join }

Я использую 3 потока для рендеринга 3 частичек внутри sheet1 и по одной частичной для sheet2 & 3.

Когда я запускаю этот код, я получаю эту ошибку:

could not obtain a connection from the pool within 5.000 seconds (waited 5.169 seconds); all pooled connections were in use

Я получаю эту ошибку в partial1_sheet1 внутри одного из sheet.add_row методов, которые я использую для добавления строки в Excel.

Что я здесь не так делаю? Что на самом деле означает эта ошибка? И как я могу обойти это?

...