作者neverfly (neverfly)
看板Ruby
標題[rails] 為何Thread會有漏做的情形?
時間Mon Mar 8 18:08:10 2010
環境:
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)
1F:推 ducksteven:thread 要 join 03/08 18:12
2F:→ godfat:不是所有東西都是 thread-safe, 用到了哪些? 03/08 21:23
3F:→ neverfly:沒做的部份都是寫入資料庫,我調看看mysql連線數好了 03/09 00:09