3

我有一个巨大的 django 项目,必须使用 Instagram API 及其订阅模型才能工作。对于订阅,我的服务器必须非常灵敏并准备好异步工作以设置挂钩,以便在用户发布后接收通知。或者这就是文档的建议。现在在那里使用 Tornado 会是一件好事吗?只是为了那一小部分,还是我可以使用 Django 有效地做到这一点?如果是这样,如何?

4

3 回答 3

9

您可以使用 Tornado 之上的 WSGI 容器来托管任何 WSGI 应用程序,包括 Django,但是,当您这样做时,WSGI 应用程序仍然作为阻塞应用程序运行,并且不会神奇地作为异步应用程序运行。因此,当 Django 处理一个请求时,在 Django 中无法同时处理另一个请求。此时的解决方案与运行单线程 WSGI 服务器没有太大区别,您需要有多个 Tornado 实例来处理并发请求。

所以一切都取决于你所说的异步是什么意思。你当然不能在 Django 中使用 Tornado 的直接异步编程 API。因此,通过 WSGI 接口将 Tornado 与 Django 一起使用并没有真正的好处。

于 2012-10-24T05:34:19.097 回答
2

据我了解,您在Instagram 文档中谈论这一段

您应该构建您的系统以接受每个有效负载的多个更新对象 - 尽管通常只会包含一个。此外,您应该在 2 秒超时内确认 POST - 如果您需要对接收到的信息进行更多处理,您可以在异步任务中执行此操作。

这是 Tornado 提供的另一种“异步”类型。我认为 Django + Celery会更适合这个。

您的应用程序将以这种方式工作:

  1. 您从 Instagram 接收 JSON 数据
  2. 创建一个芹菜任务,例如instagram_process.delay(request.raw_post_data)instagram_process.delay(request.body)根据您的 Django 版本
  3. 使用 200 状态码响应 Instagram
  4. instagram_process任务中,您完成所有流程 - 解析 JSON,将其存储为数据库以及您需要的任何其他内容。

如果要检查X-Hub-Signature,可以在步骤 1 和 2 之间进行,或者将此标头传递给任务并在步骤 4 验证签名。

于 2012-10-24T11:59:05.367 回答
1

您可以使用 tornado.wsgi 将 Tornado 与其他 WSGI 兼容框架集成。查看此演示项目以了解详细信息:

https://github.com/bdarnell/django-tornado-demo

于 2012-10-23T21:11:43.203 回答