我想为我的一个项目制作一个装饰器,每隔 x 秒就会启动某个远程马拉松任务。
我在 Telethon 组中询问过,有人给了我一个小装饰器,但这里的问题是我需要使用启动循环run_until_complete
,并且在启动客户端时我已经使用它。这是我的代码:
def periodic(period):
def scheduler(fcn):
async def wrapper():
while True:
asyncio.ensure_future(fcn())
await asyncio.sleep(period)
return wrapper
return scheduler
@periodic(2)
async def do_something():
await asyncio.sleep(5) # Do some heavy calculation
me = await client.get_me()
print(me.stingfy())
现在我已经在main中运行了一个循环:
if __name__ == "__main__":
async def start():
await client.start()
await client.get_me()
await client.run_until_disconnected()
loop = asyncio.get_event_loop()
loop.run_until_complete(start())
而且我不能运行另一个循环,因为如果我这样做,它似乎会关闭这个循环。关于如何使这项工作的任何想法?