Python - Como puedo usar Threading y Queue para realizar descargas simultaneas por hilos

 
Vista:
sin imagen de perfil
Val: 11
Ha disminuido su posición en 5 puestos en Python (en relación al último mes)
Gráfica de Python

Como puedo usar Threading y Queue para realizar descargas simultaneas por hilos

Publicado por Patricio (7 intervenciones) el 08/06/2019 02:58:18
Hola. Mi pregunta es como es que puedo utilizar threading y queue para realizar que desde el codigo pueda realizar 20 descargas simultaneas por hilos para 20 links de descarga distintos y compartir la informacion entre hilos cosa que no haya descargas duplicadas

He estado viendo y el queue es similar a colas, donde el primero en entrar es el ultimo en salir... pero no entiendo en que me ayuda eso.
Como funciona threading y queue para esto?... podria copiar todos los links interesados dentro del codigo o usar un txt para que el codigo los lea?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 11
Ha disminuido su posición en 5 puestos en Python (en relación al último mes)
Gráfica de Python

Como puedo usar Threading y Queue para realizar descargas simultaneas por hilos

Publicado por Patricio (7 intervenciones) el 08/06/2019 03:59:02
por ejemplo, aca tengo un link con una imagen cualquiera.
https://unab-dw2018.s3.amazonaws.com/ldp2019/1.jpeg
como puedo usar threading y queue para descargar esta imagen y varias otras a la vez?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Como puedo usar Threading y Queue para realizar descargas simultaneas por hilos

Publicado por tincopasan (1082 intervenciones) el 08/06/2019 05:55:27
hay miles de ejemplos en la red ¿qué has intentado?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 11
Ha disminuido su posición en 5 puestos en Python (en relación al último mes)
Gráfica de Python

Como puedo usar Threading y Queue para realizar descargas simultaneas por hilos

Publicado por Patricio (7 intervenciones) el 10/06/2019 02:10:57
He intentado con 2 codigos, el primero funciona pero no se me ocurre como realizar la descarga continua para mas elementos, la idea es descargar de 4 en 4 hasta que el contador llegue a 20 o descargar de 5 en 5 hasta llegar a 20. La idea es descargar 20 imagenes.
Pero el primer codigo solo descarga la cantidad de hilos pedida, si pongo 5, descarga 5, si pongo 20, descarga las 20. Pero la idea es de que si pongo 4, descargue 4, luego las 4 que siguen y asi hasta llegar a 20 (osea la funcion se llama 5 veces). Pero como puedo hacer eso?
Lo otro es implementar queue en el codigo pero ando confundido en como hacerlo.

El segundo me lo recomendaron, no entiendo porque no reconoce picture_getter y picture y no entiendo porque.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import threading
import urllib.request
 
def worker(cont):
    print("La funcion esta ON")
    imagen_download = "https://unab-dw2018.s3.amazonaws.com/ldp2019/"+str(cont)+".jpeg"
    download = urllib.request.urlopen(imagen_download)
 
    file_save = open("Imagen "+str(cont)+".jpeg","wb")
    file_save.write(download.read())
    file_save.close()
 
    return cont+1
 
hilos = []
cant_hilos = int(input("Ingrese la cantidad de hilos a utilizar, entre 4 y 6"))
for i in range (0,cant_hilos):
    h = threading.Thread(target=worker, args= (i+1,))
    hilos.append(h)
for i in range(0,cant_hilos):
    hilos[i].start()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import threading
import queue
 
if __name__ == "__main__":
    picture_queue = queue.Queue(maxsize=0)
    picture_threads = []
    picture_urls = ["https://unab-dw2018.s3.amazonaws.com/ldp2019/1.jpeg",
                    "https://unab-dw2018.s3.amazonaws.com/ldp2019/2.jpeg"]
 
    # create and start the threads
    for url in picture_urls:
        picture_threads.append(picture_getter(url, picture_queue))
        picture_threads[i].start()
 
    # wait for threads to finish
    for picture_thread in picture_threads:
        picture_thread.join()
 
    # get the results
    picture_list = []
    while not picture_queue.empty():
        picture_list.append(picture_queue.get())
 
class picture_getter(threading.Thread):
    def __init__(self, url, picture_queue):
        self.url = url
        self.picture_queue = picture_queue
        super(picture_getter, self).__init__()
 
    def run(self):
        print("Starting download on " + str(self.url))
        self._get_picture()
 
    def _get_picture(self):
        # --- get your picture --- #
        self.picture_queue.put(picture)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 11
Ha disminuido su posición en 5 puestos en Python (en relación al último mes)
Gráfica de Python

Como puedo usar Threading y Queue para realizar descargas simultaneas por hilos

Publicado por Patricio (7 intervenciones) el 10/06/2019 02:32:48
Lo que necesito que el codigo haga es que si eligo 4 hilos, estos descarguen hasta que se hayan descargado 20 imagenes de los links que van de 1 a 20. Osea, 4 es 4 hilos descargan 4 imagens 5 veces
Y de alguna manera debo implementar queue pero aprendi threads hace solo 2 dias y no entiendo como usar queue, mucho menos usar los 2 juntos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar