【问题标题】:Django 1.3, how to signal when a post has ended like on ebay?Django 1.3,如何在 ebay 上的帖子结束时发出信号?
【发布时间】:2011-10-24 14:35:59
【问题描述】:

我完全糊涂了,不知道该怎么做,所以如果我的描述/信息不好,请原谅我。

所以我想说通过 django-notification 发出通知,或者当我的一个用户在 ebay 上的帖子结束时发送电子邮件给他。在我的数据库中,我有一个模型,它存储帖子结束的日期时间,但我不确定如何有效地检查或存储信号或提醒系统在当前时间提醒用户的东西> 比结束日期时间。

谢谢!

由于我想在帖子结束后发送电子邮件/通知,我认为我不能使用调度程序来检查是否有帖子结束,我认为这效率太低,因为我必须检查就像每一秒一样,但就像我上面说的,我什么都不确定……

【问题讨论】:

    标签: python sql django django-models django-signals


    【解决方案1】:

    您可以使用django-celery - 连接一个post_save handler 来检查created 是否为True,如果是,则安排一个Task,它会在正确的时间通知用户(使用@987654323 @)。

    【讨论】:

    • 是的,认为这样的事情会很好,但我担心 django-celery 这样做会占用多少内存……最好的低内存方式是什么?
    【解决方案2】:

    在我看来,您至少已经考虑过一些解决方案。不过要记住的一件事是,作为 Web 框架的 Django 是无状态的“机器”。简而言之,这意味着它不会在帖子过期的瞬间“运行”(或者您不能假设在帖子过期的瞬间从浏览器发送请求)。这意味着使用 Django 来发信号/发送通知是不合适的。

    但是,由于您确切知道应该何时发送电子邮件,因此应该可以在创建帖子后立即在 Django 中将通知排队。然后一些外部“程序”将不得不处理队列以实际发送通知......有各种创造性的方法可以做到这一点,但你当然可以使用 python 来做到这一点。

    如果您想考虑使用消息队列,请查看 RabbitMQ http://nathanborror.com/posts/2009/may/20/working-django-and-rabbitmq/

    【讨论】:

      【解决方案3】:

      正如其他人所说,最好的解决方案是 django-celery (https://github.com/ask/django-celery),但如果资源不足,它会有点重量级。

      在类似的需求中,我有一个中间件来检查条件并执行所需的操作(在我的情况下,它只是更改数据库某些记录中的布尔值)。这对我有用,因为在有人真正访问数据之前不需要更改它,并且因为“任务”只是一个 UPDATE 查询,所以它不是难以承受的负载。

      否则,您可以每隔很短的时间(1 分钟?5 分钟?)设置一个 cron 作业并检查条件并执行后果。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-15
        • 1970-01-01
        • 1970-01-01
        • 2018-11-20
        • 2012-12-18
        • 1970-01-01
        相关资源
        最近更新 更多