Вопросы о безопасности потока в Django - PullRequest
1 голос
/ 29 марта 2012

У меня есть приложение django, которое используется для управления регистрациями в опросе.

Есть фиксированное количество слотов, и я хочу "зарезервировать" слоты для пользователей, когда они зарегистрируются. В одном из моих представлений я получаю следующий доступный слот и резервирую его (или перенаправляю пользователя, если свободных слотов нет.)

Я хочу защититься от случая, когда два пользователя, регистрирующиеся одновременно, регистрируются в одном и том же слоте, поскольку метод get_next_available_slot возвращает один и тот же слот для обоих пользователей.

Для этого я пытаюсь понять использование процессов и потоков с точки зрения Джанго.

1) Каждый запрос обрабатывается в отдельном потоке и будет ли использовать LOCK () модуля потоков Python для обеспечения монопольного доступа?

2) Я запускаю apache на RHEL с помощью modwsgi. Как мне настроить Apache / modwsgi, чтобы обеспечить более легкое и простое решение для вышеуказанной ситуации?

Я не ожидаю огромной нагрузки на веб-приложение вообще. Поэтому я бы хотел более простое решение вместо высокопроизводительного.

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Вы не должны делать предположения о настройке потока / процесса приложения django, потому что это зависит от используемого вами веб-сервера и от того, как django интегрирован в него.Поэтому методы межпроцессного взаимодействия не должны полагаться на надежность этих деталей.Одним хорошим решением является использование встроенной библиотеки кеша для блокировок и общих данных.

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

1 голос
/ 29 марта 2012

Вы не должны беспокоиться о таких вещах.

Эти слоты хранятся в базе данных, верно? База данных должна обрабатывать все механизмы блокировки для вас, просто убедитесь, что вы все выполняете в транзакции, и все будет в порядке.

...