首页 文章

任务被破坏但仍悬而未决! - Python Discord Bot错误

提问于
浏览
1

我是Python的新手,并且正在为Discord开发机器人 . 我可以让机器人工作,但我遇到了一些我输入的新命令 .

我创建了一个名为“Member_City_Count”的函数,它使用urllib.requests从一个站点解析json并将数据存储在一个文件中 . 我知道它可以自己运行,但是当调用bot来运行它时,我在函数运行完毕并且机器人关闭后得到以下错误:

(Task was destroyed but it is pending! task: 
Task pending coro=<_run_event()running at C:\Users\dom\AppData\Local\Programs\Python\
Python35-32\lib\site_packages\discord\client.py:307>wait_for=Future pending 
cb=[Task._wakeup(), BaseSelectorEventLoop._sock_connect_done(964)()]>)

让我最困惑的是,大约四分之一的尝试运行它会成功!

async def on_message(message):
   if message.content.startswith(!Cities):
       await client.send_message(message.channel, "Collecting Data ...")
       Member_City_Count()
       await client.send_message(message.channel, "Complete")

如果这个问题非常明显,仍然会试图掌握asyncio,这表示道歉 .

1 回答

  • 0

    不和谐api需要每N秒ping一次服务器(N约为60) .

    如果没有发生这种情况,你会在某个时候得到一个例外(我相信下一次不和话api通话) .

    如果您在工作流程的任何位置都有长时间运行的功能,这将阻止ping并导致客户端进入错误状态 .

    请记住,在CPU密集型任务中,Python本质上是“单核心” .

    这与asyncio有关,但更多的是与discord的具体使用模式有关 .

    您可以将重型阻塞处理卸载到另一个进程中;否则将其分成许多微小的异步功能 .

    这里有一些模糊的相关信息:https://discordpy.readthedocs.io/en/latest/faq.html#what-does-blocking-mean

相关问题