python 异步模式操作文件 aiofiles库 简介

目录

线程开启文件读取异步模式

使用已编写好的第三方插件-aiofiles,支持异步模式

安装方法

打开文件

迭代,Asynchronous iteration

插件可支持的属性

参考


平常使用的file操作模式为同步,并且为线程阻塞。当程序I/O并发次数高的时候,cpu被阻塞,形成闲置。现在我总结下目前python3.6以后的异步使用文件解决方案:

线程开启文件读取异步模式

用线程(Thread)方式来解决。硬盘缓存可以被多个线程访问,因此通过不同线程访问文件可以部分解决。但此方案涉及线程开启关闭的开销,而且不同线程间数据交互比较麻烦。

from threading import Thread

for file in list_file:
     tr = Thread(target=file.write,args=(data,))
     tr.start()

使用已编写好的第三方插件-aiofiles,支持异步模式

使用aio插件来开启文件的非阻塞异步模式。

安装方法

pip install aiofiles

这个插件的使用和python原生open 一致,而且可以支持异步迭代:

打开文件

import aiofiles
async with aiofiles.open('filename',mode='r') as f:
    contents = await f.read()
	print(contents)
	'My file contents'

迭代,Asynchronous iteration

import aiofiles
async with aiofiles.open('filename') as f:
    async for line in f:
        print(line)

插件支持属性

插件和file的api属性一样

  • close
  • flush
  • isatty
  • read
  • readall
  • read1
  • readinto
  • readline
  • readlines
  • seek
  • seekable
  • tell
  • truncate
  • writable
  • write
  • writelines

参考

aiofiles:https://github.com/Tinche/aiofiles/
asyncio filesystem进展:https://github.com/python/asyncio/wiki/ThirdParty#filesystem

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...