協程是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中文網其他相關文章!