请教下各位用 tornado 框架的开发,耗时任务直接扔协程里面去做就行了还是用 Celery 处理呢?

2019-03-12 15:22:55 +08:00
 tihiro
1937 次点击
所在节点    Python
7 条回复
shallyy
2019-03-12 15:51:46 +08:00
后者
neoblackcap
2019-03-12 15:56:08 +08:00
耗时任务分两种,CPU 密集型,IO 密集型。你网络请求放在 Handler 里面做没问题,记得用 Tornado 自带的 Http Client。

Tornado 是一个高性能网络框架,不过究其根本其实还是封装了事件循环,因此你要运用非堵塞 IO 处理才能算是正确发挥它的功效。任何堵塞操作(包括在主线程读写数据库,读写文件,CPU 密集型操作)都会带来悲剧
tihiro
2019-03-12 15:56:16 +08:00
谢谢你的回答,但是我想知道为什么,利弊有哪些呢?
a852695
2019-03-12 17:50:19 +08:00
还是看你任务类型吧,celery 效率比较低
cs8814336
2019-03-13 09:00:13 +08:00
我理解你的协程是 tornado 进程里面的程序的协程吧. 这个问题当然是你能多进程多协程比多进程或者多线程号,所以能协程你就扔协程, 但是你说用 celery 其实还是一个队列解耦的一个好东西 . 要我选就选解耦微服务, 否则后面扩展很难
cs8814336
2019-03-13 09:01:22 +08:00
celery 也可以用协程 gevent 的, 所以其实你这 2 个感觉不能这么比着选
zhze93
2019-03-17 20:14:48 +08:00
我之前做的时候,直接放在 celery 里做的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/543758

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX