2011-08-08 74 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