我想写Linux上的Python程序,因为它是被写入,因为如果它检测到的日志中的某些东西发送警报的目的是实时读取日志文件。我希望它使用asyncio有几个原因-我正在尝试构建一个基于asyncio同时执行许多操作的框架,我需要练习。
由于我使用ASYNCIO,我显然不希望使用阻塞阅读更多行输入文件的末尾等待被写入。我怀疑我最终将不得不使用select,但是我不确定。
我怀疑这很简单,但是我很难找到一个示例来说明如何做到这一点,或者即使我以前涉猎asyncio也想出一个自己的例子。我可以阅读并基本理解我发现的其他异步示例,但是由于某些原因,我发现很难编写自己的异步代码。
因此,如果有人可以为我提供示例,我将不胜感激。如果相同的技术也可以从stdin读取而不是从文件读取,则有加分。
答案 0 :(得分:1)
我怀疑我最终将不得不使用select,但是我不确定。我怀疑这很简单,但是我很难找到一个如何做到这一点的例子
使用asyncio,您的想法是您不需要select()
,因为asyncio会为您选择-毕竟,select()
或等效项是每个事件循环的核心。 Asyncio提供了类似于streams的抽象,它们在异步编程模型上实现了协程外观。还有lower-level个方法可让您自己加入select()
,但通常应使用流。
对于tail -f
,不能使用select()
,因为常规文件始终可读。如果没有数据,您将得到EOF,并希望稍后再试。这就是为什么tail -f
过去使用读取时会暂停的原因,并且可以选择在可用的情况下部署类似inotify的通知API。