可以在python中编写异步文件吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可以在python中编写异步文件吗?相关的知识,希望对你有一定的参考价值。

有没有一种简单的方法在Python中异步写入文件?

我知道file io that comes with Python正在封锁;这在大多数情况下都很好。对于这种特殊情况,我需要写入根本不阻止应用程序,或者至少尽可能少地阻止应用程序。

答案

扭曲有non-blocking writes on file descriptors。如果您正在编写异步代码,我希望您使用twisted,无论如何。 :)

另一答案

据我所知,异步I / O与非阻塞I / O并不完全相同。

在非阻塞I / O的情况下,一旦文件描述符被设置为“非阻塞”,如果读取操作将阻止调用进程,则read()系统调用(例如)将返回EWOULDBLOCK(或EAGAIN)。为了完成操作。提供系统调用select()poll()epoll()等,以便当一个或多个文件描述符变得可用于执行某些I / O操作时,该过程可以要求OS被告知。

异步I / O通过将对I / O的请求排队到文件描述符来进行操作,独立于调用进程进行跟踪。对于支持异步I / O(通常是原始磁盘)的文件描述符,进程可以调用aio_read()(例如)来请求从文件描述符中读取多个字节。无论I / O是否完成,系统调用都会立即返回。一段时间之后,该过程然后轮询操作系统以完成I / O(即,缓冲区充满数据)。

仅执行非阻塞I / O的进程(单线程)将能够从一个文件描述符读取或写入,当另一个未准备好时,该文件描述符已准备好进行I / O.但是,该进程仍必须同步发出系统调用,以对所有就绪文件描述符执行I / O.然而,在异步I / O情况下,该过程只是检查I / O(填充数据的缓冲区)的完成情况。通过异步I / O,操作系统可以自由地并行操作,以便为I / O提供服务,如果它选择的话。

有了这个,是否有任何POSIX aio_read / write等系统调用包装器?

另一答案

我正在为python开发aio.h:pyaio

它只在linux上运行..

另一答案

你可以尝试使用Thread

from threading import Thread

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

这或多或少是伪代码,但我希望你能得到这个想法。请注意这里的线程保持打开状态。

根据我的经验,它运作良好,虽然解释器继续工作一段时间主脚本已经完成(需要使用join()),所以速度增益比看起来大得多

另一答案

Python 3似乎有这样的功能。见PEP 3116

以上是关于可以在python中编写异步文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 代码片段编写 LaTeX 文档

Android 我应该在异步任务中将片段作为弱引用传递吗?

在 Python 中异步编写 CSV 文件

python 异步编程

我在哪里更改此 Python 代码片段以将临时文件保存在 tmp 文件夹中?

常用python日期日志获取内容循环的代码片段