【问题标题】:Django/Python process that checks database object status检查数据库对象状态的 Django/Python 进程
【发布时间】:2015-04-27 05:45:14
【问题描述】:

我正在构建一个 django 应用程序,它具有一些发送电子邮件/短信通知的功能。这些通知应该在后台异步发送。我已经遇到过芹菜并玩了一下,我认为它非常棒。现在,通知存储在模型中,其中一个字段“状态”指示是否已发送通知。我目前需要一种方法来监视我的数据库表中的通知状态,以检查状态是 0 - 未发送还是 1 - 已发送。如果状态为 0,则应调用 celery 任务以发送状态为 0 的通知。那么,监控数据库表的最佳方法是什么?也许是一个守护进程?

【问题讨论】:

  • 是什么负责将模型置于一种需要首先发送通知的状态?你不能从那里触发 Celery 工作吗?
  • 如果在状态设置为 0 后不久发送通知并不紧急,您可以使用 cron 设置计划作业并指定它应该运行的时间。
  • @DanielRoseman 这不是处于状态的模型......通知是。取决于它的状态,即 0(未发送)或 1(已发送)。
  • @nejc92,紧急设置通知状态为0后,立即发送。
  • 当然,但我的意思是某些东西将通知状态设置为 0。所以在我看来,同样的代码也应该触发 Celery 作业。

标签: python django python-3.x celery


【解决方案1】:

可以使用python的event scheduler

【讨论】:

    【解决方案2】:

    您有多种选择。如果你真的想监控表,看看celery perioidic tasks,它可以在定义的时间间隔运行一个 celery 任务。

    您还可以使用post-save signal 或覆盖的model save method 在模型保存时触发任务。这样就可以立即触发事件,不受周期性任务解决的限制。

    【讨论】:

    • 保存后的信号不是同步的吗?
    • 而且,调度程序的问题在于它以特定的时间间隔执行。我想以这样一种方式执行此操作,即当以状态 0 保存新通知时,将调用任务并发送通知。
    • 后保存是同步的,但是你可以用它来触发发送通知的celery任务,使得发送异步。
    • 我认为 celery 周期性任务现在为我完成了...谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多