同步:是指按部就班一步一步執行,始終按照同一步調執行。
異步:對一個業務邏輯,分到多個主線上執行。 多線程不等於異步
tornado異步:tornado異步實現的機制不是線程,而是epoll,即將異步過程交給epoll執行監視回調。
因爲epoll主要是用來解決網絡IO的併發問題,所以tornado的異步編程也主要體現在網絡IO的異步上,即異步web請求。
1.tornado.httpclient.AsyncHTTPClient --用於進行異步web請求
fetch(request, callback=None) --用於執行一個web請求request,並異步返回一個tornado.httpclient.HTTPResponse響應。
request: 可以是一個url, 也可以是tornado.httpclient。HTTPReuqest對象。
HTTPReuqest請求類常用參數:
url,method --訪問方式,headers --請求頭,body --請求體
HTTPResponse響應常用參數:
code --HTTP狀態碼,reason --狀態碼描述信息, body --響應體字符串, error--異常
2.測試接口
接口說明:
a.請求接口: 接口地址
b響應信息:
c.返回數據格式: json格式
3.回調異步
tornado.web.asynchronous --這個裝飾器用於回調行走時的異步方法,並且應僅用於HTTP方法上。這個裝飾器不會讓被裝飾的方法變爲異步,而是告訴框架被裝飾的方法是異步的,當方法返回時響應應尚未完成,只有request handler調用finish方法後,才結束本次請求處理,發送響應。
4.協程異步
tornado.gen.coroutine
@tornado.gen.coroutine
def get(self):
client = AsynHTTPClient()
resp = yield client.fetch('xxx')
json_data = resp.body
data = json.loads(json_data)
self.write(data.get('name', ''))
python2中 使用yield關鍵字,就不能使用返回數據值的return,用return只能是不帶返回值的。
5.並行協程
tornado中可以同時執行多個異步,併發的異步可以使用字典或列表。