首页 > 解决方案 > micropython asyncio:使定期函数永远运行

问题描述

我正在尝试实现一个 micropython 类以使函数以特定的时间间隔永远运行。为此,我正在尝试从这篇文章中改编以下代码:

class Timer:
    def __init__(self, timeout, callback):
        self._timeout = timeout
        self._callback = callback
        self._task = asyncio.create_task(self._job())

    async def _job(self):
        while True:
            await asyncio.sleep(self._timeout)
            await self._callback()

    def cancel(self):
        self._task.cancel()


async def timeout_callback():
    await asyncio.sleep(0.1)
    print('echo!')


async def main():
    timer = Timer(2, timeout_callback)  # set timer for two seconds
    await asyncio.sleep(12.5)  # wait to see timer works

asyncio.run(main())

关键是,我不能让它作为“正常”的while循环无限期地运行。我注意到回调按照最后一个await asyncio.sleep(secs)命令中定义的时间继续运行......但这不是我真正想要实现的。任何帮助将不胜感激。

标签: python-asynciomicropython

解决方案


推荐阅读