我正在开发一个django IPN插件,它将IPN数据保存到模型中,然后调用post_save信号。
我担心在这个用例(gunicorn,gevent等)下,信号可以被异步调用/完成。 IPN经常向ipn url发送多个请求,我需要能够按顺序处理这些请求。
我应该为此使用队列吗?简单的python队列会更好用,还是应该使用像kombu + celery(有1个worker)的东西?
答案 0 :(得分:5)
不确定同步性是你真正关心的问题。 Django的信号总是在进程内中执行:也就是说,它们将在执行其余请求的进程中执行,然后再返回响应。但是,如果您的服务器本身是异步的,那么一个请求可能会在稍后接收到的第二个请求之后完成处理,因此将以错误的顺序处理信号。
当然,Celery肯定是异步的,但如果可靠的订购是您的首要任务,那么它可能是更好的选择。