【问题标题】:while True loop in async stops other parts of code from working Discord.pywhile True 异步循环阻止其他部分代码运行 Discord.py
【发布时间】:2020-10-08 03:16:12
【问题描述】:

我正在制作一个不和谐的机器人。

我的不和谐机器人做什么监听整个服务器的消息并实时打印。

但是,我还希望代码能够不断地从控制台接收我的输入,并将其打印到特定的服务器 ID 中。以下是我的代码:

@bot.event
async def on_message(message):
    # Prints message


@bot.event
async def on_ready():
    # Execute on-ready stuff
    while True:
        kb = input(">>>")

        #Delivers the message into a certain channel

问题是在 while True 循环执行后,其他 on_message 函数停止工作。我见过其他类似的问题,但我不了解异步函数。

有人能告诉我如何连续接收输入并实时打印传入的消息吗?

【问题讨论】:

    标签: python python-3.x python-asyncio discord.py


    【解决方案1】:

    问题不在于while True,问题在于内置的input函数,它是阻塞的而不是异步的。 Asyncio 基于协作式多任务,这意味着您的协程必须通过等待 来选择允许其他代码运行。由于您的 while 循环不会等待任何内容,因此它会阻止其他所有内容。

    查看aioconsole 包,它提供了input 的异步版本。

    【讨论】:

    • 这实际上也是为什么你不应该在你的异步函数中使用time.sleep,而应该使用asyncio.sleep的原因
    • 是的,答案是与discord.py一起使用的示例
    • @Benjin 我的意思是,this 答案已经指向 aioconsole。如果您认为另一个答案是相关的,您可能希望在评论中将其链接到问题,或者甚至将问题标记为与前一个问题的重复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 2018-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-07-29
    • 1970-01-01
    相关资源
    最近更新 更多