El día 14 de julio de 2010 17:32, Kiko <[email protected]> escribió: > Hola a todos. > > Estoy descargando ficheros de un WMS [1] mediante urllib.urlretrieve. > > Hasta ahora lo que hago es generar la url y mediante urllib.urlretrieve > lanzo la petición al servidor y me genera una imagen (jpeg) que es la que me > descargo. > > El problema es que tengo que descargar un volumen relativamente grande y de > la forma en que lo tengo hecho va muy lento. > > La pregunta es: ¿Hay alguna forma de lanzar varias peticiones a la vez desde > el mismo script o de mejorar el tiempo de alguna otra forma? >
Si. Tienes varias formas: Hilos ==== http://docs.python.org/library/threading.html Procesos ======= http://docs.python.org/library/multiprocessing.html#module-multiprocessing Se puede usar también fork, pero es dependiente de la plataforma: http://docs.python.org/library/os.html#os.fork Programación asíncrona ================== Se puede hacer uso de sockets no bloqueantes, pero dudo que quieres reescribir el urlretrieve. Usar el modulo asyncore puede ser un punto de partida más sencillo: http://docs.python.org/library/asyncore.html#asyncore-example-basic-http-client O con librerias externas: * Twisted (no voy a entrar en detalles porque tiene curva lenta de aprendizaje) * eventlet: http://eventlet.net/doc/ * gevent: http://bitbucket.org/denis/gevent/src/tip/examples/concurrent_download.py Colas de trabajo o mensajes ===================== Esto ya excede el nivel de cosa que se suele escribir en un script. Asi solo cito opciones como gearman, celery, ... como herramienta si haces algo un poco más gordo. Crawler ====== Scrapy es una forma sencilla de usar twisted sin darte cuenta de que usas twisted. Si lo que quieres es un crawler, esto puede ayudar. No se si excederá tus requerimientos o si va a casar a la perfección con lo que necesitas: http://scrapy.org/ Como ves, opciones hay muchas (me dejó un montón en el tintero). Entre los enlaces tienes varios ejemplos para hacer lo que pides de una manera inmediata. Si tienes algún problema con la tecnología que elijas, no dudes en comentarlo en la lista. Un saludo: Javi _______________________________________________ Python-es mailing list [email protected] http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
