Ich habe das gerade gesehen, ein Jahr und ein bisschen später, aber hoffentlich nicht zu spät für einen Googler ...
Typhoeus ist bei weitem die beste Lösung dafür. Es wickelt libcurl in einer wirklich eleganten Art und Weise. Sie können die max_concurrency
auf ungefähr 200 setzen, ohne dass sie erstickt.
In Bezug auf Timeouts, wenn Sie Typhoeus ein :timeout
-Flag übergeben, wird nur ein Timeout als Antwort registriert ... und dann können Sie die Anfrage sogar in eine andere Hydra zurücklegen, um es erneut zu versuchen, wenn Sie möchten / p>
Hier ist Ihr Programm mit Typhoeus umgeschrieben. Hoffentlich hilft das jedem, der später auf diese Seite kommt!
%Vor%Dies kann mit der C-Bibliothek cURL erfolgen. Es existiert eine Ruby-Bindung für diese Bibliothek, aber diese Funktion scheint diese Funktion nicht standardmäßig zu unterstützen. Es sieht jedoch so aus, als gäbe es einen Patch , der hinzugefügt / repariert wird (Beispielcode ist auf der Seite verfügbar). Ich weiß, das hört sich nicht gut an, aber es könnte einen Versuch wert sein, wenn es keine besseren Vorschläge gibt.
Ich habe einen ausführlichen Blogbeitrag zu diesem Thema geschrieben, der eine Antwort enthält, die der von August geposteten ähnlich ist - aber mit ein paar wichtigen Unterschieden: 1) Verfolgt alle Thread-Referenzen im "Thread" -Array. 2) Verwendet "Join" -Methode, um Threads am Ende des Programms zu binden.
%Vor%Das vollständige Tutorial (und einige Informationen zur Performance) finden Sie hier: Ссылка
Das work_queue -Symbol ist der einfachste Weg, um Aufgaben asynchron und gleichzeitig in Ihrer Anwendung auszuführen.
%Vor%Tags und Links ruby asynchronous concurrency fiber