如何使用Python 2.7通过多线程(异步下载)通过Http下载文件

时间:2015-11-05 10:18:07

标签: python multithreading python-2.7

我有一个要下载的文件(从json中提取的下载路径。eg: http://testsite/abc.zip)。

我需要一个帮助来执行,所有5个线程都应该下载" abc.zip"文件到输出目录,下载必须是异步并发。 目前使用以下代码,它会下载文件5次,但会逐个下载(同步)。

我想要的是,下载是同步的。

任何帮助表示赞赏!!!

.
.

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()

我已阅读Requests with multiple connections帖子并且提供了帮助,但并未解决所提问题的要求。

1 个答案:

答案 0 :(得分:2)

我使用线程模块下载线程: 还请求,但您可以自己将其更改为urllib。

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)