Как запустить одновременно два бесконечных процесса ? (FastAPI)

Вобщем я учусь писать тесты и хочу для тестовых нужд, чтобы тест сам запускал сервер uvicorn и ещё один сервер, который запускается из определённой папки командой npm start.

Видимо в синхронном коде это сделать не получится, т.к. uvicorn.run() собственно как и другой сервер, который запускается через npm start - это процессы бесконечные и как я их местами не менял, запускается всегда один, а до второго дело не доходит.

Подскажите, пожалуйста, может быть можно как-то запустить каждую команду в отдельном процессе?

Спасибо!

Мой код:

import uvicorn
import subprocess

if __name__ == '__main__':
    uvicorn.run(
        'main:app',
        reload=True,
        port=7777
    )
    subprocess.run('cd ~/Desktop/randomfolder && npm start', shell=True)

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

Автор решения: Roman Konoval

Я бы рассмотрел использование supervisord.

Устанавливаете его в virtualenv pip install supervisor и создаете файл конфигурации supervisord.conf типа:

[program:uvicorn]
command=uvicorn main:app --port 7777

[program:npm]
command=npm start
directory=~/Desktop/randomfolder

Стартуете supervisord один раз, и потом запускаете все командой:

supervisorctl start all

Еще он понимает команды stop, restart, status и другие. Умеет перестартовывать приложения если они рухнули и много других полезностей.

→ Ссылка