python多线程下载大文件_如何使用Python 2.7通过HTTP使用多线程下载文件(异步下载)...

1586010002-jmsa.png

I have a file to download (download path extracted from json. eg: http://testsite/abc.zip).

I need a help to perform, all the 5 threads should download the abc.zip file to the output directory and the download has to be Asynchronous or concurrent.

Currently with the below code it does download the file 5 times but it downloads one by one (Synchronous).

What I want is, the download to be simultaneous.

def dldr(file=file_url, outputdir=out1):

local_fn = str(uuid.uuid4())

if not os.path.exists(outputdir):

os.makedirs(outputdir)

s = datetime.now()

urllib.urlretrieve(file, outputdir + os.sep + local_fn)

e = datetime.now()

time_diff = e - s

logger(out1, local_fn, time_diff)

for i in range(1, 6):

t = threading.Thread(target=dldr())

t.start()

I have read Requests with multiple connections post and it's helpful, but doesn't address the requirement of the question asked.

解决方案

I use threading module for download threads:

Also requests, but you can change that to urllib by yourself.

import threading

import requests

def download(link, filelocation):

r = requests.get(link, stream=True)

with open(filelocation, 'wb') as f:

for chunk in r.iter_content(1024):

if chunk:

f.write(chunk)

def createNewDownloadThread(link, filelocation):

download_thread = threading.Thread(target=download, args=(link,filelocation))

download_thread.start()

for i in range(0,5):

file = "C:\\test" + str(i) + ".png"

print file

createNewDownloadThread("http://stackoverflow.com/users/flair/2374517.png", file)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python的FFmpeg是一个功能强大的多媒体处理库,可以用于处理音频和视频文件。如果需要使用多线程进行FFmpeg下载,可以结合Python多线程库进行实现。 首先,我们可以使用Python的subprocess模块来调用FFmpeg命令,下载音频或视频文件。通过创建一个子进程来执行FFmpeg命令,我们可以利用多个子进程同时下载多个文件,实现多线程下载。 下面是一个简单的示例代码: ``` import subprocess import threading def download_file(url, output): command = f"ffmpeg -i {url} {output}" subprocess.call(command, shell=True) def multi_thread_download(urls, outputs): threads = [] for url, output in zip(urls, outputs): thread = threading.Thread(target=download_file, args=(url, output)) thread.start() threads.append(thread) for thread in threads: thread.join() # 下载列表中的两个文件 urls = ["http://example.com/file1.mp4", "http://example.com/file2.mp4"] outputs = ["file1.mp4", "file2.mp4"] multi_thread_download(urls, outputs) ``` 在上面的代码中,我们定义了两个函数,`download_file`用于下载单个文件,`multi_thread_download`用于多线程下载。 `download_file`函数接收一个URL和一个输出文件名作为参数,并使用FFmpeg命令将URL指定的文件下载到指定的输出位置。 `multi_thread_download`函数接收一个URL列表和一个输出文件名列表作为参数,然后使用`threading.Thread`类创建多个线程,并分别调用`download_file`函数下载对应的文件。 最后,我们调用`multi_thread_download`函数,传入需要下载的URL列表和输出文件名列表,即可实现多线程下载。 需要注意的是,使用多线程下载可能会增加系统资源的负担,如果下载文件过多或文件过大,可能会导致系统负载过高或网络带宽受限。所以在实际应用中,需要根据具体需求和系统情况合理调整线程数目。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值