fix: make survey data uploads threaded

main
rebuilt 3 months ago
parent 23e5f9bb48
commit 6b75af4c7d

@ -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…
Cancel
Save