в то время как True l oop в asyn c останавливает работу других частей кода Discord.py - PullRequest
1 голос
/ 18 июня 2020

Я создаю бота Discord.

Что делает мой бот Discord слушает сообщения на сервере и распечатывает их в реальном времени.

Однако я также хочу, чтобы код постоянно получал от меня ввод с консоли и распечатывал его с определенным идентификатором сервера. Вот мой код:

@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

Проблема в том, что после того, как выполняется True l oop, другие функции on_message перестают работать. Я видел другие похожие вопросы, но я не понимаю функций asyn c.

Может ли кто-нибудь сказать мне, как получать ввод непрерывно и распечатывать входящие сообщения в реальном времени?

1 Ответ

2 голосов
/ 18 июня 2020

Проблема не в while True, проблема во встроенной функции input, которая является блокирующей, а не асинхронной c. Asyncio основан на совместной многозадачности, что означает, что ваша сопрограмма должна разрешить выполнение другого кода , ожидая чего-то. Поскольку ваш while l oop ничего не ожидает, он блокирует все остальное.

Посмотрите на пакет aioconsole , который предоставляет asyn c версию input.

...