上一篇文章: Python:Tornado 開篇
下一篇文章: Python:Tornado 第一章:異步及協程基礎:第二節:Python關鍵字yield
協程是Tornado種推薦的編程方式,使用協程能夠開發出簡捷、高效的異步處理代碼。編程
衆所周知,CPU的運行效率高於磁盤的存儲,也高於網絡請求,這就致使CPU對數據的處理和數據的存儲或者網絡請求(I/O操做)步伐不一致,此時能夠選擇I/O操做同步或者異步。segmentfault
同步I/O操做,致使進程阻塞,直到I/O操做完成;服務器
異步I/O操做,不會致使請求進程阻塞。網絡
代碼:異步
#導入Tornado的HTTP客戶端 from tornado.httpclient import HTTPClient def synchronous_visit(): http_client=HTTPClient() #阻塞,知道對網址訪問完成 respone=http_client.fetch("http://www.baidu.com") print(respone.body) synchronous_visit()
HTTPClient是Tornato的同步訪問HTTP客戶端。上述代碼中的synchronous_visit()函數使用了典型的同步I/O操做來訪問網址,該函數的執行時間取決於網絡速度、對方服務器的響應速度,只有當訪問徹底結束並獲取結果後,該函數才能執行完成。async
from tornado.httpclient import AsyncHTTPClient def handle_response(response): print(response.body) def asyncronous_visit(): http_client=AsyncHTTPClient() http_client.fetch("http://www.baoidu.com",callback=handle_response)
AsyncHTTPClient是Tornado的異步訪問HTTP客戶端。在上述代碼中的asynchronous_visit()函數中使用了AsyncHTTPClient對第三方網站進行異步訪問,http_client.fetch()
函數會在調用後馬上返回而無需等待實際訪問的完成,從而致使asynchronous
_visit()
也會馬上執行完成。當對網址的訪問實際完成後,AsyncHTTPClient會調用callback參數指定的函數,能夠在這個函數中處理訪問結果。函數