据我所知,我在其他地方读到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