Как исправить RuntimeWarning: coroutine 'checking' was never awaited?

from aiogram import Bot, Dispatcher
from aiogram.fsm.storage.memory import MemoryStorage
import threading
import logging
import asyncio


import config as cf
from handler.start import start_router
from hand_callback.hand_callback import hand_router
from handler.admin import admin_router
from handler.state_handler import state_handler
from database import queue_silver


logging.basicConfig(level=logging.INFO)
bot = Bot(cf.API)
dp = Dispatcher(storage=MemoryStorage())


async def main():
    dp.include_routers(start_router, hand_router, admin_router, state_handler)
    thread = threading.Thread(target=queue_silver.checking)
    thread.start()
    await asyncio.sleep(6)
    await dp.start_polling(bot)

if __name__ == '__main__':
    print("Бот запущен")
    try:
        loop = asyncio.get_event_loop()
        loop.run_until_complete(main())
    except Exception as e:
        logging.error(f"An error occurred: {e}")

Помогите исправить ошибку

ошибка которую выдаёт:

C:\Users\user\AppData\Local\Programs\Python\Python38\lib\threading.py:870:
RuntimeWarning: coroutine 'checking' was never awaited 
self._target(*self._args, **self._kwargs)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

Ответы (1 шт):

Автор решения: insolor

Предупреждение вида RuntimeWarning: coroutine 'checking' was never awaited возникает, когда асинхронную функцию вызывают со скобками, но без await (или другим каким-то способом не дожидаются ее результата).

Проблема в данном случае возникает из-за того, что вы асинхронную функцию передаете как таргет в threading.Thread, а он ничего про асинхронные функции не знает, и пытается запустить ее как обычную функцию.

Исправить можно заменой попытки вызова queue_silver.checking через threading на запуск фонового асинхронного таска c помощью asyncio.create_task:

task = asyncio.create_task(queue_silver.checking())
  • без await, потому что не нужно прямо сейчас получить результат, а нужно чтобы таск в фоне выполнялся
  • со скобками после checking (если бы у этой функции были параметры, то с параметрами)
→ Ссылка