0

私は Thread をかなり頻繁に使用していますが、これが良い習慣であるかどうか疑問に思います:

    def self.create_all_posts
      threads = []
      self.fetch_all_posts.each do |e|
        if e.present?
          threads << Thread.new {
          self.create(title: e[:title], url: e[:url])
          }
        end
      end
        main     = Thread.main       # The main thread
        current  = Thread.current    # The current thread
        all      = Thread.list       # All threads still running

        all.each { |t| t.join }
    end
4

1 に答える 1

0

基本的に、はい。config.threadsafe を呼び出す必要があるかもしれません! application.rb で、database.yml で allow_concurrency: true を指定することもできます。Rails のバージョンによっては、少なくとも最初の 1 つが必要になる場合があります。そうしないと、db リクエストが並行して実行されない可能性があります。

それでも、あなたの場合、「INSERT INTO ...」を並行して実行してもパフォーマンスに大きな影響はないかもしれません.dbホストのディスク、メモリ、CPUの状況に大きく依存すると考えられます。ところで、fetch_all_posts のフェッチにかなりの時間がかかる場合は、find_each アプローチを使用できます。これにより、巨大なデータ セットのスキャンと並行して作成スレッドが開始される可能性があります。find_each の「ページ」サイズを設定して、たとえば 10 件の投稿ごとに広告を実行することができます。

于 2012-12-03T00:53:20.133 に答える