当前位置: 首页 > article >正文

python 异步读取文件,速度变快了吗

“python 异步读取文件,速度变快了吗”

当我问出这个问题,大部分人第一反应应该是python新人,不懂异步

首先说一下我对异步的理解:

  1. asyncio 是 gevent + greenlet 的组合
  2. gevent 底层使用了libev、selectors 模块,这两个模块是检测io操作的,selectors 调用了c函数select(),是io多路复用的,其中一个参数的fds,就是等待多个文件就绪,也就是进行多个io等待
  3. gevent用greenlet切换协程任务用的

贴一个select模块的地址:select --- 等待 I/O 完成 — Python 3.13.0rc2 文档

白话:多个协程任务的io等待是可以同时进行的,因此减少了程序运行的总时间

asyncio的教程大致两个示例

1.asyncio.sleep(delay)
2.requests.get(url)

没毛病,时间确实减少了,但是网上没看到文件读取的示例,最后说 你们看,用了异步方式读取文件,时间减少了。测试一下 :

case1:文件大小500kb,数量3个

case2:文件大小500kb,数量500个

case3:文件大小80Mb,数量3个

case4:文件大小80Mb,数量500个

经过我的测试,以上4个case情况一样,异步没有减少读取时间,那就用case3作为例子

异步方式读取文件

jmeter.log 文件大小80Mb,数量3个

async def read_file_async(file_path):
    print(f'start read {file_path}')
    async with aiofiles.open(file_path, 'r') as f:
        content = await f.read()
        print(f'read finish')


async def main():
    files = [
        'jmeter.log',
        'jmeter.log',
        'jmeter.log'
    ]
    now = lambda : time.time()
    start = now()
    task_list = [read_file_async(file) for file in files]
    await asyncio.gather(*task_list)
    print(now()-start)

asyncio.run(main())

运行结果

start read jmeter.log
start read jmeter.log
start read jmeter.log
read finish
read finish
read finish
0.25398802757263184

速度没有加快

接下来的问题,什么原因呢,我的答案是 我也不清楚

其实我试了asyncio、gevent、多线程、多进程、同步读取,比较下来,只有多进程会减少时间

不过不用担心,文件读取速度很快,一般情况不用考虑文件读取速度,真想提高,有人跟我说买更贵的ssd


http://www.kler.cn/a/320779.html

相关文章:

  • Android Mobile Network Settings | APN 菜单加载异常
  • VSCode插件
  • mybatis的动态sql用法之排序
  • Word_小问题解决_1
  • 108. UE5 GAS RPG 实现地图名称更新和加载关卡
  • 24 年第十届数维杯国际数模竞赛赛题浅析
  • Linux Centos7达梦8数据库安装说明(附安装包,超详细图文!)收藏这一篇就够了!
  • 基于quill2.0的富文本编辑器,Fluent Editor,支持表格,图片,表情等
  • 中间添加一条可以拖拽的分界线,来动态调整两个模块的宽度
  • 如何在调试状态下部署局域网网站
  • Qt C++设计模式->外观模式
  • 牛骨髓油茶,美味不可错过
  • 华为机考练习(golang)
  • 算法.图论-并查集
  • C++:string类写时拷贝|引用计数
  • git使用方法详解(适合新手)
  • 找免费正版高清图片,就上这8个网站。
  • 深度拆解:如何在Facebook上做跨境电商?
  • 【docker】debian中配置docker(2024年9月)
  • YOLOv8-pose+streamlit 实现人体关键点检测/姿态估计系统(后续可用于健身时的姿态估计,训练纠正等....)
  • 智算中心动环监控:构建高效、安全的数字基础设施@卓振思众
  • 从Unity到Godot
  • Ubuntu22.04安装paddle
  • 超越sora,最新文生视频CogVideoX-5b模型分享
  • 4.SPI外设—LCD小案例
  • 拓数派荣获上海数据交易所“数据治理服务商”认证