Как запустить асинхронную функцию вместе с ботом, чтобы обе задачи работали параллельно без взаимного влияния? Пишу бота на библиотеке aiogram версии 2.23.1. Ранее использовал данный метод (ссылка на скриншот), но сейчас при его использовании возникает ошибка: "DeprecationWarning: There is no current event loop". Хотелось бы узнать другие варианты кода для решения этой проблемы. Ссылка на скриншот: [тут ссылка]. Спасибо заранее.
Для запуска асинхронной функции одновременно с ботом в aiogram, необходимо использовать asyncio и создать отдельный event loop для этой функции. Пример кода: ```python import asyncio from aiogram import Bot, Dispatcher, types from aiogram.contrib.middlewares.logging import LoggingMiddleware from aiogram import executor # Инициализация бота TOKEN = 'your_token_here' bot = Bot(token=TOKEN) dp = Dispatcher(bot) dp.middleware.setup(LoggingMiddleware()) # Функция, которую нужно запустить одновременно с ботом async def some_async_function(): while True: print('Async function is running...') await asyncio.sleep(5) # Функция-обработчик команды /start @dp.message_handler(commands=['start']) async def start(message: types.Message): await message.answer("Bot has started!") if __name__ == '__main__': # Создание и запуск event loop для асинхронной функции loop = asyncio.get_event_loop() loop.create_task(some_async_function()) # Запуск бота executor.start_polling(dp, loop=loop, skip_updates=True) ``` В данном примере функция `some_async_function` будет запущена параллельно с работой бота. Отдельный event loop для этой функции создается с помощью `asyncio.get_event_loop()` и метода `create_task()`. Таким образом, обе задачи будут работать параллельно без взаимного влияния.
Во-первых, переводим слово "warning". Это не ошибка, это предупреждение.
Во-вторых, погуглить не пробовал?
В ранних версиях asyncio get_event_loop() создавал рабочий цикл asyncio, если он ещё не был создан, и возвращал существующий, если он был. Потом от этого поведения решили отказаться. Пока что оно ещё работает, но потом сломается.
Так что в начале программы используй new_event_loop(), а если нужно получить ссылку на цикл в корутине - get_running_loop()
И я удивлюсь, если окажется, что ошибка именно в этом. У тебя где-то ещё должен быть косяк. Скорее всего одна из запускаемых корутин выполняет длительную операцию синхронно.