Frage

Was ist der schnellste Weg, um eine große Anzahl von Dateien (relativ klein 10-50kB) von Amazon S3 von Python zu bekommen? (In der Größenordnung von 200.000 - Millionen Dateien).

Im Moment habe ich Boto bin mit der Unterzeichnung URLs zu erzeugen, und mit pycurl die Dateien nacheinander zu bekommen.

Würde irgendeine Art von Gleichzeitigkeit Hilfe? PyCurl.CurlMulti Objekt?

Ich bin offen für alle Vorschläge. Dank!

War es hilfreich?

Lösung

Im Fall von Python, wie dies IO gebunden, werden mehrere Threads der CPU verwenden, aber es wird wahrscheinlich nur einen Kern aufbrauchen. Wenn Sie mehrere Kerne haben, können Sie den neuen Multi-Prozessor-Modul rel="nofollow. Selbst dann können Sie jedes Verfahren verwenden mehrere Threads haben wollen. Sie müssten einige Optimierungen der Anzahl der Prozessoren und Threads tun.

Wenn Sie mehrere Threads zu tun verwenden, ist dies ein guter Kandidat für die Queue Klasse.

Andere Tipps

Ich weiß nichts über Python, aber im Allgemeinen würden Sie die Aufgabe brechen wollen in kleinere Stücke, so dass sie gleichzeitig ausgeführt werden können. Man könnte es nach Dateityp oder alphabetisch oder etwas, bricht und dann ein separates Skript für jeden Teil des Bruchs heruntergekommen.

Das könnte Sie prüfen, mit s3fs und nur laufen gleichzeitig Befehle Dateisystem von Python.

Ich habe für S3 Arbeit txaws mit verdrehtem benutze, obwohl das, was Sie wollen wahrscheinlich würden einfach ist die authentifizierte URL zu erhalten und verwenden twisted.web.client.DownloadPage (standardmäßig wird aus dem Strom geht glücklich, ohne viel Datei Interaktion).

Verdrehte macht es einfach an, was auch immer Gleichzeitigkeit Sie ausführen möchten. Für etwas in der Größenordnung von 200.000, würde ich wahrscheinlich einen Generator machen und eine kooperierende verwenden, um meine Gleichzeitigkeit gesetzt und lassen Sie den Generator all erforderliche Download-Anforderung erzeugen.

Wenn Sie nicht vertraut mit verdrehtem sind, dann werden Sie feststellen, das Modell ein wenig Zeit braucht, um zu gewöhnen, aber es ist oh es wert. In diesem Fall würde ich erwarten, dass es Aufwand minimal CPU und Speicher nehmen, aber Sie würden über Dateideskriptoren kümmern. Es ist ganz einfach in der Perspektive Broker und Hof die Arbeit auf mehrere Maschinen zu mischen, sollten Sie sich um mehr Dateideskriptoren finden oder wenn Sie mehrere Verbindungen, über die haben würden Sie es mögen nach unten ziehen.

was Thread + Warteschlange, ich liebe diesen Artikel: Praktische Gewindeprogrammierung mit Python

Jeder Job kann mit geeigneten Werkzeugen durchgeführt werden:)

wollen Sie verwenden Python für Stress S3 Testen :), so schlage ich vor, ein großes Volumen Downloader-Programm zu finden und Link, um es weiter.

Unter Windows habe ich Erfahrung für die Installation von ReGet Programm (Shareware, von http://reget.com ) und der Schaffung von Herunterladen von Aufgaben über die COM-Schnittstelle.

Natürlich gibt es andere Programme mit nutzbarer Schnittstelle vorhanden ist.

Viele Grüße!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top