如何使用龙卷风与Django一起工作?这是一个好的解决方案吗?

时间:2012-10-22 10:29:59

标签: django tornado instagram

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

3 个答案:

答案 0 :(得分:9)

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

所以所有这些都取决于异步的含义。你当然不能在Django中使用Tornado的直接异步编程API。因此,通过WSGI接口将Dorno与Tornado一起使用并没有什么大的好处。

答案 1 :(得分:2)

据我了解,您正在Instagram docs

中讨论这一段
  

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

这是Tornado提供的另一种“异步”。 我认为Django + Celery会更好地适应这种情况。

您的申请将以这种方式运作:

  1. 您从Instagram收到JSON数据
  2. 创建芹菜任务,例如根据您的Django版本
  3. instagram_process.delay(request.raw_post_data)instagram_process.delay(request.body)
  4. 使用200状态代码回复Instagram
  5. instagram_process任务中,您可以完成所有游行 - 解析JSON,存储数据库以及您需要的任何其他任务。
  6. 如果要检查X-Hub-Signature,您可以在步骤1和步骤2之间执行此操作,或将此标题传递给任务并在步骤4验证签名。

答案 2 :(得分:1)

您可以使用tornado.wsgi将Tornado与其他符合WSGI的框架集成。有关详细信息,请查看此演示项目:

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