In letzter Zeit muss ich ein Programm zum Hochladen von Dateien in Amazon EC2 zu S3 in Python so schnell wie möglich implementieren. Und die Größe der Dateien sind 30KB.
Ich habe einige Lösungen versucht, mit mehreren Threads, Mehrfachverarbeitung, Co-Routine. Das Folgende ist mein Leistungstest-Ergebnis für Amazon EC2.
3600 (die Anzahl der Dateien) * 30K (Dateigröße) ~~ 105M (Gesamt) --- & gt;
%Vor%Der Code wie folgt angezeigt
Für Multithreading
%Vor%Für die Coroutine
%Vor%Für die Mehrfachverarbeitung
%Vor%Die Konfiguration der Maschine ist Ubuntu 14.04, 2 CPUs (2.50GHz), 4G Speicher
Die höchste erreichte Geschwindigkeit liegt bei 19Mb / s (105 / 5,5) . Insgesamt ist es zu langsam. Irgendeine Möglichkeit, es zu beschleunigen? Kann Stackless Python es schneller machen?
Beispiele für parallele Uploads zu Amazon S3 mit dem Python boto SDK finden Sie hier:
Anstatt den Code selbst zu schreiben, sollten Sie auch die AWS-Befehlszeilenschnittstelle (CLI) aufrufen, die kann Uploads parallel durchführen. Es ist auch in Python geschrieben und verwendet Boto.
Ich musste vor kurzem etwa 5 TB kleine Dateien nach AWS hochladen und erreichte volle Netzwerkbandbreite ~ 750 MBit (1 GB pro Server) ohne Probleme, indem ich einen höheren Wert für "max_concurrent_request" in der Datei ~ / .aws / config einstellte.
Ich habe den Prozess weiter beschleunigt, indem ich mehrere Upload-Jobs über eine bash for-Schleife gestartet und diese Jobs an verschiedene Server gesendet habe.
Ich habe auch versucht, Python zB. s3-parallel-put, aber ich denke, dieser Ansatz ist viel schneller. Wenn die Dateien zu klein sind, sollte man natürlich folgendes beachten: Komprimieren - & gt; Lade es auf EBS / S3 hoch und entpacke es dort
Hier ist ein Code, der helfen könnte.
%Vor%Dann starten Sie mehrere aws Kopieraufträge, zB:
%Vor%