【python】多线程顺序下载全部图片

import requests
import threading
import time
import re
import os

url = """

https://example.com/galleries/1712777/3.jpg
"""
# 并发下载数
treadNum = 4


ma = re.search(r'(https.*)/(\d+)/\d+(\.\S+)',url)
folder = "F:/manga/"
filetype = ".jpg"
if ma:
    prefix = ma.group(1)+"/"+ma.group(2)+"/"
    folder += ma.group(2)+"/"
    filetype = ma.group(3)
    if not os.path.exists(folder):
        os.makedirs(folder)

flag404 = False
lastPictureNumber = 500
# 为线程定义一个函数
def download_jpg(cur,arr):
    global prefix,flag404,folder,lastPictureNumber,filetype
    print("%-7s|%3s" % ("start",cur),)
    t1 = time.perf_counter()
    if flag404 and cur > lastPictureNumber:
        arr.pop()
        print("%-7s|%3s" % ("pass",cur))
        return
    jpg = str(cur)+filetype
    newurl= prefix + str(cur)+filetype
    try:
        f=requests.get(newurl)
    except:
        arr.pop()
        print("%-7s|%3s" % ("error",cur))
        return
    t2= time.perf_counter()
    if int(f.status_code)>300 and cur > 5:
        lastPictureNumber = cur
        flag404 = True
        arr.pop()
        print("%-7s|%3s|%6.3fs|%3s" % ("end",cur,t2-t1,f.status_code),)
        return
    #下载文件
    with open(folder+jpg,"wb") as picture:
        picture.write(f.content)
    t3=time.perf_counter()
    arr.pop()
    print("%-7s|%3s|%6.3fs|%3s" % ("done",cur,t3-t1,f.status_code),)

# 创建多个线程
if __name__ == '__main__':
    print("Task Start")
    ths = []
    i = 0
    while True:
        if(i>lastPictureNumber):
            break
        if(len(ths)) < treadNum:
            ths.append(i+1)
            th = threading.Thread(target=download_jpg, args=(i+1, ths))
            th.start()
            i+=1
        if len(ths) >= treadNum:
            time.sleep(0.1)
            # print(".", end="")



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值