Ideale Methode zum Senden mehrerer HTTP-Anfragen über Python? [Duplikat]

7

Ich arbeite an einem Linux-Webserver, der Python-Code ausführt, um Echtzeitdaten über HTTP von einer Drittanbieter-API zu erhalten. Die Daten werden in eine MySQL-Datenbank geschrieben. Ich muss eine Menge Anfragen an viele URLs stellen, und ich muss es schnell machen (schneller = besser). Zurzeit verwende ich urllib3 als meine HTTP-Bibliothek. Was ist der beste Weg, dies zu tun? Soll ich mehrere Threads spawnen (wenn ja, wie viele?) Und jede Abfrage nach einer anderen URL abfragen? Ich würde gerne Ihre Gedanken dazu hören - danke!

    
user1094786 11.05.2012, 16:34
quelle

3 Antworten

23

Wenn viel wirklich viel ist, dann sollten Sie asynchrone io not threads verwenden.

Anfragen + gevent = grêquests

Mit

GRequests können Sie Requests mit Gevent verwenden, um asynchrone HTTP-Anfragen einfach durchzuführen.

%Vor%     
Piotr Dobrogost 12.05.2012, 00:03
quelle
1

Sie sollten sowohl Multithreading- als auch Pipelining-Anfragen verwenden. Zum Beispiel suchen- & gt; details- & gt; speichern

Die Anzahl der Threads, die Sie verwenden können, hängt nicht nur von Ihrem Gerät ab. Wie viele Anfragen kann der Dienst erfüllen? Wie viele gleichzeitige Anfragen können ausgeführt werden? Auch Ihre Bandbreite kann ein Engpass sein.

Wenn Sie sprechen über eine Art von Schaben -. Der Service, den Sie nach einer bestimmten Grenze von Anfragen blockieren könnten, so müssen Sie Proxies oder mehrere IP-Bindungen verwenden

Was mich angeht, kann ich in den meisten Fällen 50-300 gleichzeitige Anfragen von Python-Skripten auf meinem Laptop ausführen.

    
Maksym Polshcha 11.05.2012 16:42
quelle
0

Klingt wie eine hervorragende Anwendung für Verdrehte . Hier sind einige webbezogenen Beispiele , darunter, wie auf download eine Webseite . Hier ist eine weitere Frage auf Datenbankverbindungen mit Twisted-.

Beachten Sie, dass Twisted nicht auf Threads angewiesen ist, um mehrere Dinge gleichzeitig auszuführen. Es bedarf vielmehr eines kooperativen Multitasking Ansatzes - Ihr Hauptskript startet den Reaktor und den Reaktor ruft Funktionen auf, die Sie eingerichtet haben. Ihre Funktionen müssen die Kontrolle an den Reaktor zurückgeben, bevor der Reaktor weiterarbeiten kann.

    
jrennie 11.05.2012 17:40
quelle