我已经做了一个代码下载使用pySmartDL文件。我想一次下载多个文件。试图用多进程来实现它。但第二个过程只有在第一个完成时才会启动。代码如下:使用多进程并发下载python文件
import time
from multiprocessing import Process
from pySmartDL import SmartDL, HashFailedException
def down():
dest='/home/faheem/Downloads'
obj = SmartDL(url_100mb_file,dest, progress_bar=False,fix_urls=True)
obj.start(blocking=False)
#cnt=1
while not obj.isFinished():
print("Speed: %s" % obj.get_speed(human=True))
print("Already downloaded: %s" % obj.get_dl_size(human=True))
print("Eta: %s" % obj.get_eta(human=True))
print("Progress: %d%%" % (obj.get_progress()*100))
print("Progress bar: %s" % obj.get_progress_bar())
print("Status: %s" % obj.get_status())
print("\n"*2+"="*50+"\n"*2)
print("SIZE=%s"%obj.filesize)
time.sleep(2)
if obj.isSuccessful():
print("downloaded file to '%s'" % obj.get_dest())
print("download task took %ss" % obj.get_dl_time(human=True))
print("File hashes:")
print(" * MD5: %s" % obj.get_data_hash('md5'))
print(" * SHA1: %s" % obj.get_data_hash('sha1'))
print(" * SHA256: %s" % obj.get_data_hash('sha256'))
data=obj.get_data()
else:
print("There were some errors:")
for e in obj.get_errors():
print(str(e))
return
if __name__ == '__main__':
#jobs=[]
#for i in range(5):
print 'Link1'
url_100mb_file = ['https://softpedia-secure-download.com/dl/45b1fc44f6bfabeddeb7ce766c97a8f0/58b6eb0f/100255033/software/office/Text%20Comparator%20(v1.2).rar']
Process(target=down()).start()
print'link2'
url_100mb_file = ['https://www.crystalidea.com/downloads/macsfancontrol_setup.exe']
Process(target=down()).start()
这里link2在link1完成时开始下载,但我需要同时下载并执行。我想实现这种方法一次执行多达10次下载。那么使用多重处理是否好? 有没有其他更好的记忆效率的方法。 我是这些代码的初学者,所以请好好定义答案。 Regards
线程工作正常..是否有可能检索下载两个下载状态分别到数据库或其他东西。 @Carles Mitjans Regards – faheemKurikkal
谢谢你的回答它工作得很好。用两条非常完美的线程来试试这个。如何分别停止任何特定的线程,而不会对其他线程产生任何改动...关于 – faheemKurikkal