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