mirror of
https://github.com/edcommonwealth/sqm-dashboards.git
synced 2026-03-07 21:48:16 -08:00
fix: make survey data uploads threaded
This commit is contained in:
parent
23e5f9bb48
commit
6b75af4c7d
1 changed files with 29 additions and 12 deletions
|
|
@ -28,7 +28,6 @@ class SurveyResponsesDataLoader
|
||||||
headers_array = CSV.parse(headers).first
|
headers_array = CSV.parse(headers).first
|
||||||
all_survey_items = survey_items(headers:)
|
all_survey_items = survey_items(headers:)
|
||||||
|
|
||||||
survey_item_responses = []
|
|
||||||
batch_size = 1000
|
batch_size = 1000
|
||||||
|
|
||||||
lines = []
|
lines = []
|
||||||
|
|
@ -38,9 +37,22 @@ class SurveyResponsesDataLoader
|
||||||
|
|
||||||
lines << line
|
lines << line
|
||||||
end
|
end
|
||||||
|
slices = []
|
||||||
|
|
||||||
lines.each_slice(batch_size) do |slice|
|
lines.each_slice(batch_size) do |slice|
|
||||||
|
slices << slice
|
||||||
|
end
|
||||||
|
|
||||||
|
pool_size = 4
|
||||||
|
jobs = Queue.new
|
||||||
|
slices.each { |slice| jobs << slice }
|
||||||
|
|
||||||
|
workers = pool_size.times.map do
|
||||||
|
Thread.new do
|
||||||
|
while slice = jobs.pop(true)
|
||||||
|
|
||||||
slice.each do |line|
|
slice.each do |line|
|
||||||
|
survey_item_responses = []
|
||||||
CSV.parse(line, headers:).map do |row|
|
CSV.parse(line, headers:).map do |row|
|
||||||
row = process_row(row: SurveyItemValues.new(row:, headers: headers_array,
|
row = process_row(row: SurveyItemValues.new(row:, headers: headers_array,
|
||||||
survey_items: all_survey_items, schools:, academic_years:))
|
survey_items: all_survey_items, schools:, academic_years:))
|
||||||
|
|
@ -55,6 +67,11 @@ class SurveyResponsesDataLoader
|
||||||
survey_item_responses = []
|
survey_item_responses = []
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
rescue ThreadError
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
workers.each(&:join)
|
||||||
|
|
||||||
GC.start
|
GC.start
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue