2011-08-08 9 views
1

私が知る限り、私はruby mechanizeがスレッドセーブではないことを他のところで読んでいます。したがって、いくつかの「取得」を加速するために、私はいくつかの独立したMechanizeオブジェクトをインスタンス化し、それらを並列に使用することを選択しました。これは正常に動作するようです。ruby​​:mechanizeの複数の同一インスタンスまたは同期インスタンス?

私はできる限りよく似たように、すべてのものを分かち合いたいと思っています(クッキーなど)。

既に設定済みのMechanizeオブジェクトを詳細にコピーする方法はありますか?私の目的は、それらのうちの1つだけを構成し、そのクローンをコピーすることです。例えば

、私はこのような(唯一の例が、設定された属性の多くのがあると仮定)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

関連する問題