我承认我很懒惰:我需要快速完成这项工作,并且无法理解 Python3 asyncio 模块。(有趣的是,我发现 boost 相当直观。)
我需要读取一个不时阻塞的文件对象(管道)。在此期间,我希望能够以设定的时间间隔(比如每 30 分钟)触发另一个活动,而不管是否可以从文件中读取任何内容。
任何人都可以使用 python3 asyncio 帮助我使用骨架来执行此操作吗?(我无法安装第三方模块,例如twisted。)
我承认我很懒惰:我需要快速完成这项工作,并且无法理解 Python3 asyncio 模块。(有趣的是,我发现 boost 相当直观。)
我需要读取一个不时阻塞的文件对象(管道)。在此期间,我希望能够以设定的时间间隔(比如每 30 分钟)触发另一个活动,而不管是否可以从文件中读取任何内容。
任何人都可以使用 python3 asyncio 帮助我使用骨架来执行此操作吗?(我无法安装第三方模块,例如twisted。)
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)
片段假定reader
是asyncio.StreamReader
实例。