Python cómo utilizar roscar en descarga multi

M_Sea:

Soy utilización threadingde hacer descargas paralelas ahora tengo un url_list img_listquiero descargarlo en 2 hilo para def dos descargas.

i poner en la mitad download1y la otra mitad en download2lo 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_1funció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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=373104&siteId=1
Recomendado
Clasificación