Я пытаюсь создать простую программу на python3 с потоками и очередью для одновременной загрузки изображений из URL-ссылок, используя 4 или более потоков, для одновременной загрузки 4 изображений и загрузки указанных изображений в папку загрузок на ПК.избегая дублирования, разделяя информацию между потоками.Я полагаю, я мог бы использовать что-то вроде URL1 = «Link1»?Вот несколько примеров ссылок:
«https://unab -dw2018.s3.amazonaws.com / ldp2019 / 1.jpeg »
«https://unab -dw2018.s3.amazonaws.com / ldp2019 / 2.jpeg ”
Но я не понимаю, как использовать потоки с очередью, и я теряюсь, как это сделать.
Я попытался найти страницу, которая может объяснить, как использовать потоки с очередью для одновременной загрузки. Я нашел ссылки только для потоков.
Вот код, который работает частично.Что мне нужно, так это чтобы программа спросила, сколько потоков вы хотите, и затем загрузите изображения, пока они не достигнут изображения 20, но в коде, если ввод 5, будет загружено только 5 изображений и так далее.Дело в том, что если я поставлю 5, он сначала загрузит 5 изображений, затем следующие 5 и так далее до 20. Если его 4 изображения, то 4, 4, 4, 4, 4. Если его 6, то он пойдет 6,6,6, а затем загрузите оставшиеся 2. Каким-то образом я должен реализовать очередь в коде, но я просто изучил потоки несколько дней назад, и я забыл о том, как смешивать потоки и очередь вместе.
import threading
import urllib.request
import queue # i need to use this somehow
def worker(cont):
print("The worker is ON",cont)
image_download = "URL"+str(cont)+".jpeg"
download = urllib.request.urlopen(image_download)
file_save = open("Image "+str(cont)+".jpeg", "wb")
file_save.write(download.read())
file_save.close()
return cont+1
threads = []
q_threads = int(input("Choose input amount of threads between 4 and 20"))
for i in range(0, q_threads):
h = threading.Thread(target=worker, args=(i+1, int))
threads.append(h)
for i in range(0, q_threads):
threads[i].start()