看板 Ruby 關於我們 聯絡資訊
環境: 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)
ducksteven:thread 要 join 03/08 18:12
godfat:不是所有東西都是 thread-safe, 用到了哪些? 03/08 21:23
neverfly:沒做的部份都是寫入資料庫,我調看看mysql連線數好了 03/09 00:09