2016-07-05 5 views
1

Я уже несколько дней думаю, что это лучший способ сделать это.Должен ли я использовать django-сельдерей для рекурсивного обновления моей БД?

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

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

Конечные элементы, которые не могут быть получены у is_production флаг = False, так что я знаю, что я не должен идти глубже

Для этого я думал создать метод в view.py, который будет инициироваться подтверждением моего Заказ клиента. Но я боюсь, что, поскольку я не могу предсказать сложность выпускаемого продукта, это займет много времени и будет дорогостоящим для производительности. Также существует риск бесконечных циклов. так может быть и в представлении, это не отличная идея, и я думаю об альтернативе и исследованиях. Я сделал это, чтобы это было реализовано с чем-то вроде django-celery.

Вопрос, так как я никогда раньше не использовал django celery чтобы подтвердить мое понимание: Является ли django-сельдерей лучшим и единственным вариантом для решения моего требования?

+1

Вы можете использовать Django RQ, который основан на Redis и намного проще настроить http://stackoverflow.com/questions/38106696/django-rq-how-to-call-function/38106908#38106908 http: // python -rq.org/patterns/django/ – dmitryro

+0

Но Redis - это DB и асинхронная очередь задач/заданий? –

+0

Redis легкий, и он также может и должен использоваться как кеш-механизм для Django. Как только вы начнете использовать его, вы найдете его чрезвычайно полезным. Он закодирован на C, так что это неудобно. – dmitryro

ответ

1

Во-первых, проблема с дизайном приложения: как вы сказали, «делать это в представлении не является отличной идеей» ... в общем, вы должны избегать запуска процессов, требующих много времени на цикл запроса-ответа, это плохо для UX и может закончиться тем, что запрос прерывается, потому что тайм-аут на каком-то уровне (подумайте в тайм-ауте транзакции базы данных, тайм-ауте контейнера приложения, таймауте обратного прокси-сервера и т. д.).

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

Вторые: какие рамки использовать? Есть так много вариантов ... вам нужно будет изучить это :-)

В-третьих: бесконечные циклы. Вы должны будете исправить это, безразлично, чтобы использовать дизайн.

 Смежные вопросы

  • Нет связанных вопросов^_^