【发布时间】:2017-02-18 07:16:47
【问题描述】:
如何在非阻塞模式下读取二进制文件或文本文件的内容?
对于二进制文件:当我open(filename, mode='rb') 时,我得到一个io.BufferedReader 的实例。文档堡垒io.BufferedReader.readsays:
读取并返回 size 字节,或者如果 size 没有给出或为负数,直到 EOF 或 read 调用将在非阻塞模式下阻塞。
很明显,一个简单的open(filename, 'rb').read() 处于阻塞模式。令我惊讶的是,我在io 文档中的任何地方都找不到关于如何选择非阻塞模式的解释。
对于文本文件:当我open(filename, mode='rt') 时,我得到io.TextIOWrapper。我假设相关文档是read 在其基类io.TextIOBase 中的文档;和according to those docs,似乎根本没有办法进行非阻塞读取:
从流中读取并返回最多 size 个字符作为单个 str。如果 size 为负数或 None,则读取直到 EOF。
【问题讨论】:
-
不确定是否需要使用
os.O_NONBLOCK在较低级别执行此操作 -
请告诉我你为什么不赞成我的回答?无关紧要吗?
-
@Amin Etesamian 我没有投反对票,我不确定为什么其他阅读它的人不喜欢它。似乎相关,虽然我不知道 aiofiles 库。
-
@max 我在异步文件服务服务中使用了它。效果很好。
标签: python python-3.x io