[RoR ] 為何Thread會有漏做的情形?

看板Ruby作者 (neverfly)時間15年前 (2010/03/08 18:08), 編輯推噓1(102)
留言3則, 3人參與, 最新討論串1/1
環境: Ruby 1.8.6 Rails 2.2.2 狀況: 我要從別的網站上抓資料之後儲存到自己的資料庫中。 由於資料是一筆一筆的抓, 所以我想用Thread同時分頭進行。 程式大致上有點像這樣 datas.each{|data| Thread.new do //do something to get data... A.create(.....) end } 這時候執行結果是正常的, 但當我要多做一步處理時,像這樣 datas.each{|data| Thread.new do //do something to get data... a=A.create(.....) a.save! //do something b=B.create() b.a_id=a.id; puts "a.id=#a.id" b.save! end } A的部份有順利完成, B的部份卻只做到data的最後一筆,中間的都漏做了, 奇怪的是puts "a.id=#a.id"這行卻又全部有印到, 而且把Thread的部份拿掉讓它慢慢執行,結果卻又是正常的。 而database的連線數我也已經提高了, 請問能幫我分析一下可能的原因嗎?謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.55.7 ※ 編輯: neverfly 來自: 59.120.55.7 (03/08 18:10) ※ 編輯: neverfly 來自: 59.120.55.7 (03/08 18:13)

03/08 18:12, , 1F
thread 要 join
03/08 18:12, 1F

03/08 21:23, , 2F
不是所有東西都是 thread-safe, 用到了哪些?
03/08 21:23, 2F

03/09 00:09, , 3F
沒做的部份都是寫入資料庫,我調看看mysql連線數好了
03/09 00:09, 3F
文章代碼(AID): #1BbCoCAG (Ruby)
文章代碼(AID): #1BbCoCAG (Ruby)