Таймер объекта в Джанго - PullRequest
0 голосов
/ 03 декабря 2009

Я использую Django для создания приложения регистрации / оплаты для ограниченного количества продуктов. Я хочу создать таймер, чтобы при выборе пользователем продукта он отображался как «уже занят». Но, если пользователь не совершил покупку и таймер истекает, продукт возвращается в состояние «доступно». Если пользователь завершает покупку, таймер должен отменить, оставив статус продукта навсегда как «уже занят».

Я пытался использовать словарь python для создания экземпляров объектов Python Timer, но в 30% случаев я получаю «ключевую ошибку», когда приходит время отменить Timer.

Пожалуйста. Может ли кто-нибудь дать мне представление о том, как сделать это в Джанго?

Большое спасибо!

Mark

Ответы [ 3 ]

6 голосов
/ 03 декабря 2009

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

Я бы добавил поле datetime для времени, когда вы берете продукт, и использовал бы его, чтобы узнать, доступен ли продукт или нет

Список доступных товаров будет заполнен «доступными» товарами и «взятыми», если их «взятый_время» меньше (текущее время - принятая задержка)

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

Надеюсь, это поможет

PS: простите за мой английский! Довольно поздно во Франции сейчас и мне трудно найти простой способ объяснить мою точку зрения: -)

1 голос
/ 03 декабря 2009

Вы не должны использовать некоторые объекты таймера в процессе / памяти, так как ваше приложение django может работать в нескольких процессах ...

Я предлагаю создать эти «таймеры» в базе данных (например, поле даты и времени «expire» для вашей модели продукта) и использовать задание cron, которое помечает объекты с истекшим сроком хранения как доступные

0 голосов
/ 03 декабря 2009

Вилка это. Пусть ваша модель использует три состояния для продукта: available, taken и purchased. Когда пользователь запускает действие, помечающее продукт как taken, запускается новый процесс, который помечает продукт как available через 3 минуты, если он не purchased.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...