我有一个discord.py机器人,我目前正在本地托管它成熟。我想在我的网络连接中使其能够抵御瞬间的昙花一现,但我很难过。当连接失败时,表示正常bot操作的阻塞Client.run()
完成并关闭事件循环。几分钟后我不能再重新调用Client.run()
,因为事件循环已关闭。
我已经尝试重新声明Client对象,但这似乎没有使用新的事件循环。我正在浏览discord.py和python事件循环文档,但无法弄清楚如何获取新的事件循环并使用它。
我已经尝试了asyncio.set_event_loop(asyncio.new_event_loop())
的行,但它似乎没有任何区别 - 我仍然无法重新调用Client.run()
,因为事件循环已关闭。
在互联网连接blip的情况下,现有的事件循环没有任何问题。只需不要调用关闭事件循环的Client.run
。因为Client.run
无论如何都是关闭事件循环的run_until_complete
的简单包装器,你可以自己编写不会这样做的东西。例如:
def run_client(client, *args, **kwargs):
loop = asyncio.get_event_loop()
while True:
try:
loop.run_until_complete(client.start(*args, **kwargs))
except Exception as e:
print("Error", e) # or use proper logging
print("Waiting until restart")
time.sleep(600)