1
9hills 2015-04-16 09:25:22 +08:00 via iPhone
我的选择是把所有任务都扔rq
|
2
sujin190 2015-04-16 09:31:50 +08:00
这样效率太低了吧,tornado在web方面的优势都被弄的没了
|
3
ipconfiger OP @sujin190 一句慢查询就把整个进程都堵塞了,异步扔到队列到远程主机跑当然省事,但是获取返回值呢?有些服务还是需要获取返回值的。这个方案也说不上最完美,但是好歹本地的后端进程耗尽的话也就堵塞那几个耗时的要放后端进程处理的请求,其余的请求是畅通的。这里不是要取代tornado现有的方式,而是提供一个额外的处理耗时请求的方法而已,比如上传了图片要缩略啊,切图啊。或者转发到七牛又拍什么的。
|
4
futursolo 2015-04-16 10:14:30 +08:00
你这个和tornado自带的tornado.concurrent.run_on_executor以及return_future的方法有什么区别?
|
5
ipconfiger OP |
6
wph95 2015-04-16 10:36:35 +08:00
@ipconfiger 我现在是用celery+rq实现了异步任务,多机扩展很方便,返回值通过rq来传递也不算麻烦。
不知道torasync相较Celery有没有杀手锏级别的特点 |
7
ipconfiger OP @wph95 安装方便,使用方便,0配置
|
8
futursolo 2015-04-16 10:47:31 +08:00 1
@ipconfiger
1. 没事,偶都是3.2.5 +的 2. Python2 执行·pip install features·就可以安装features。。。(你没看括号里的内容吗。。。) 3. Callback is deprecated, simply call and yield its Future. -- From Motor |
10
scys 2015-04-16 11:01:24 +08:00 via Android
3.4效率很低…就是编写方便多了
|
12
sujin190 2015-04-16 13:59:56 +08:00
@ipconfiger 查询数据库的话一般都有异步版了吧,传七牛的话异步的http client不是更好用么?如果是要处理大量的缩略图的话,不是应该tornado进程先完成保存文件,接着通知后端服务完成处理么?这样做反而可控性不好和效率也起不来
|
13
ipconfiger OP @sujin190 你可以想得更复杂一点,先各种数据库判断处理,再传七牛,传完以后再各种处理等等
|
15
ipconfiger OP tornado大版本都已经4了,期间无论是官方的还是各路大仙自己倒腾的,对于这个痛点也有很多不同的方案,我只是针对自己实际使用的时候遇到的一些问题给出了一个方案,所以不一定适合所有人,其实也没有万能解,方案的得失大家可以一起讨论,放出来只是希望有需求的同学能方便一下,仅此而已
|
16
wph95 2015-04-16 15:24:12 +08:00
@no13bus celery 是Distributed Task Queue 需要Brokers 我不过是用rq做Brokers
celery本身只是一个分配系统 自身不是队列 |
18
kernel1983 2015-04-16 16:14:16 +08:00
我们的做法是消灭慢查询
|
19
sujin190 2015-04-16 16:18:11 +08:00
@ipconfiger 就算是是如此还是明显tornado自身更省资源更快吧,用greenlet来切换同步io操作都要比多进程好的多
|
20
sujin190 2015-04-16 16:18:51 +08:00
@kernel1983 说的是消灭慢查询才是王道
|
22
billzhuang 2015-04-17 10:11:00 +08:00
不管是不是慢查询,只要是异步IO的就好啦
|
23
mucid 2015-04-17 22:48:21 +08:00
看了下代码,我还是自己开线程处理吧
|