(dev mode) start backend without waiting for page compilation (#2549)

* start backend without waiting for page compilation

* remove prints for measuring time saved

* pin tighter on uvicorn
This commit is contained in:
jackie-pc 2024-02-08 12:13:39 -08:00 committed by GitHub
parent 7fb9747fa7
commit a4c8c72177
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 532 additions and 508 deletions

1023
poetry.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -40,10 +40,7 @@ redis = "^4.3.5"
rich = "^13.0.0"
sqlmodel = "^0.0.14"
typer = ">=0.4.2,<1"
uvicorn = [
{version = "^0.24.0", python = ">=3.12"},
{version = "^0.20.0", python = "<3.12"},
]
uvicorn = "^0.27.0"
watchdog = "^2.3.1"
watchfiles = "^0.19.0"
starlette-admin = "^0.9.0"

View File

@ -1,13 +1,21 @@
"""Shims the real reflex app module for running backend server (uvicorn or gunicorn).
Only the app attribute is explicitly exposed.
"""
from concurrent.futures import ThreadPoolExecutor
from reflex import constants
from reflex.utils.prerequisites import get_compiled_app
from reflex.utils.prerequisites import get_app, get_compiled_app
if "app" != constants.CompileVars.APP:
raise AssertionError("unexpected variable name for 'app'")
app = getattr(get_compiled_app(), constants.CompileVars.APP)
app_module = get_app(reload=False)
app = getattr(app_module, constants.CompileVars.APP)
ThreadPoolExecutor(max_workers=1).submit(app.compile_)
# ensure only "app" is exposed.
del app_module
del get_app
del get_compiled_app
del constants
del ThreadPoolExecutor