Не получается запустить 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 ошибки:
- Если попытаться добавить этот код в 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)
- Если попытаться через 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()