Django中的定时器对象

0 投票
3 回答
2598 浏览
提问于 2025-04-15 16:39

我正在使用Django来创建一个注册和支付的应用,主要是为了有限数量的产品。我想设置一个计时器,当用户选择购买某个产品时,这个产品就会显示为“已被占用”。但是,如果用户没有完成购买,计时器到期后,这个产品就会变回“可用”状态。如果用户完成了购买,计时器就会取消,这样这个产品的状态就会永久保持为“已被占用”。

我尝试过使用Python的字典来动态创建计时器对象,但大约30%的时间,我在取消计时器时会遇到“键错误”。

请问,有人能告诉我在Django中正确实现这个功能的方法吗?

非常感谢!

马克

3 个回答

1

你不应该使用一些在内存中运行的定时器对象,因为你的Django应用可能会在多个进程中运行...

我建议在数据库中创建这些“定时器”(比如在你的产品模型中添加一个“过期”日期时间字段),然后使用定时任务(cron job)来标记那些过期的对象,使它们变得可用。

6

我不会在这种情况下使用定时器,因为这样会增加复杂性。如果你的程序被重启,定时器会发生什么呢?有些网络服务提供商会定期重启程序,可能你也遇到过类似的情况。

我建议在你的表里加一个'taken_time'的时间字段,这样你就可以知道产品是什么时候被取走的,并用这个信息来判断产品是否可用。

可用产品的列表会包含那些'可用'的产品,以及'taken_time'早于(当前时间 - 允许的延迟时间)的产品。

我觉得只要你在业务逻辑上管理得当,其实不需要通过外部程序来改变状态。

希望这些对你有帮助。

PS:抱歉我的英语!现在在法国已经很晚了,我很难找到简单的方式来解释我的观点 :-)

-2

先复制一份代码。让你的模型为一个产品设置三种状态:available(可用)、taken(被占用)和purchased(已购买)。当用户进行某个操作,把产品标记为taken时,启动一个新的进程,如果在3分钟内没有被标记为purchased,就把这个产品的状态改回available

撰写回答