Ответ 1
Асинхронные запросы были введены в Python в версии 3.3, если вы используете Python до версии 3.3 (включая v2.X), вам придется установить более новую версию Python.
Только, если вы используете Python 3.3: asyncio
не является частью stdlib, вам нужно будет установить его вручную из pypi:
pip install asyncio
Ключевые слова async
и await
действительны только для Python 3.5 или новее. Если вы используете Python 3.3 или 3.4, вам необходимо внести следующие изменения в код:
- Используйте декоратор
@asyncio.coroutine
вместо оператораasync
:
async def func():
pass
# replace to:
@asyncio.coroutine
def func():
pass
- Используйте
yield from
вместоawait
:
await coroutine()
# replace to:
yield from coroutine()
Вот пример того, на что должна перейти ваша функция (если вы используете 3.3-3.4):
import asyncio
@asyncio.coroutine
def background_loop():
yield from client.wait_until_ready()
while not client.is_closed:
channel = client.get_channel("************")
messages = ["Hello!", "How are you doing?", "Testing!!"]
yield from client.send_message(channel, random.choice(messages))
yield from asyncio.sleep(120)
Вышеупомянутый синтаксис все еще поддерживается в более новых версиях Python 3, но рекомендуется использовать await
и async
, если нет необходимости поддерживать Python 3.3-3.4. Вы можете обратиться к этой документации, здесь приведен небольшой фрагмент:
Тип сопрограммы
async def
был добавлен в Python 3.5 и является рекомендуется, если нет необходимости поддерживать более старые версии Python.
Помимо:
discord.py в настоящее время поддерживает 3.4.2-3.6.6, (он не поддерживает 3.3-3.4.1, 3.7 по состоянию на январь 2019 года).
Для разработки с использованием discord.py я предлагаю использовать ветвь перезаписи discord.py:
discord.py-rewrite поддерживает 3.5.3-3.7.