最近开始用tornado, 之前接触过的框架有django和flask. tornado的标榜就是异步, 但是在开发的过程中没怎么感觉到. 可能是我的使用问题吧.对异步这些东西的理解不是那么的透彻. 故此希望大家一起讨论下:
1.tornado异步的存在是需要程序中的各个处理均是异步的才行么? 比如访问数据库, 同步的访问的话tornado的异步貌似没有作用. 以及一些比较耗时间的任务, 都需要异步的写法才行, 并不是yield tornado.gen.Task(model.func, args=args)这样了之后就是异步执行了.
2.如果一成立的话每个函数都需要异步的写法, 问题就来了, 异步的程序怎么写呢? 我觉得这个问题挺大, 对异步的东西不是很了解. 还是比如访问数据库, 怎么做到异步的呢? 需要响应的数据库驱动支持么还是?
3.如果这样的话, tornado的优势在哪里呢? tornado的堵塞是会堵塞整个服务器, 好恐怖的赶脚.
PS: 好吧, 我就是想问问异步的程序怎么写的?
比如: yield tornado.gen.Task(model.func, args=args)
然后:
def func(args, callback=None):
time.sleep(10)
data = get_from_mysql(args)
if callback: callback(data)
return data
其实同样的堵塞, 完全没有异步执行, 那以上的程序怎么改成异步的呢??
1.tornado异步的存在是需要程序中的各个处理均是异步的才行么? 比如访问数据库, 同步的访问的话tornado的异步貌似没有作用. 以及一些比较耗时间的任务, 都需要异步的写法才行, 并不是yield tornado.gen.Task(model.func, args=args)这样了之后就是异步执行了.
2.如果一成立的话每个函数都需要异步的写法, 问题就来了, 异步的程序怎么写呢? 我觉得这个问题挺大, 对异步的东西不是很了解. 还是比如访问数据库, 怎么做到异步的呢? 需要响应的数据库驱动支持么还是?
3.如果这样的话, tornado的优势在哪里呢? tornado的堵塞是会堵塞整个服务器, 好恐怖的赶脚.
PS: 好吧, 我就是想问问异步的程序怎么写的?
比如: yield tornado.gen.Task(model.func, args=args)
然后:
def func(args, callback=None):
time.sleep(10)
data = get_from_mysql(args)
if callback: callback(data)
return data
其实同样的堵塞, 完全没有异步执行, 那以上的程序怎么改成异步的呢??