Mam do pobrania ok. 1500 plików xml (przykład). Od razu nasunął mi się gem Typhoeus, który pobierze wiele plików równolegle, niestety tutaj pojawił się problem. Wykorzystuje taki kodu:
hydra = Typhoeus::Hydra.new
links.each do |link|
request = Typhoeus::Request.new(link)
request.on_complete do |response|
....
end
hydra.queue(request)
end
hydra.run
Efekt jest taki, że jeśli linków jest więcej niż 200 to tylko 200 plików pobieranych jest prawidłowo, a reszta ma
response.body == ""
czyli plik się nie pobiera. To do czego dotarłem to ustawienia Hydry, domyślnie ma ustawione max_concurrency na 200. Jeśli tą wartość zwiększę, to tyle samo linków pobiera się prawidłowo. Ale to chyba nie tędy droga. Czy da się jakoś zrobić, żeby typhoeus jakoś kolejkował te requesty i wywoływał tylko określoną liczbę requestów w danej chwili?
Z przykładów znalezionych w internecie wywnioskowałem że za to powinna być odpowiedzialna właśnie zmienna max_concurrency, ale najwidoczniej działa to trochę inaczej niż zakładałem.