【问题标题】:How to detect when my Django object's DataTimeField reach current time如何检测我的 Django 对象 DateTimeField 何时达到当前时间
【发布时间】:2014-11-12 16:29:03
【问题描述】:

我正在使用 Django 1.5.5。

假设我有一个这样的对象:

class Encounter(model.Models):
    date = models.DateTimeField(blank=True, null=True)

如何检测给定的Encounter 何时到达当前时间?我看不出信号对我有什么帮助。

【问题讨论】:

    标签: django django-views django-signals


    【解决方案1】:

    仅使用 Django 无法检测到它。

    您需要一些调度程序,它将检查每个Encounters 日期(例如,通过使用相应的过滤器查询),并执行所需的操作。

    它可以是一个简单的 cron 脚本。你可以把它写成 djangocustom management command。例如,cron 必须每 5 分钟调用一次。

    或者,您可以使用Celery。有了它,您可以从管理员那里查看工作人员状态并做一些其他事情。

    【讨论】:

    • 我认为这是不可能的。如果我没记错的话,我可以创建一个自定义管理命令,例如validatebets(用户对遭遇进行下注,并且在遭遇遭遇时应奖励收益),然后使用 Celery 每小时运行一次此命令。我说的对吗?
    • 不完全是。如果您选择 celery,则不需要创建管理命令,因为您只需创建一个 periodic task。如果您选择简单的 cron,管理命令将很有用。 cron 所能做的就是重复调用你的命令。在该命令中,您必须编写所有逻辑。
    • 好吧,我最初不知道 Cron 是什么。有点匆忙,这个功能(以及其他功能)将在 24 小时内到期,我将 - 现在 - 将其编写为 Cron 脚本,因为我相信它是本地环境中最简单/最快的方式。但是,为什么我更喜欢使用 Celery(经常听说,但从未听说过使用 Cron)?是否需要任务排队系统?
    【解决方案2】:

    您可以使用Celery。当您保存Encounter 的对象时,它将进入任务队列并仅在到达当前时间后执行。

    但有一个警告,它可能会在稍后执行,具体取决于芹菜工人的忙碌程度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      • 2014-12-03
      相关资源
      最近更新 更多