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



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

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

是否有办法对已经"配置"的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

在更改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

最新更新