Python异步读取文件并每隔一段时间执行另一个活动



我承认自己很懒:我需要很快完成这项工作,而且无法理解Python3异步模块。(有趣的是,我发现助推相当直观。)

我需要读取一个文件对象(管道),它会不时地被阻塞。在此期间,我希望能够以设定的时间间隔(比如每30分钟)启动另一项活动,而不管是否有任何内容可以从文件中读取。

有人能帮助我使用python3 asyncio制作一个骨架吗?(我无法安装第三方模块,如twisted.)

asyncio(以及其他异步库,如twisted和toronto)不支持文件的非阻塞IO——只有套接字和管道被异步处理。

主要原因是:Unix系统没有处理文件的好方法。比方说,在Linux上,任何文件读取都是阻塞操作。

另请参阅https://groups.google.com/forum/#!主题/python tulip/MvpkQeetWZA

UPD

对于计划周期性活动,我想使用asyncio.Task:

@asyncio.coroutine
def periodic(reader, delay):
    data = yield from reader.read_exactly(100)  # read 100 bytes
    yield from asyncio.sleep(delay)
task = asyncio.Task(reader, 30*60)

代码段假定readerasyncio.StreamReader实例。

最新更新