Django中的Timer对象

时间:2009-12-03 20:15:23

标签: python django timer

我正在使用Django为有限数量的产品创建注册/支付应用程序。我想创建一个计时器,以便当用户选择购买产品时,该产品将显示为“已经拍摄”。但是,如果用户没有通过购买并且计时器用完,则产品返回到“可用”状态。如果用户完成购买,则计时器应取消,将产品的状态永久保留为“已经采用”。

我已经尝试使用python的字典来实例化苍蝇的python Timer对象,但是大约30%的时间,当得到取消Timer的时候,我得到一个“关键错误”。

请。有人能给我一个关于在Django中这样做的正确方法的想法吗?

非常感谢!

标记

3 个答案:

答案 0 :(得分:6)

我不会在这种情况下使用计时器,因为它可能会带来一些复杂性。如果重新启动进程,您的计时器会发生什么。一些互联网服务提供商定期重启流程的情况并非如此。也许你正面临着类似的情况。

我会在您的表格中添加'taken_time'日期时间字段,以了解产品的使用时间并使用它以了解产品是否可用

可用产品列表将填入“可用”产品,如果'taken_time'低于(当前时间 - 接受延迟),则“已采用”

我认为只要您在业务逻辑中正确管理它,就不需要使用外部流程更改状态。

我希望它有所帮助

PS:抱歉我的英文!现在在法国很晚,我很难找到解释我观点的简单方法: - )

答案 1 :(得分:1)

您不应该使用某些进程内/内存计时器对象,因为您的django应用程序可以在多个进程中运行...

我建议在数据库中创建这个“计时器”(比如产品型号的“expire”datetime字段)并使用cron job来标记过期的对象可用

答案 2 :(得分:-2)

分叉吧。让您的模型为产品使用三种状态:availabletakenpurchased。当用户发起将产品标记为taken的操作时,会生成一个新流程,如果该产品不是available,则会在3分钟内将产品标记为purchased