网站首页 > 技术文章 正文
我们通过批量下载ts文件的表现来看单线程和多线程的表现差异
ts文件可以看作是一个小的视频文件。一个大的视频文件包含很多小的视频文件。这里我们下载这些ts并不考虑ts文件的排序情况。
单线程下载批量文件
$ python start.py
.......
_single_thread downloading https://v.tudu.site/20210726/v9C6SozS/hls/ecW18luH.ts
_single_thread downloading https://ts.yboku.com/20210726/v9C6SozS/hls/f2OUWqie.ts
下载用时 38.338995s
共耗时 38.40814s
多线程下载批量文件
$ python start.py
.......
_multi_thread downloading https://v.tudu.site/20210726/v9C6SozS/hls/ecW18luH.ts
_multi_thread downloading https://ts.yboku.com/20210726/v9C6SozS/hls/f2OUWqie.ts
下载用时 6.403877s
共耗时 6.496256s
讨论
这是反复多次运行程序后,我能给到大家的一个比较客观的数据。多线程下载确实能节省很多时间,大大提高生产效率。下载程序或者说是访问网络的程序都属于IO密集型程序,广泛来看,Python的多线程对IO密集型程序的效率提升是客观的。
学习是个循序渐进的过程,我们先来看一下,单线程下载程序的编写。
我感觉用文章作为demo课程的载体多少有些受限。接下来我会录制视频,以项目的形式展示给大家。这里我就带着大家看看核心的代码,以脚本的形式大概了解一下
def _process(ts_url, process_type):
print(f'{process_type} downloading {ts_url}')
return requests.get(ts_url).content
def _single_thread(ts_url_list):
response_content_list = []
for ts_url in ts_url_list:
response_content_list.append(self._process(ts_url, '_single_thread'))
return response_content_list
def save(target_path, task_list):
if not os.path.exists(target_path):
os.makedirs(target_path)
for index, task in enumerate(task_list):
f = open(f'{target_path}/{index}.ts', 'wb')
f.write(task)
f.close()
if __name__ == '__main__':
urllist = [ts文件列表] # ts 列表我通过读txt文件加载到内存,具体代码这里没有展示。
contents = _single_thread(urllist)
save(os.path.join('mp4'), contents)
单线程的核心代码非常简单。关注并私信我,可以获取保存TS的文档,有需要的可以取用。好今天咱们就讲到这里,这节课只要掌握文件的下载就可以了。接下来我们将探索Python多线程对IO密集型程序的影响。
猜你喜欢
- 2025-05-03 自动创建 Python 的 requirements.txt 文件
- 2025-05-03 Windows系统下安装与配置Python开发环境
- 2025-05-03 「从零开始Python爬虫」1.8.2 Scrapy的安装
- 2025-05-03 Python用三行代码下载B站视频(python b站视频下载)
- 2025-05-03 Python 使用Paramiko 上传下载远程服务器的文件或文件夹
- 2025-05-03 Python核对遥感影像批量下载情况的方法
- 2025-05-03 写了一个下载图片和视频的python小工具
- 2025-05-03 1分钟搞定!Python超速工具uv换国内镜像,下载速度飙升10倍
- 2025-05-03 解放双手!Python 自动化下载邮件附件,可自定义时间段
- 2025-05-03 python编程实践:下载文件模块wget的使用
- 263℃Python短文,Python中的嵌套条件语句(六)
- 262℃python笔记:for循环嵌套。end=""的作用,图形打印
- 261℃PythonNet:实现Python与.Net代码相互调用!
- 256℃Python实现字符串小写转大写并写入文件
- 255℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 113℃原来2025是完美的平方年,一起探索六种平方的算吧
- 96℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 87℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)