61 lines
1.5 KiB
Python
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()
|