gpt4 book ai didi

django - 让 Django 触发返回给自身的请求的最简单方法是什么?

转载 作者:行者123 更新时间:2023-12-01 15:49:45 26 4
gpt4 key购买 nike

我有一个 Django 函数,它为应用程序提供的其中一个页面拍摄快照。它通过从应用程序打开到应用程序的 HTTP 连接来实现这一点。

目前这是作为管理命令运行的,并且工作正常。但是,我想在保存模型时触发它,因为我正在拍摄与模型相关的数据快照。如果我从模型的 save 方法触发该函数,那么我会遇到这样一种情况,即 View 代码在请求-响应 Django 周期中途触发请求,并且 urllib2 提示。

我认为这可能是因为我的 Django 开发服务器上只有一个线程。即使这是原因,我也不希望我的应用程序依赖于在模型保存期间有两个可用线程。我不想将我的代码耦合到服务器的线程化。

我想我需要异步执行此操作,以便在保存模型并且请求/响应周期结束时,一些代理会介入并说“您需要运行此功能”。

可能的解决方案包括创建一个线程(我认为这不是一个特别好的主意)或使用 Celery(这可能是多余的,因为我只做了少量工作)。

我想到了使用信号处理程序,但是 model 信号处理程序都在模型的 save 方法期间同步执行,并且 request_finished 信号不'包含在 View 中更改的模型。

我可以使用运行管理命令的 cron 作业,但这会引入其他复杂性。如果之前的工作还没有完成怎么办?如何指示该信号量以及在什么情况下存储该信号量?

音量会非常低,因为它是通过管理界面完成的。不过,我无法连接到管理界面,因为这也会在请求/响应期间执行。

假设我的问题是我需要异步触发这个函数,最简单的方法是什么?

最佳答案

我肯定会推荐 celery ——真的没有更好的选择。使用 django-celerydjango database broker非常轻量级,不需要设置任何 AMQP 服务器 - 它使用与 django 使用的相同的数据库。

我已经将此设置用于多个具有轻量级异步需求的 django 项目,它非常简单可靠。

如果您碰巧使用 upstart,我发布了一个 upstart 脚本示例来自动启动您的 django-celery 代理 here .

关于django - 让 Django 触发返回给自身的请求的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12054645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com