我有一个 Django 函数,它拍摄应用程序提供的页面之一的快照。它通过从应用程序打开到应用程序的 HTTP 连接来实现此目的。
这目前作为管理命令运行,并且运行良好。但是,我想在保存模型时触发它,因为我正在对与模型连接的数据进行快照。如果我从模型的save
方法中触发该函数,那么我会遇到视图代码在请求-响应 Django 循环的中途触发请求并urllib2
抱怨的情况。
我认为这可能是因为我的 django 开发服务器上只有一个线程。即使这是原因,我也不希望我的应用程序依赖于在模型保存期间有两个可用线程。我不想将我的代码耦合到服务器的线程。
我认为我需要异步执行此操作,以便在保存模型并且请求/响应周期结束时,一些代理会启动并说“您需要运行此功能”。
可能的解决方案包括创建一个线程(我认为这不是一个特别好的主意)或使用 Celery(这可能是过度杀戮,因为我只做少量的工作)。
我想过使用信号处理程序,但是信号处理程序在模型的方法model
期间都同步执行,并且信号不包含视图中更改的模型。save
request_finished
我可以使用运行管理命令的 cron 作业,但这会引入其他复杂性。如果之前的工作还没有完成怎么办?如何表示以及在什么上下文中存储该信号量?
音量将非常低,因为它是通过管理界面完成的。不过,我无法连接到管理界面,因为这也将在请求/响应期间执行。
假设我的问题是我需要异步触发此功能,那么最简单的方法是什么?