2024年11月23日土曜日

ruby で parallel する場合にはデータをスライスしてから実行したほうがいいかもしれない

ruby で parallel する場合にはデータをスライスしてから実行したほうがいいかもしれない

概要

そうしないとプロセスが複数立ち上がっても CPU の使用率が偏る気がします

環境

  • macOS 15.1.1
  • Ruby 3.3.5
  • parallel 1.26.3

サンプルコード

def analyze
  @data.each_slice(batch_size) do |sliced_data|
    tweets = Parallel.map(sliced_data, in_processes: parallel_process_count) do |d|
      parse_and_add_tweet(d['tweet']['full_text'])
    end
    @tweets.append(tweets)
  end
end
  • batch_size は @data / CPU 数
  • parallel_process_count は CPU 数
  • Parallel.map で各コアが処理した結果は @tweets に結合していく
  • こうすることで各コアに均等に処理するデータが渡り処理が効率化される (各コアのCPU使用率がちゃんと均等化される)

0 件のコメント:

コメントを投稿