Mam tablicę adresów URL i nie chcę otwierać każdego z nich i pobrać określonego tagu.
Ale chcę to zrobić równolegle.Równoległe żądania HTTP w ruby
Oto pseudokod za to, co chcę zrobić:
urls = [...] tags = [] urls.each do |url| fetch_tag_asynchronously(url) do |tag| tags << tag end end wait_for_all_requests_to_finish()
jeżeli mogłoby to być zrobione w miły i bezpieczny sposób, że byłoby super.
Mogę użyć wątku, ale nie wygląda na to, że tablice są bezpieczne dla wątków w ruby.
Haha, to było dokładnie to samo rozwiązanie, które napisałem! :) –
Jeśli większość pracy to IO, liczba rdzeni nie powinna mieć znaczenia, czy nie? – ben
@ben: To prawda. Nadal jednak posiadanie zbyt wielu wątków i otwartych połączeń w tym samym czasie może przynosić efekty odwrotne do zamierzonych. Firefox używa domyślnie 8 połączeń do potokowania HTTP, tak myślę, więc używam tego jako sugerowanej wartości (zamiast 5). –