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

标签 python asynchronous aio-write

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

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

最佳答案

据我了解,异步 I/O 与非阻塞 I/O 不太一样。

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

异步 ​​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,如果它愿意的话。

那么,对于 Python 的 POSIX aio_read/write 等系统调用是否有任何包装器?

关于python - 在python中可以异步写入文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/319132/

相关文章:

python - scipy 将一个稀疏矩阵的所有行附加到另一个

python - 如何在 pandas 数据帧上使用 sklearn TFIdfVectorizer

python - 男人脸和女人脸的区别

c# - 调用异步 ActionResults 时,AllowVoidAsyncOperations 何时设置?

javascript - 强制异步函数在没有异步等待的情况下同步

perl - 如何在perl中等待异步文件

c - 用零归档文件

python - Sublime Text 3 Windows Python 没有生成图表

c++ - Linux 系统调用 aio_write() 失败,错误代码为 22 (EINVAL)

c# - 为什么我的 .net 应用程序不会发出 10 个以上的并发 WebClient 请求?