Files
Python-for-Geeks/Chapter7/multithreading/threads_casestudy.py
T
2021-03-31 09:22:38 +04:00

61 lines
1.5 KiB
Python

#threads_casestudy.py
from queue import Queue
from threading import Thread
import time
from getfilelistpy import getfilelist
import gdown
THREAD_POOL_SIZE = 5
#update the resource object as per your API key and the gdriver folder id
resource = {
"api_key": "AIzaSyDYKmm85keq4bF1DpYa2bxddKrGns4z0",
"id": "0B8TxHW2Ci6dbckVwtTlV3RUU",
"fields": "files(name,id,webContentLink)",
}
class DownlaodWorker(Thread):
def __init__(self, name, queue):
Thread.__init__(self)
self.name = name
self.queue = queue
def run(self):
while True:
# Get the file id and name from the queue
item1 = self.queue.get()
try:
gdown.download( item1['webContentLink'],
'./files/{}'.format(item1['name']),
quiet=False)
finally:
self.queue.task_done()
def main():
def get_files(resource):
#global files_list
res = getfilelist.GetFileList(resource)
files_list = res['fileList'][0]
return files_list
start_time = time.monotonic()
files = get_files(resource)
#add files info into the queue
queue = Queue()
for item in files['files']:
queue.put(item)
for i in range (THREAD_POOL_SIZE):
worker = DownlaodWorker("Thread {}".format(i+1),queue)
worker.daemon = True
worker.start()
queue.join()
end_time = time.monotonic()
print('Time taken to download: {} seconds'.
format( end_time - start_time))
main()