M_Sea:
Soy utilización threading
de hacer descargas paralelas ahora tengo un url_list img_list
quiero descargarlo en 2 hilo para def dos descargas.
i poner en la mitad download1
y la otra mitad en download2
lo que acelerará a completa, pero, finalmente, cuando corro los scripts mi descarga todavía en serie, no sé por qué, cómo puedo modificar mi script?
Aquí está el código:
import requests,threading
img_list=[...]
num=len(img_list)
def download_1(img_list):
n=0
for i in img_list:
n+=1
with open('./img/'+str(n)+'.jpg','wb')as f:
f.write(requests.get(i).content)
print(str(n)+"download1 complete")
def download_2(img_list):
n=len(img_list)
for i in img_list:
n+=1
with open('./img/'+str(n)+'.jpg','wb')as f:
f.write(requests.get(i).content)
print(str(n)+"download2 complete")
thread_1 = threading.Thread(target=download_1(img_list[:int(num/2)]))
thread_2 = threading.Thread(target=download_2(img_list[int(num/2):]))
thread_1.start()
thread_2.start()
extravagante:
En esta línea
threading.Thread(target=download_1(img_list[:int(num/2)]))
usted llama download_1(...)
y pasa el resultado (nula) a hilo. Es por eso que se ejecuta en serie. En su lugar se desea pasar download_1
función en sí (no el resultado de llamarlo) para el hilo. Me gusta esto:
threading.Thread(target=download_1, args=(img_list[:int(num/2)],))
Hacerlo en ambos lugares.
Nota al pie: usted debe t.join()
ambos hilos al final.