Mam ten prosty przykład:otwarcia kilka wątków z wynikami Watir-webdriver w „Connection refused” błąd
require 'watir-webdriver'
arr = []
sites = [
"www.google.com",
"www.bbc.com",
"www.cnn.com",
"www.gmail.com"
]
sites.each do |site|
arr << Thread.new {
b = Watir::Browser.new :chrome
b.goto site
puts b.url
b.close
}
end
arr.each {|t| t.join}
każdym razem, kiedy uruchomić ten skrypt, dostaję
ruby/2.1.0/net/http.rb:879:in `initialize': Connection refused - connect(2) for "127.0.0.1" port 9517 (Errno::ECONNREFUSED)
lub jeden z Przeglądarki zamykają się nieoczekiwanie na co najmniej jednym z wątków.
z drugiej strony, jeśli ustawię sleep 2
na końcu każdego cyklu pętli, wszystko działa płynnie! Każdy pomysł, dlaczego tak jest?
Musi być coś związane z zrozumienia, jak działają wątki ...
Dziękuję. Teraz jest jasne. – MichaelR
Tak więc mam podobne sytuacje podczas przeszukiwania stron internetowych i kiedy wyrzucam na to zbyt wielu pracowników, zaczynam otrzymywać te same błędy. Czy istnieje sposób "ochrony" początkowego połączenia między przeglądarką a otwartym portem, aby było to zapewnione? Wolniejsze nie jest problemem, ale spanie nie działa, gdy mam gigantyczną kolejkę, a ilość czasu potrzebnego do wykonania każdego zadania jest nieco przypadkowa. Nieuchronnie, wpadnę w ten problem ... – kindofgreat
zgaduję, że mogę zachować otwarte przeglądarki i przechodzić do nowych adresów URL, intsead otwierania i zamykania instancji przeglądarki dla każdego adresu URL. Tak więc mógłbym mieć określoną liczbę równoczesnych pracowników, powiedzmy 10, i mieć wystarczająco długi okres snu między tymi 10, aby zacząć wszystko, a następnie pracownicy są przypadkami w obrębie tych dziesięciu pracowników. Nie tak elegancka i nieco bardziej skomplikowana w skali ... – kindofgreat