目录
平常使用的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,支持异步模式
安装方法
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)
插件可支持的属性
- 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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。