Utilizzo il ftplib di python per trasferire molti e molti dati (~ 100 file X 2 GB) su una rete locale su un server FTP. Questo codice è in esecuzione su Ubuntu. Qui è la mia chiamata (auto è il mio oggetto FtpClient, che è un wrapper client ftplib):Python ftplib Dimensione blocco ottimale?
# Store file.
self.ftpClient.storbinary('STOR ' + destination, fileHandle, blocksize = self.blockSize, callback = self.__UpdateFileTransferProgress)
La mia domanda è, come faccio a scegliere una dimensione di blocco ottimale? La mia comprensione è che la dimensione ottimale del blocco dipende da una serie di cose, non ultima la velocità di connessione e la latenza. Il mio codice verrà eseguito su molte reti diverse con velocità diverse e quantità variabili di congestione durante il giorno. Idealmente, vorrei calcolare la dimensione ottimale del blocco in fase di esecuzione.
Le dimensioni ottimali del blocco di trasferimento FTP sarebbero uguali alle dimensioni ottimali della finestra TCP? Se questo è vero, e il ridimensionamento della finestra TCP è attivo, c'è un modo per ottenere la dimensione ottimale della finestra TCP dal kernel? Come/quando il kernel di Linux determina la dimensione ottimale della finestra? Idealmente potrei chiedere al kernel di Linux la dimensione ottimale del blocco, in modo da evitare di reinventare la ruota.
Finché rete I/O è più lento di disco I/O, [il kernel dovrebbero prendersi cura di questo per voi] (http : //en.wikipedia.org/wiki/Nagle%27s_algorithm). Si potrebbe anche considerare di impostare l'opzione 'TCP_CORK'. – Phillip
Che tipo di concorrenza ti aspetti o usi qui? Questa è intesa come un'applicazione a thread singolo? Potresti trarre vantaggio dall'interfaccia I/O asincrono multiplex? –