作者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