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

时间:2014-11-13 18:54:24

标签: python python-asyncio

我承认自己非常懒惰:我需要相当快地做到这一点,并且无法理解Python3 asyncio模块。 (有趣的是,我发现提升非常直观。)

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

任何人都可以使用python3 asyncio帮助我使用骨架吗? (我无法安装第三方模块,如twisted。)

1 个答案:

答案 0 :(得分:5)

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

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

另见https://groups.google.com/forum/#!topic/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个实例。