Pregunta

¿Cuál es la forma más rápida de obtener una gran cantidad de archivos (relativamente pequeños, 10-50kB) de Amazon S3 de Python? (Del orden de 200,000 millones de archivos).

En este momento estoy usando boto para generar URL firmadas, y usando PyCURL para obtener los archivos uno por uno.

¿Ayudaría algún tipo de concurrencia? PyCurl.CurlMulti objeto?

Estoy abierto a todas las sugerencias. Gracias!

¿Fue útil?

Solución

En el caso de python, ya que esto está vinculado a IO, múltiples hilos usarán la CPU, pero probablemente usarán solo un núcleo. Si tiene múltiples núcleos, puede considerar el nuevo módulo multiprocesador . Incluso entonces es posible que desee que cada proceso use múltiples hilos. Tendría que hacer algunos ajustes en el número de procesadores y subprocesos.

Si usa múltiples hilos, este es un buen candidato para la Cola clase.

Otros consejos

No sé nada acerca de python, pero en general querrás dividir la tarea en trozos más pequeños para que puedan ejecutarse simultáneamente. Puede desglosarlo por tipo de archivo, alfabético o algo así, y luego ejecutar un script separado para cada parte del desglose.

Puede considerar usar s3fs , y simplemente ejecutar comandos simultáneos del sistema de archivos de Python.

He estado usando txaws con twisted para el trabajo de S3, aunque lo que probablemente quieras es obtener la URL autenticada y usar twisted.web.client.DownloadPage (por defecto irá de la secuencia al archivo sin mucho interacción).

Twisted facilita la ejecución con la simultaneidad que desee. Para algo del orden de 200,000, probablemente haría un generador y usaría un cooperador para establecer mi concurrencia y simplemente dejaría que el generador generara todas las solicitudes de descarga requeridas.

Si no está familiarizado con Twisted, encontrará que el modelo tarda un poco en acostumbrarse, pero vale la pena. En este caso, esperaría una sobrecarga mínima de CPU y memoria, pero tendría que preocuparse por los descriptores de archivos. Es bastante fácil mezclar en el agente de perspectiva y agilizar el trabajo en varias máquinas si necesita más descriptores de archivos o si tiene varias conexiones sobre las que desea que se despliegue.

¿qué pasa con thread + queue? Me encanta este artículo: Programación roscada práctica con Python

Cada trabajo se puede hacer con las herramientas apropiadas :)

Desea usar Python para la prueba de esfuerzo S3 :), por lo que sugiero encontrar un programa de descarga de gran volumen y pasarle el enlace.

En Windows tengo experiencia para instalar el programa ReGet (shareware, de http://reget.com ) y crear descargando tareas a través de la interfaz COM.

Por supuesto, puede haber otros programas con interfaz utilizable.

Saludos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top