1. 程式人生 > >tornado_http同步IO非同步IO

tornado_http同步IO非同步IO

同步IO:

from tornado.httpclient import HTTPClient


def synchronous():
    http_client = HTTPClient()
    response = http_client.fetch('www.baidu.com')
    print(response.body)

同步IO操作導致請求程序阻塞,直到IO操作完成,上述程式碼中典型的同步IO訪問百度網站,該函式的執行取決於網速、對方伺服器的響應速度等,只有當訪問成功並且獲取到結果後,才能完成該函式的全部執行

非同步IO:

from tornado.httpclient import AsyncHTTPClient

def handle_response(response):
    print(response.body)

def asynchronous():
    http_client = AsyncHTTPClient()
    http_client.fetch('www.baidu.com', callback=handle_response)

AsyncHTTPClient是Tornado的非同步訪問HTTP客戶端。上述程式碼中asynchronous函式使用AsyncHTTPClient對網站訪問,http_client.fetch()函式會立即返回無需等待,導致asynchronous函式會立即執行完成,當訪問成功後,立即呼叫callback引數指定函式。