Кроме потоков пытался запустить uvicorn с помощью мультипроцессинга, но FastAPI выдает ошибку:
AttributeError: Can't pickle local object 'FastAPI.setup..openapi'
По сути в коде он ничем не отличался от потокового выполнения:
mp.Process(dashboard.run_host, args=[bot, asyncio.get_event_loop()])
Можно просто строчку заменить.
Нашел такой вопрос (
Как запустить несколько ботов в докере?) где автор поделился способом
asyncio.get_event_loop().create_task, но тоже не работает - RuntimeError:
asyncio.run() cannot be called from a running event loop. Эта ошибка к тому же относится к причине почему я добавил библиотеку discord.py к вопросу, выполнение кода происходит внутри asyncio.run и из него вызывается тот самый uvicorn.run
Я пробовал все виды loop параметра у uvicorn, кроме uvloop т.к. не установлен модуль, при использовании мультипроцессинга и многопоточности.