Python:Tornado 第一章:異步及協程基礎:第一節:同步與異步I/O

上一篇文章: Python:Tornado 開篇
下一篇文章: Python:Tornado 第一章:異步及協程基礎:第二節:Python關鍵字yield

協程是Tornado種推薦的編程方式,使用協程能夠開發出簡捷、高效的異步處理代碼。編程

同步與異步I/O對比

衆所周知,CPU的運行效率高於磁盤的存儲,也高於網絡請求,這就致使CPU對數據的處理和數據的存儲或者網絡請求(I/O操做)步伐不一致,此時能夠選擇I/O操做同步或者異步。segmentfault

同步I/O操做,致使進程阻塞,直到I/O操做完成;服務器

異步I/O操做,不會致使請求進程阻塞。網絡

Tornado同步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

Tornado異步I/O的簡單代碼實例:

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參數指定的函數,能夠在這個函數中處理訪問結果。函數

相關文章
相關標籤/搜索