【问题标题】:Are django signals always synchronous?django 信号总是同步的吗?
【发布时间】:2013-11-01 16:48:30
【问题描述】:

我正在开发一个 django IPN 插件,它将 IPN 数据保存到模型中,然后调用 post_save 信号。

我担心在这个用例(gunicorn、gevent 等)下,信号可能会被异步调用/完成。 IPN 经常向 ipn url 发送超过 1 个请求,我需要能够按顺序处理这些请求。

我应该为此使用队列吗?简单的python队列会更好,还是我应该使用kombu + celery(有1个工人)之类的东西?

【问题讨论】:

    标签: python django queue signals


    【解决方案1】:

    不确定同步性是您真正关心的问题。 Django 的信号总是在in-process 中执行:也就是说,在返回响应之前,它们将由完成该请求的其余部分的进程执行。但是,如果您的服务器本身是异步的,则有可能一个请求将在稍后收到的第二个请求之后完成处理,因此信号将以错误的顺序处理。

    当然,Celery 绝对是异步的,但如果可靠的订购是您的优先事项,那可能是更好的选择。

    【讨论】:

    • 只是确认我的想法,谢谢!同步性是一个问题的原因是事务几乎总是发送多个通知(不同的产品,重复的额外通知等)。我希望能够使用信号处理帐户创建,并且如果模型无法保存,我不希望任何交易落空。或者更糟糕的是,为一个用户创建了两个帐户。
    猜你喜欢
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 2013-05-30
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    相关资源
    最近更新 更多