From 2e7d1c111d44323711608a62258cdc710a2e6044 Mon Sep 17 00:00:00 2001 From: daiao <358551898@qq.com> Date: Wed, 15 Jan 2020 16:03:20 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E8=A1=8C=E9=80=9F=E5=BA=A6=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/tasks/statistic_subject_info.rake | 33 +++++++++++++++------------ 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/lib/tasks/statistic_subject_info.rake b/lib/tasks/statistic_subject_info.rake index 92f5b1683..4f7fc2991 100644 --- a/lib/tasks/statistic_subject_info.rake +++ b/lib/tasks/statistic_subject_info.rake @@ -122,21 +122,24 @@ namespace :subjects do buffer_size = 0 column_value = "user_id, subject_id, username, passed_myshixun_count, passed_games_count, " + "code_line_count, evaluate_count, cost_time, created_at, updated_at" - subjects.find_each(batch_size: 50) do |subject| - puts("---------------------user_info_statistic: #{subject.id}") - data = Subjects::UserUsedInfoService.call(subject) - Parallel.each(data, in_processes: 10) do |key| - next if key[:user_id].nil? - str += ", " unless str.empty? - str += ("(#{key[:user_id]}, #{subject.id}, '#{key[:name].gsub(/'/, '"')}', #{key[:passed_myshixun_count]}, " + - "#{key[:passed_games_count]}, #{key[:code_line_count]}, #{key[:evaluate_count]}, #{key[:cost_time]}, " + - "'#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')") - buffer_size += 1 - if buffer_size == 1000 - sql = "REPLACE INTO subject_user_infos(#{column_value}) VALUES #{str}" - ActiveRecord::Base.connection.execute sql - str = "" - buffer_size = 0 + + subjects.find_in_batches(batch_size: 50) do |s| + Parallel.each(s, in_processes: 10) do |subject| + puts("---------------------user_info_statistic: #{subject.id}") + data = Subjects::UserUsedInfoService.call(subject) + Parallel.each(data, in_processes: 10) do |key| + next if key[:user_id].nil? + str += ", " unless str.empty? + str += ("(#{key[:user_id]}, #{subject.id}, '#{key[:name].gsub(/'/, '"')}', #{key[:passed_myshixun_count]}, " + + "#{key[:passed_games_count]}, #{key[:code_line_count]}, #{key[:evaluate_count]}, #{key[:cost_time]}, " + + "'#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')") + buffer_size += 1 + if buffer_size == 1000 + sql = "REPLACE INTO subject_user_infos(#{column_value}) VALUES #{str}" + ActiveRecord::Base.connection.execute sql + str = "" + buffer_size = 0 + end end end end