使用Twisted的Django后台任务

时间:2014-07-08 16:43:51

标签: django asynchronous twisted

我正在使用Django创建一个Web应用程序。

我想要触发事件'背景'与Django应用程序并行运行的任务。 (并行我只是说他们不会影响用户体验的速度)

我正在谈论的任务类型

  • 用户登录并触发事件以开始填充用户缓存,以便根据其使用习惯预期将来的请求。

  • 用户将一些数据发布到数据库,但该帖子触发对另一个网站的api调用,其中返回的数据将被解析,聚合并用于补充用户发布的内容。

  • 通过api调用其他网站滚动应用中使用的数据更新

  • 汇总数据和运行常规维护任务。

经过几天的研究,我认为我应该使用twisted来实现这一目标。这引出了我的问题:

  • 为了我想要完成的事情而扭曲矫枉过正?

这些任务中的许多都比cpu绑定的i / o绑定要多得多。所以我认为异步是最好的。

任何建议都将受到赞赏。

谢谢

1 个答案:

答案 0 :(得分:1)

是的,我认为这太过分了。

不是折叠在完整的异步框架(如Twisted)中,而是带来所有技术开销,您可能最好使用任务队列来完成您想要的后台进程。

当你的应用程序需要执行后台任务(否则会阻止请求/响应周期)时,将任务放入队列中,让一个单独的工作进程从队列中挑选出来并尽可能快地处理它们能够。 (您可以随时添加更多工作人员)。

Python / Django最常用的两个队列库是celeryrq。他们特别擅长Redis作为后端,但也有其他后端选项。

就个人而言,就API及其清洁设置而言,我更喜欢rq而不是celery,但很多人都使用它们。

两者都比Twisted,IMO更容易让人头疼。