我正在尝试为asyncio事件循环创建一个定期任务,如下所示,但是我遇到了“ RuntimeError:无法重用已经等待的协程”异常。显然,asyncio不允许等待与该bug线程中讨论的相同的等待功能。这是我尝试实现的方法:
import asyncio
class AsyncEventLoop:
def __init__(self):
self._loop = asyncio.get_event_loop()
def add_periodic_task(self, async_func, interval):
async def wrapper(_async_func, _interval):
while True:
await _async_func # This is where it goes wrong
await asyncio.sleep(_interval)
self._loop.create_task(wrapper(async_func, interval))
return
def start(self):
self._loop.run_forever()
return
由于我的while循环,相同的等待函数(_async_func)将在它们之间的睡眠间隔内执行。我如何从asyncio定期执行功能中获得了执行定期任务的灵感? 。
从上面提到的错误线程中,我推断出RuntimeError背后的想法是,使开发人员不会意外地等待相同的协程两次或多次,因为协程将被标记为完成,并且产生None而不是结果。有没有办法我可以多次等待相同的功能?
狐的传说
相关分类