python脚本刷下行流量,非docker版

本文介绍了一个Python代码,它模仿developer024/networkdownload的功能,实现对多个下载链接的并发下载,同时支持线程数设置和流量控制,当达到预设目标流量时自动停止下载。
摘要由CSDN通过智能技术生成

说明

本代码是仿写镜像库中developer024/networkdownload功能所写
在原基础上提供多个下载链接的支持
可替换变量:
urlList 下载的链接
thread 线程数
goal 需要消耗的流量 0为无限

直接部署使用

1.爱快部署
2.linux部署

代码

import requests
import time
from concurrent.futures import ThreadPoolExecutor
import random
import logging

logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')

urlList = ['https://img.cmvideo.cn/publish/noms/2023/12/06/1O4SHFIFR36BD.gif', 'https://img.cmvideo.cn/publish/noms/2023/12/06/1O4SHFIFR36BD.gif']
thread = 5  #线程数量
goal = 0  #消耗的流量单位GB
if goal > 0:
    goal = goal * 1024 * 1024 * 1024  #GB转为B

wasted = 0  #已消费的流量
runing = 0  #正在运行的数量
#线程池
executor = ThreadPoolExecutor(max_workers=thread)
#下载连接池
session = requests.Session()
adapter = requests.adapters.HTTPAdapter(pool_connections=thread, pool_maxsize=thread+1, max_retries=1, pool_block=False)
session.mount('http://', adapter)
session.mount('https://', adapter)


# 下载文件
def download(url):
    try:
        global runing
        runing += 1
        response = session.get(url, stream=True)
        if response.status_code == 200:
            for chunk in response.iter_content(chunk_size=1020):  # 按块读取文件内容
                if goal > 0:  #goal为0时,不记录wasted
                    global wasted
                    wasted += 1020  #消费流量
                    if wasted > goal:
                        logging.info("流量已经消费了 %s B,超过了目标 %s B,终止下载", wasted, goal)
                        return True
    except Exception as e:
        logging.info("下载失败", e)
    finally:
        runing -= 1
    response.close()  # 关闭下载连接
    return True


def startDownload():
    time.sleep(random.randint(1, 10))
    global wasted
    wasted = 0
    # 开始下载
    i = thread
    while i > 0:
        executor.submit(download, random.choice(urlList))
        # 休眠0.01秒-0.1秒
        time.sleep(random.randint(1, 10) / 100)
        i -= 1


if __name__ == "__main__":
    startDownload()
    while True:
        if (goal==0 or wasted < goal) and runing < thread:
            logging.info("补充下载链接数:%s", thread - runing)
            i = thread - runing
            while i> 0:
                executor.submit(download, random.choice(urlList))
                time.sleep(random.randint(1, 10) / 100)
                i-=1
        time.sleep(5)

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要在Docker中运行Python脚本,你可以使用以下步骤: 1. 创建一个最简单的Python脚本,可以使用任何文本编辑器编写代码。 2. 使用docker run命令来运行Python容器。你可以指定容器的名称、重新启动策略、挂载宿主机目录和工作目录、指定容器的Python本以及要运行的Python脚本。 3. 执行docker run命令,将Python脚本作为参数传递给容器中的Python解释器。这将导致Docker在容器中运行Python脚本。 以上是在Docker中运行Python脚本的简单步骤。请根据你的需求和环境进行相应的调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [docker运行一个python脚本](https://blog.csdn.net/qq_41477614/article/details/127409845)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [docker 调用python脚本](https://blog.csdn.net/hesehuagui/article/details/126118792)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值