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

不言
發布: 2018-10-16 16:08:36
轉載
2198 人瀏覽過
這篇文章帶給大家的內容是關於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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板