Я хочу запустить приложение Starlette и django в одном потоке.
(Наличие их в одном потоке обеспечивает быструю локальную связь между ними).
Учитывая, что приложения asgi - это просто сопрограммы, я подумал, что это теоретически возможно с asyncio.gather()
.
Я придумал небольшой хак для этой работы, но у него есть некоторые ограничения.
from uvicorn import Server, Config
configs = [Config(app1, uds='app1.sock'), Config(app2, uds='app2.sock')]
coros = [Server(c).serve() for c in configs]
await asyncio.gather(*coros)
- Не поддерживает
reload
и workers
options. - Ctrl + C работает только для одного приложения.
INFO: Started server process [86066]
INFO: Waiting for application startup.
INFO: Started server process [86066]
INFO: Waiting for application startup.
INFO: ASGI 'lifespan' protocol appears unsupported.
INFO: Application startup complete.
INFO: Uvicorn running on unix socket app1.sock (Press CTRL+C to quit)
INFO: Application startup complete.
INFO: Uvicorn running on unix socket app2.sock (Press CTRL+C to quit)
^CINFO: Shutting down
INFO: Finished server process [86066]
^C^C^C^C^C
Какой лучший способ сделать это?