ruby:多个相同或同步的机械化实例?

时间:2011-08-08 12:00:18

标签: ruby mechanize

据我所知,我在其他地方读到ruby mechanize不是线程保存。因此,为了加速一些'获取',我选择实例化几个独立的Mechanize对象并并行使用它们。这似乎工作正常

顺便说一句,我想让所有实例尽可能相似,就像分享他们可以知道的“一切”(饼干等)一样。

有没有办法制作已经'配置'的Mechanize对象的深层副本。我的目标是只配置其中一个并复制它的克隆。

例如,如果我可以像这样创建一个Mechanize对象(只是一个例子,但假设有更多的配置属性):

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

如何在获取时不会相互干扰?

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

1 个答案:

答案 0 :(得分: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