2011-08-08 110 views
1

據我所知,我在其他地方看到,紅寶石機械化不是線程保存。因此,爲了加速某些「獲取」,我選擇了實例化幾個獨立的Mechanize對象並且並行使用它們。這似乎工作OK紅寶石:機械化的多個相同或同步實例?

順便說一句,我想使所有的實例儘可能相似,就像分享他們可以知道的所有東西(餅乾等)類似。

是否有任何方法可以對已配置的Mechanize對象進行深層複製。我的目標是隻配置其中一個並複製它的克隆。

舉例來說,如果我可以創建這樣一個機械化對象(只是一個例子,但假設有更大量配置屬性):

agent = Mechanize.new { |a| a.read_timeout = 20; a.max_history = 1 } 

我怎樣才能得到的那份不'get'ing'時互相干擾?

agent2 = agent.dup # are not thread save copies 
agent2 = Marshal.load(Marshal.dump(agent)) # thorws an error 

回答

2

這似乎工作,直到您更改max_history或read_timeout的值。

class Mechanize 
    def clone 
     Mechanize.new do |a| 
      a.cookie_jar = cookie_jar 
      a.max_history = max_history 
      a.read_timeout = read_timeout 
     end 
    end 
end 

測試:

agent1 = Mechanize.new { |a| a.max_history = 30; a.read_timeout = 30 } 
agent2 = agent1.clone 
agent2.max_history == 30 # true 
agent2.cookie_jar == agent1.cookie_jar # true 
+0

有關克隆歷史,用戶代理等什麼? – Nakilon