Код: Выделить всё
@asynccontextmanager
async def lifespan(app: FastAPI):
applog.info(f"{ENGINE_MODULENAME} app is starting executor...")
process_pool_size = constant.PROCESS_POOL_SIZE if constant.PROCESS_POOL_SIZE > 0 else None
app.state.executor = ProcessPoolExecutor(process_pool_size)
applog.info(f"Executor initiated with {app.state.executor._max_workers} workers.")
preloaded_models = {}
app.state.model = preloaded_models
applog.info("Application loaded with serving models.")
preloaded_data = {}
app.state.data = preloaded_data
applog.info("Application loaded with serving data.")
yield
del preloaded_models
del app.state.model
applog.info("Application removed serving models.")
del preloaded_data
del app.state.data
applog.info("Application removed serving data.")
applog.info(f"{ENGINE_MODULENAME} app is shutting down executor...")
app.state.executor.shutdown()
applog.info("Executor shut down successfully.")
app = FastAPI(title=__name__, lifespan=lifespan)
Код: Выделить всё
gunicorn --bind :8002 --worker-class uvicorn.workers.UvicornWorker --workers 4 --timeout 300 --preload --chdir interface app.main:app
Не приведет ли такое поведение к перегрузке моего приложения и к его сбою, поскольку все 4 рабочих процесса печатают одни и те же журналы?
Каков правильный способ объединения кода ProcessExecutor с Gunicorn для достижения оптимальной нагрузки управление в среде с несколькими ядрами ЦП?
Я пробовал запустить приведенный выше код, но еще не подвергал его нагрузочному тестированию, поскольку в текущем рабочем процессе этот процесс очень дорог.
Подробнее здесь: https://stackoverflow.com/questions/782 ... -started-u