我正在开发一个允许用户上传文件的 Django 应用程序。在将它们发送到Amazon S3之前,我需要对这些文件执行一些服务器端处理。在阅读了对这个问题的回复和这篇博文之后,我决定处理这个问题的最佳方式是让我的视图处理程序调用Pyro远程对象上的一个方法来异步执行处理,然后立即向客户端返回一个 Http 200 . 我有这个原型,它似乎运行良好,但是,我还想存储处理状态,以便客户端可以轮询应用程序以查看文件是否已被处理并上传到 S3。
我可以很容易地处理轮询,但我不确定存储进程状态的适当位置。它需要可由 Pyro 进程写入,并且可由我的轮询视图读取。
- 我很犹豫是否将列添加到数据库中以获取实际上应该只持续 30 到 60 秒的数据。
- 我考虑过使用 Django 的低级缓存 API并使用文件 id 作为键,但是,我不相信这真的是缓存框架的设计目的,我不确定可能会出现什么不可预见的问题这条路线。
- 最后,我考虑过将状态存储在 Pyro 对象中进行处理,但看起来我仍然需要添加一个布尔“processing_complete”数据库列,以便视图知道是否从 Pyro 对象查询状态。
当然,从数据库中解耦状态也存在一些数据完整性问题(如果服务器出现故障并且所有这些数据都在内存中会发生什么?)。我想知道更多经验丰富的 Web 应用程序开发人员将如何处理这种有状态的处理。