对异步的文件支持。

aiofiles的Python项目详细描述


https://img.shields.io/pypi/v/aiofiles.svghttps://travis-ci.org/Tinche/aiofiles.svg?branch=masterhttps://codecov.io/gh/Tinche/aiofiles/branch/master/graph/badge.svg

aiofiles是一个apache2许可的库,用python编写,用于处理本地 异步应用程序中的磁盘文件。

普通的本地文件IO是阻塞的,不易移植 异步。这意味着执行文件IO可能会干扰异步应用程序, 它不应该阻塞正在执行的线程。艾奥菲尔帮了忙 引入支持将操作委派给 一个单独的线程池。

asyncwithaiofiles.open('filename',mode='r')asf:contents=awaitf.read()print(contents)'My file contents'

也支持异步迭代。

asyncwithaiofiles.open('filename')asf:asyncforlineinf:...

功能

  • 一个与python标准非常相似的文件api,阻塞api
  • 支持缓冲和非缓冲二进制文件以及缓冲文本文件
  • 支持async/awaitPEP 492)结构

安装

要安装所有配置文件,只需:

$ pip install aiofiles

用法

文件使用aiofiles.open()coroutine打开,除此之外 镜像内置的open接受可选的loopexecutor 论据。如果不存在loop,则将使用默认循环,如 设置异步策略。如果未指定executor,则默认事件循环 将使用执行器。

如果成功,异步文件对象将返回 与普通文件相同的api,除了以下方法是协程 并委托给执行人:

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

如果失败,将引发一个常见的异常。

aiofiles.os模块包含 几个有用的os函数处理文件:

  • stat
  • sendfile

为aiofiles编写测试

真正的文件IO可以通过修补^{tt29}来模拟$ 如所愿。返回类型还需要注册到 aiofiles.threadpool.wrapdispatcher:

aiofiles.threadpool.wrap.register(mock.MagicMock)(lambda*args,**kwargs:threadpool.AsyncBufferedIOBase(*args,**kwargs))asyncdeftest_stuff():data='data'mock_file=mock.MagicMock()withmock.patch('aiofiles.threadpool.sync_open',return_value=mock_file)asmock_open:asyncwithaiofiles.open('filename','w')asf:awaitf.write(data)mock_file.write.assert_called_once_with(data)

历史

0.4.0(2018-08-11)

  • Python3.7支持。
  • 删除了Python3.3/3.4支持。如果您使用这些版本,请使用aiofiles 0.3.x.

0.3.2(2017-09-23)

  • 许可证现在包含在sdist中。 #31

0.3.1(2017-03-10)

  • 引入了变更日志。
  • ^如果标准的os模块包含sendfile函数,则{tt31}$现在可以工作。

贡献

我们非常欢迎您的贡献。测试可以使用tox运行,请确保 在提交请求之前,覆盖范围至少保持不变。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Android USB重新连接打开的应用程序,即使该应用程序已在运行   关于数组的java新手问题   cmd通过配置文件在Java中运行系统命令   继承这种java接口策略合理吗?   java如何将循环长度设置为2D数组长度?   java简单歌曲列表,使用数组列表和对象   java解释Wicket调试条输出   JavaSpringBeanDefinition类名包含实例化bean的null   爪哇安卓菜刀   java i无法运行数据规范化maxmin的代码   java我可以使用JavaMail通过特定接口发送SMTP邮件吗?   在java中使用ObjectOutputStream()时,socket必须是同一个对象?   java如何检查列表中的数据是否包含0或空值并删除该数据   java根据传入的对象类型,JMH Blackhole#consume()的效果会有所不同吗?   安卓 Java JSON反序列化,无需预先定义所有内容   java EditText在移动时不显示键盘   xml获取java中dom4j中的属性值   “无法识别python”错误,但仅在从Java运行时发生