Domanda

Qual è il modo più veloce per ottenere un gran numero di file (relativamente piccoli 10-50 kB) da Amazon S3 da Python? (Nell'ordine di 200.000 - milioni di file).

Al momento sto usando boto per generare URL firmati e sto usando PyCURL per ottenere i file uno per uno.

Qualche tipo di concorrenza potrebbe aiutare? Oggetto PyCurl.CurlMulti?

Sono aperto a tutti i suggerimenti. Grazie!

È stato utile?

Soluzione

Nel caso di Python, poiché questo è associato a IO, più thread utilizzeranno la CPU, ma probabilmente utilizzerà solo un core. Se hai più core, potresti prendere in considerazione il nuovo modulo multiprocessor . Anche allora potresti voler fare in modo che ogni processo usi più thread. Dovresti fare alcune modifiche al numero di processori e thread.

Se usi più thread, questo è un buon candidato per la Queue classe.

Altri suggerimenti

Non so nulla di Python, ma in generale vorresti suddividere l'attività in blocchi più piccoli in modo che possano essere eseguiti contemporaneamente. È possibile suddividerlo in base al tipo di file, in ordine alfabetico o altro, quindi eseguire uno script separato per ciascuna parte dell'analisi.

Potresti considerare di utilizzare s3fs e di eseguire semplicemente comandi del file system simultanei da Python.

Sto usando txaws con twisted per il lavoro S3, anche se probabilmente vorrai solo ottenere l'URL autenticato e usare twisted.web.client.DownloadPage (per impostazione predefinita passerà felicemente dallo stream al file senza molto interazione).

Twisted semplifica l'esecuzione in qualsiasi concorrenza tu voglia. Per qualcosa dell'ordine di 200.000, probabilmente creerei un generatore e utilizzerei un collaboratore per impostare la mia concorrenza e lasciare che il generatore generi ogni richiesta di download richiesta.

Se non hai familiarità con il twisted, scoprirai che il modello richiede un po 'di tempo per abituarsi, ma ne vale davvero la pena. In questo caso, mi aspetto che ci vorrà un sovraccarico minimo di CPU e memoria, ma dovresti preoccuparti dei descrittori di file. È abbastanza facile mescolare nel broker prospettico e gestire il lavoro su più macchine se ti trovi ad aver bisogno di più descrittori di file o se hai più connessioni sulle quali vorresti che fosse abbattuto.

che dire di thread + coda, adoro questo articolo: Pratica programmazione thread con Python

Ogni lavoro può essere fatto con strumenti appropriati :)

Vuoi usare Python per lo stress test S3 :), quindi ti suggerisco di trovare un programma per il download di grandi volumi e passare il link ad esso.

Su Windows ho esperienza nell'installazione del programma ReGet (shareware, da http://reget.com ) e nella creazione download di attività tramite interfaccia COM.

Naturalmente potrebbero esistere altri programmi con interfaccia utilizzabile.

Saluti!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top