首頁  >  文章  >  後端開發  >  Python中Tornado同步與非同步I/O實例程式碼講解

Python中Tornado同步與非同步I/O實例程式碼講解

不言
不言轉載
2018-10-16 16:07:492136瀏覽
這篇文章帶給大家的內容是關於Python中Tornado同步與非同步I/O實例程式碼講解,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

協程是Tornado種推薦的程式設計方式,使用協程可以開發出簡捷、高效的非同步處理程式碼。

同步與非同步I/O對比

眾所周知,CPU的運作效率高於磁碟的存儲,也高於網路請求,這就導致CPU對資料的處理和資料的儲存或網路請求(I/O操作)步伐不一致,此時可以選擇I/O操作同步或非同步。

同步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操作來存取網址,該函數的執行時間取決於網路速度、對方伺服器的回應速度,只有當存取完全結束並取得結果後,該函數才能執行完成。

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參數所指定的函數,可以在這個函數中處理存取結果。

以上是Python中Tornado同步與非同步I/O實例程式碼講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除