Не получается запустить 2 функции параллельно

При попытке запустить 2 асинхронные функции в разных потоках возникает либо ошибка, что функции не ожидаются, либо первая функция блокирует вторую при выполнении задач.

Код:

async def EventsHandler():
    print("Поток с ивентами запущен")
    while True:
        ...


async def StartBot():
    print("Бот запущен")
    bot.run(TOKEN)


async def Start():
    ...
    # Здесь запуск 2-х параллельных асинхронных функции


if __name__ == "__main__":
    for ext in extensions:
        bot.load_extension(ext)
        logger.debug(f"Module '{str(ext)}' loaded")

    asyncio.run(Start())

По идеи должно работать так, чтобы я вызывал через if name функцию Start(), далее из этой функции создавалось 2 потока: StartBot() и EventsHandler(). Но в двух вариантов этой реализации возникает 2 ошибки:

  1. Если попытаться добавить этот код в Start(), то вылазит ошибка coroutine 'to_thread' was never awaited
async def Start():
    loop = asyncio.get_running_loop()

    with concurrent.futures.ThreadPoolExecutor() as executor:
        task_one = loop.run_in_executor(executor, asyncio.to_thread, StartBot)
        task_two = loop.run_in_executor(executor, asyncio.to_thread, EventsHandler)

        await asyncio.gather(task_one, task_two)
  1. Если попытаться через asyncio.gather, то вот что выдает в консоль:
RuntimeError: Cannot run the event loop while another loop is running
Поток с ивентами запущен
Task was destroyed but it is pending!

И вот сам код:

async def Start():
    bot_task = asyncio.create_task(StartBot())
    events_task = asyncio.create_task(EventsHandler())

    await asyncio.gather(bot_task, events_task)

И у меня никак больше не получается запустить 2 таска, чтобы они не мешали друг другу. Мне нужно, чтобы у меня работала функция EventsHandler, которая не будет блокировать bot.run()


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