386 Stimmen

Was ist der schnellste Weg, 100.000 HTTP-Anfragen in Python zu senden?

Ich öffne eine Datei, die 100.000 URLs enthält. Ich muss eine HTTP-Anfrage an jede URL senden und den Statuscode ausgeben. Ich verwende Python 2.6 und habe mir bisher die vielen verwirrenden Möglichkeiten angeschaut, wie Python Threading/Concurrency implementiert. Ich habe mir sogar die Python Übereinstimmung Bibliothek, kann aber nicht herausfinden, wie man dieses Programm richtig schreibt. Ist jemand auf ein ähnliches Problem gestoßen? Ich schätze, ich muss generell wissen, wie man Tausende von Aufgaben in Python so schnell wie möglich ausführt - ich nehme an, das bedeutet "gleichzeitig".

0voto

djangofan Punkte 26852

Erwägen Sie die Verwendung von Windmühle obwohl Windmill wahrscheinlich nicht so viele Themen bearbeiten kann.

Sie könnten dies mit einem handgeschriebenen Python-Skript auf 5 Rechnern tun, wobei jeder Rechner eine ausgehende Verbindung über die Ports 40000-60000 herstellt und 100.000 Port-Verbindungen öffnet.

Außerdem könnte es hilfreich sein, einen Beispieltest mit einer QA-Anwendung mit schönem Thread durchzuführen, wie z. B. OpenSTA um eine Vorstellung davon zu bekommen, wie viel jeder Server bewältigen kann.

Versuchen Sie auch, einfaches Perl mit der Klasse LWP::ConnCache zu verwenden. Auf diese Weise erhalten Sie wahrscheinlich mehr Leistung (mehr Verbindungen).

0voto

gia huy Punkte 159

[Werkzeug]

Apache-Bank ist alles, was Sie brauchen. - Ein Befehlszeilen-Computerprogramm ( CLI ) zur Messung der Leistung von HTTP-Webservern

Ein schöner Blogbeitrag für Sie: https://www.petefreitag.com/item/689.cfm (aus Pete Freitag )

-1voto

pestilence669 Punkte 5568

Am einfachsten wäre es, die in Python eingebaute Threading-Bibliothek zu verwenden. Sie sind keine "echten" / Kernel-Threads Sie haben Probleme (wie die Serialisierung), sind aber gut genug. Sie brauchen eine Warteschlange und einen Thread-Pool. Eine Option ist hier aber es ist trivial, eine eigene zu schreiben. Sie können nicht alle 100.000 Aufrufe parallelisieren, aber Sie können 100 (oder so) von ihnen gleichzeitig abfeuern.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X