【问题标题】:Asyncio "RuntimeError: Event loop is closed"Asyncio“运行时错误:事件循环已关闭”
【发布时间】:2018-10-22 15:48:45
【问题描述】:

我正在尝试制作一个 Discord Bot,它必须每分钟左右检查一次 API,然后向频道发送消息。

但由于某种原因,循环中断并结束了任务。 这是我第一次使用 asyncio 和 discord.py

Traceback (most recent call last):
  File "bot.py", line 207, in <module>
    client.loop.run_forever()
  File "/usr/local/lib/python3.6/asyncio/base_events.py", line 407, in run_forever
    self._check_closed()
  File "/usr/local/lib/python3.6/asyncio/base_events.py", line 358, in _check_closed
    raise RuntimeError('Event loop is closed')
RuntimeError: Event loop is closed
Task was destroyed but it is pending!
task: <Task pending coro=<my_background_task() running at bot.py:193> wait_for=<Future pending cb=[<TaskWakeupMethWrapper object at 0xb52dbd10>()]>>

脚本的源代码是这样的: bot.py

只想让 my_background_task() 永远运行,或者至少在它中断时重新启动。

【问题讨论】:

  • 你的控制台输出是什么?你有很多调试打印行,你能把打印出来的行贴出来吗?
  • 看来client.run 已经无限期地运行事件循环,并关闭它。这意味着你不需要也不能在它之后调用run_forever。相反,请从您的代码中删除所有 except: pass 实例,这样您就可以看到实际的错误,而不是将它们隐藏在地毯下。这可能有助于调试导致client.run 过早退出的潜在问题。

标签: python python-asyncio discord.py


【解决方案1】:

让机器人运行异步任务

async def bg():
    for i in range(3):
        print("Background tast")
        await asyncio.sleep(1)




@bot.event
async def on_ready():
    print("Ready!")
    bot.loop.create_task(bg())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多