摘要:使用python里面的协程实现定时器,重点关注add_done_callback的用法。

本来使用协程实现一个定时器没什么可讲的,但是我发现竟然可以在future处于done状态时通过add_done_callback方法添加回调函数,而且回调函数还能被触发。下面两个代码的作用一样....区别自己看

代码一:

import asyncio

async def delay(time):
    await asyncio.sleep(time)

async def timer(time, function):
    while True:
        future = asyncio.ensure_future(delay(time))
        await future
        future.add_done_callback(function)

def func(future):
    print("done")

if __name__ == '__main__':
    asyncio.run(timer(2, func))

代码二:

import asyncio

async def delay(time):
    await asyncio.sleep(time)

async def timer(time, function):
    while True:
        future = asyncio.ensure_future(delay(time))
        future.add_done_callback(function)
        await future

def func(future):
    print("done")

if __name__ == '__main__':
    asyncio.run(timer(2, func))