为了账号安全,请及时绑定邮箱和手机立即绑定

无法理解tornado的异步

无法理解tornado的异步

茅侃侃 2018-10-18 18:35:23
看了一些tornado异步的实现,我发现,人们在使用异步非阻塞特性的时候都是使用的线程的能提供异步的package,比如tornado.httpclient.HTTPClient(),但是我要怎样才能将自己的一个耗时函数(比如下面的sleep)变成异步非阻塞呢,代码如下class MainHandler(tornado.web.RequestHandler):     @tornado.web.asynchronous     @tornado.gen.coroutine         def get(self):         tornado.ioloop.IOLoop.instance().add_callback(self.sleep)                 self.finish('OK')             def sleep(self):                 for i in range(100000000):                     if i % 100000 == 0:                 print(i)         print('ooo')当用该handler处理请求时,能立即返回'OK'表示异步能实现,但是在处理sleep的时候却不能处理其他的请求,其他请求会被阻塞知道之前这个请求处理完毕。请问各位大牛有什么方法将自己写的耗时函数变成异步非阻塞呢(不使用线程池,既然异步是tornado的特性,应该是有方法的撒)?这和tornado的单线程循环有关吗?理解错了异步、阻塞和并发,tornado确实能做到异步和非阻塞,但是单线程怎样做到并发呢,当第一个请求过来tornado返回过后,后台还在处理耗时任务,此时如果有其他请求过来,其他请求会处于一直等待的状态,这不是表明无法并行吗?
查看完整描述

9 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

异步就是在做某事之前做另外一件事。

查看完整回答
反对 回复 2018-10-28
  • 9 回答
  • 0 关注
  • 1020 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信