Python FTPLib zu langsam?
Ich habe das Spiel mit Python-FTP-Bibliothek und fange an zu denken, dass Sie zu langsam ist, im Vergleich zu einem Skript-Datei in DOS? Ich führe Sitzungen, in denen ich laden Sie Tausende von Daten-Dateien (ich glaube, ich habe über 8 Mio jetzt). Meine Beobachtung ist, dass der download-Prozess scheint zu nehmen, fünf bis zehn mal so lange in Python, als es im Vergleich zu den ftp-Befehle in der DOS-shell.
Da ich nicht wollen, dass jemand zu beheben mein code, den ich habe, nicht enthalten jede. Ich bin mehr daran interessiert, Verständnis, wenn sich meine Beobachtung ist gültig "oder" wenn ich mehr basteln mit den Argumenten.
- Es wäre schön zu sehen, Ihre python-Skript und die zugehörigen dos-batch-Datei-script zum Vergleich. In Ihrem python-Skript stellen Sie sicher, Sie verwenden Sie Ihre erste Verbindung.
- Die Antwort unten (stackoverflow.com/a/26314086/3273031) zu sagen zu ändern Sie die Standard-Blockgröße wirklich sehr geholfen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
FTPLib ist in Python implementiert, während Ihre "DOS-Script" ist ein script, das ruft eine kompilierte Befehl. Durch das ausführen dieses Befehls ist wahrscheinlich schneller als die Interpretation von Python-code. Wenn es zu langsam für Sie, schlage ich vor, rufen Sie die DOS-Eingabeaufforderung von Python mit der subprocess-Modul.
define blocksize zusammen mit storbinary der ftp-Verbindung,so erhalten Sie von 1,5-3,0 x schneller Verbindung als FTP Filezilla 🙂
FTPlib ist vielleicht nicht die sauberste Python-API, ich glaube nicht, dass es so schlecht ist, dass es laufen zehn mal langsamer als eine DOS-shell Skript.
Sofern Sie nicht jeden code zu vergleichen, e.g-shell und Sie python-snippet zu batch-dl 5000 Dateien, ich kann nicht sehen, wie wir Ihnen helfen können.
Die Geschwindigkeit problem liegt wohl in deinem code. FTPlib ist nicht 10 mal langsamer.
Größere blocksize ist nicht immer das optimum.
Zum Beispiel das hochladen der gleichen 167 MB-Datei über WLAN-Netzwerk auf demselben FTP-server bekam ich folgende Zeiten (in Sekunden) für verschiedene blocksizes:
In dieser Konfiguration die optimale rund 32768 (4x8192).
Aber wenn ich WLAN anstelle, habe ich diese mal:
In diesem Fall gab es mehrere optimale blocksize-Werte, alle anderen von 32768.
So, vielleicht auch nicht 10x. Aber meiner läuft von diesem speichern einer Datei werden alle oben 160s auf einem laptop mit einem core 1,8 Ghz core i7 und 8 GB ram (sollte overkill) unter Windows 7. Ein native-client hat es bei 100s. Ohne die Datei zu speichern, ich bin nur unter der 70er.
Ich kam auf diese Frage, weil ich gesehen habe, langsam mit ftplib auf einem mac (ich werde erneut führen Sie den test erneut durchführen, sobald ich Zugang habe, die Maschine wieder). Zwar werde async mit der schreibt, könnte eine gute Idee sein, in diesem Fall auf einem realen Netzwerk, ich vermute, das wäre viel weniger ein Gewinn.
deaktivieren, ftplib und ausführen von ftp-Server über MS-DOS
innen ftpscript.txt