Каково будет поведение, когда ProcessPoolExecutor и Multiple Worker начнут использовать Gunicorn (FastAPI) вместе?Python

Программы на Python
Гость
Каково будет поведение, когда ProcessPoolExecutor и Multiple Worker начнут использовать Gunicorn (FastAPI) вместе?

Сообщение Гость »

У меня есть пример кода FastAPI, который использует ProcessPoolExecutor во время запуска:

Код: Выделить всё

@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:

Код: Выделить всё

gunicorn --bind :8002 --worker-class uvicorn.workers.UvicornWorker --workers 4 --timeout 300 --preload --chdir interface app.main:app
Для каждого рабочего процесса Gunicorn будут распечатаны те же журналы, которые инициировал Исполнитель с максимальным количеством рабочих процессов (в данном случае рабочих ProcessExecutor
Не приведет ли такое поведение к перегрузке моего приложения и к его сбою, поскольку все 4 рабочих процесса печатают одни и те же журналы?
Каков правильный способ объединения кода ProcessExecutor с Gunicorn для достижения оптимальной нагрузки управление в среде с несколькими ядрами ЦП?
Я пробовал запустить приведенный выше код, но еще не подвергал его нагрузочному тестированию, поскольку в текущем рабочем процессе этот процесс очень дорог.

Подробнее здесь: https://stackoverflow.com/questions/782 ... -started-u

Вернуться в «Python»