Ich benutze Python ftplib, um viele und viele Daten (~ 100 Dateien X 2 GB) über ein lokales Netzwerk auf einen FTP-Server zu übertragen. Dieser Code läuft unter Ubuntu. Hier ist mein Ruf (Selbst ist mein FtpClient Objekt, das ist ein Wrapper um ftplib Client):Python ftplib Optimale Blockgröße?
# Store file.
self.ftpClient.storbinary('STOR ' + destination, fileHandle, blocksize = self.blockSize, callback = self.__UpdateFileTransferProgress)
Meine Frage ist, wie wähle ich eine optimale Blockgröße? Nach meinem Verständnis hängt die optimale Blockgröße von einer Reihe von Dingen ab, nicht zuletzt von Verbindungsgeschwindigkeit und Latenz. Mein Code wird in vielen verschiedenen Netzwerken mit unterschiedlichen Geschwindigkeiten und unterschiedlichen Mengen an Engpässen während des Tages ausgeführt. Im Idealfall möchte ich zur Laufzeit die optimale Blockgröße berechnen.
Wäre die optimale FTP-Übertragungsblockgröße die gleiche wie die optimale TCP-Fenstergröße? Wenn dies der Fall ist und die TCP-Fensterskalierung aktiviert ist, gibt es eine Möglichkeit, die optimale TCP-Fenstergröße vom Kernel zu erhalten? Wie/wann bestimmt der Linux-Kernel die optimale Fenstergröße? Idealerweise könnte ich den Linux-Kernel nach der optimalen Blockgröße fragen, um das Rad nicht neu erfinden zu müssen.
Solange Netzwerk i/o langsamer als Festplatten-I/O, [die Kernel sollte für Sie darum kümmern] (http : //en.wikipedia.org/wiki/Nagle%27s_algorithm). Sie können auch die Option "TCP_CORK" festlegen. – Phillip
Welche Art von Nebenläufigkeit erwarten oder verwenden Sie hier? Soll dies eine Single-Thread-Anwendung sein? Könnten Sie von gemultiplexten asynchronen E/A profitieren? –