我应该使用 django-celery 递归更新我的数据库吗?
Posted
技术标签:
【中文标题】我应该使用 django-celery 递归更新我的数据库吗?【英文标题】:Should I use django-celery to update my DB recursively? 【发布时间】:2016-11-07 18:12:03 【问题描述】:我已经思考了几天最好的方法。
我正在销售我正在制造的商品 但是我出售的商品可以由其他商品组成 而那些其他项目可以由其他项目组成,依此类推。
创建销售订单后,我想触发创建此项目所需的所有项目的内部销售订单的过程,因此它应该是某种递归。
无法生产的最终项目有一个标志 is_production=False 所以我知道我不必更深入
为此,我正在考虑在 view.py 中创建一个方法,该方法将通过确认我的销售订单来触发。但我担心,由于我无法预测制造产品的复杂性,它会花费很长时间,并且性能成本会很高。同样存在永无止境的循环的风险。 所以可能在视图中这样做不是一个好主意,我正在考虑替代方案,通过调查,我应该用 django-celery 之类的东西来实现它
问题,因为我以前从未使用过 django celery,我想确认我的理解: django-celery 是解决我的要求的最佳且唯一的选择吗?
【问题讨论】:
您可以使用基于 Redis 的 Django RQ,并且配置起来更简单***.com/questions/38106696/…python-rq.org/patterns/django 但是Redis是DB和异步任务队列/作业队列? Redis 是轻量级的,它也可以而且应该用作 Django 的缓存引擎。一旦你开始使用它,你会发现它非常有用。它是用 C 编码的,所以速度非常快。 实际上 Redis 是一个键/值存储,具有大量不同的功能 使用python的包装器github.com/andymccurdy/redis-py 【参考方案1】:首先,关于应用程序设计问题:正如您所说,“在视图中执行它不是一个好主意”......一般来说,您必须避免运行在请求 - 响应周期中需要大量时间的进程,这是对 UX 不利,并且可能会因为某层超时而导致请求中止(想想数据库事务超时、应用程序容器超时、反向代理超时等)。
我的建议:使用某些东西(Celery 或任何其他解决方案)来减轻创建内部销售订单的流程以及任何其他长期运行的流程(例如发送电子邮件)的负担。
第二:使用哪个框架?有很多选择......你需要研究一下:-)
第三:永无止境的循环。无论使用何种设计,您都必须解决这个问题。
【讨论】:
以上是关于我应该使用 django-celery 递归更新我的数据库吗?的主要内容,如果未能解决你的问题,请参考以下文章