Как запретить двум пользователям выполнять функцию внутри пирамиды - PullRequest
1 голос
/ 12 июля 2020

У меня есть представление Pyramid, подключенное к маршруту, например / my / view

Поскольку в архитектуре Pyramid два запроса могут обращаться к одному и тому же представлению одновременно. В моем представлении у меня есть функция, к которой одновременно должен иметь доступ только один пользователь, что означает: если пользователь A обрабатывает эту функцию, а пользователь B вызывает представление, то пользователь B не входит в эту функцию, пока не закончит работу A.

Я пробовал:

lock.acquire()
try:
    my_function()
finally:
    lock.release()

Но поскольку Pyramid запускает новый поток с каждым запросом, он не работает.

Есть идеи, как я могу это контролировать?

1 Ответ

3 голосов
/ 13 июля 2020

Ваша блокировка должна работать, если предположить, что блокировка определена в месте, которое используется совместно между вызовами представления (переменная модуля, переменная реестра и т. Д. c). Стоит отметить, что сама Pyramid не запускает новые темы. Это делается вашим сервером WSGI, и детали каждого сервера важны для ответа на ваш вопрос.

Если вы используете официантку, то запросы обрабатываются потоками и, таким образом, в общем пространстве памяти вы можете разделять блокировку между Запросы. В другом сценарии ios для каждого запроса используется отдельный процесс, после чего блокировка на уровне потока не будет иметь никакого эффекта. Так что это зависит от вашего развертывания, где именно лучше всего определить блокировку. Например, для разделения блокировки между процессами лучше всего использовать redis или вашу базу данных.

...