У меня есть это:
class Stress
def initialize(user, pass)
@user = user
@pass = pass
@agent = Mechanize.new do |a|
a.user_agent_alias = 'Windows Mozilla'
a.history.max_size = 0
a.log = my_log
a.log.progname = @user
end
end
def browse
@agent.log.progname = @user
# open/close page
end
end
my_log = Logger.new('dump.log')
my_log.level = Logger::DEBUG
atom = Mutex.new
for i in (Attempts_start..Attempts_end)
threads << Thread.new(Creden_base + i.to_s) do |user|
stress = Stress.new(user, user)
for j in (0..Attempts_req) do
atom.synchronize {stress.browse} # has to be atomic
end
end
end
Приведенный выше код корректно идентифицирует различные потоки пользователя, устанавливая progname, но проблема в том, что мне нужно использовать класс Mutex для его синхронизации, что приводит к потере параллельных вычислений, поскольку мне приходится ждать отправки запроса и получил, прежде чем продолжить, если я хочу получить правильную progname в журналах.
Есть ли способ сделать это без использования класса Mutex. Установите progname для каждого потока при параллельном выполнении потоков в реальном времени.