Несколько моментов, которые вы можете учитывать при реализации таких функций
1) Не загружайте файл сразу после загрузки.
2) Сначала выполните операцию загрузки файлов и используйте очередь для добавления URL-адреса для загруженного файла, как показано ниже
import sys
import os
import urllib
import threading
from Queue import Queue
class DownloadThread(threading.Thread):
def __init__(self, queue, destfolder):
super(DownloadThread, self).__init__()
self.queue = queue
self.destfolder = destfolder
self.daemon = True
def run(self):
while True:
url = self.queue.get()
try:
self.download_url(url)
except Exception,e:
print " Error: %s"%e
self.queue.task_done()
def download_url(self, url):
# change it to a different way if you require
name = url.split('/')[-1]
dest = os.path.join(self.destfolder, name)
print "[%s] Downloading %s -> %s"%(self.ident, url, dest)
urllib.urlretrieve(url, dest)
def download(urls, destfolder, numthreads=4):
queue = Queue()
for url in urls:
queue.put(url)
for i in range(numthreads):
t = DownloadThread(queue, destfolder)
t.start()
queue.join()
if __name__ == "__main__":
download(sys.argv[1:], "/tmp")
3) И, наконец, самое главное, реализовать многопоточность при загрузке файлов. Многопоточность должна быть реализована и при загрузке файлов.
Проверьте эту ссылку для многопоточности в python.
Или попробуйте this .
Справка:
http://dag.wiee.rs/home-made/unoconv/
Надеюсь, это поможет.