如何以非阻塞模式读取二进制或文本文件的内容?
对于二进制文件:当我使用 open(filename, mode='rb')
后,会得到一个 io.BufferedReader
实例。在 io.BufferedReader.read 的文档中写道:
读取并返回 size 字节,如果未指定 size 或为负数,则读取直到 EOF 或者以非阻塞模式调用读取操作。
显然,简单的 open(filename, 'rb').read()
是阻塞模式。令我惊讶的是,在 io
的文档中找不到任何说明如何选择非阻塞模式的解释。
对于文本文件:当我使用 open(filename, mode='rt')
后,会得到一个 io.TextIOWrapper
。我假设相关文档是其基类 io.TextIOBase
中的 read
,根据该文档,似乎根本没有办法进行非阻塞读取:
从流中最多读取 size 个字符作为单个 str。如果 size 为负或为 None,则读取直到 EOF。
os.O_NONBLOCK
在较低级别进行此操作。 - Padraic Cunningham