Rubyでの並列性に関するすべての記事を読んだあと、混乱してしまいました。いくつかのジョブを並行して実行する方法
約1000の名前を含むnames
があります。
names
=> [{"name"=>"tickets"}, {"name"=>"events"}, {"name"=>"channel"}, {"name"=>"primes"}]
各名前について、pgを使用している場合はテーブルを削除したいと思います。
drop_str = "DROP TABLE IF EXISTS %s ;"
create_str = "CREATE TABLE %s (id SERIAL PRIMARY KEY,bkk varchar(255))"
names.each do |name|
conn.exec((drop_str % name["name"]) + (create_str % name["name"]))
end
しかし、私はテーブルを1つずつ削除したくありません。私はそれを並行してやりたい
threads = []
drop_str = "DROP TABLE IF EXISTS %s ;"
create_str = "CREATE TABLE %s (id SERIAL PRIMARY KEY,bkk varchar(255))"
names.each do |name|
threads.push(Thread.new{conn.exec((drop_str % name["name"]) + (create_str % name["name"]))})
end
して、スレッドに参加する:
私の考えでは、以下を使用することです。
実際にはテーブルは並行して削除されますか、それとも1つずつ削除されますか?
なぜそれらを並列にドロップしたいですか?その背後にある理由を説明できれば助けになるだろうか? – Abdullah
@MuhammadAbdullahは時間を節約します。私がそれを並行して実行すると、それを次々に行うよりも速くなります。 (実際には、私は1Kのテーブルを持っているので、各テーブルを前処理し、各テーブルごとに独立してレコードを追加する必要があります。 ) – Tonja
通常、SidekiqまたはjRubyは並列タスクに使用されます。 RubyのGIL(特にMRI GIL)の詳細を読む – Ilya