ruby: множественные идентичные или синхронизированные экземпляры механизации? - PullRequest
2 голосов
/ 08 августа 2011

Насколько я знаю, я читал в другом месте, что рубиновая механизация не сохраняет потоки.Таким образом, чтобы ускорить некоторые «получения», я решил создать несколько независимых объектов 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 Ответ

2 голосов
/ 04 июня 2012

Это работает до тех пор, пока вы не измените значение для 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
...