tornado基于 epoll 的事件驱动框架,单线程的。
在处理耗时操作时,如sleep或者网络io的时候会则阻塞整个系统,让其他请求无法执行
time.sleep(10) # 阻塞系统
yield tornado.gen.sleep(5) 不阻塞系统
requests.post(url, headers=headers, timeout=timeout, data=sql) # 阻塞系统
# 不阻塞系统。 等待网络请求的完成,但不阻塞其他的请求操作
client = tornado.httpclient.AsyncHTTPClient()
result = yield client.fetch(url, method='POST', headers=headers, body=sql, connect_timeout=timeout)
class xxHandler():
executor = ThreadPoolExecutor(10)
@run_on_executor
def long_time_wait(self):
pass
@tornado.gen.coroutine
def get(self, *args, **kwargs):
yield self.long_time_wait()
https://blog.csdn.net/u012089823/article/details/88244884
https://zhuanlan.zhihu.com/p/507224519