Я разрабатываю веб-приложение на фляже, python, sqlalchemy и postgresql. Мой вопрос здесь в отношении обработки параллелизма в этом приложении.
Как я написал приложение:
Я беру пример добавления пользователя в базу данных. Я отправляю форму и вызывается. Я обрабатываю все данные формы, а затем вызываю add_user (* arg), который использует код sqlalchemy для вставки пользователя в базу данных и возвращается при успешном выполнении, и я возвращаю ответ из представления.
Я предположил:
Хорошо, теперь я предположил, что мой веб-сервер (который я еще не решил) будет либо порождать поток, либо процесс, если два пользователя будут пытаться зарегистрироваться в одно и то же время и будут обрабатывать все согласованные требования.
В принципе, я понятия не имею о параллельной части разработки webapp. Если вы можете указать на ресурсы, откуда я могу узнать больше об этом, это будет очень полезно.
Flask будет выполнять каждый запрос в отдельном потоке или даже в отдельных процессах. Количество потоков и процессов для появления определяется WSGI-сервером (например, Apache с mod_wsgi).
Если вы используете SQLAlchemy ScopedSessions, сеанс отлично потокобезопасен. Вы не должны делиться объектами, контролируемыми ORM, через потоки (но в большинстве случаев вы не позволяете своим объектам жить дольше, чем запрос, так что это обычно не вызывает беспокойства).
Другими словами, до тех пор, пока вы не собираетесь делиться государством между запросами, кроме как через базу данных или файлы cookie, вам не нужно беспокоиться о проблемах с параллелизмом. Вам не нужно создавать блокировку для записи в базу данных.
Если вы создаете свои собственные долгоживущие объекты в своем приложении, что вам, скорее всего, не нужно делать, и если эти объекты обмениваются или обмениваются данными с кодом обработки запроса, тогда вы должны принять соответствующие меры предосторожности, чтобы избежать проблем синхронизации (условия гонки, взаимоблокировки, использование библиотек, которые не являются потокобезопасными и т.д.),