tornado中非同步request使用

2021-08-29 02:28:57 字數 3028 閱讀 9246

使用httprequest太無腦了,太莽了,當希望使用非同步request時,首先引入asynchttprequest

from tornado.httpclient import asynchttpclient
將介面中的方法新增上tornado的協程符

@coroutine
根據request的方式(get或者post)封裝引數

get方法,封裝url,分為三部分, host,介面路由以及引數串,其中介面路由和引數由 『?』 分割

(host, name, query_str)post方法, 將引數列表封裝為dict,並用urlencode處理

args =

body = urllib.urlencode(args)

傳送請求: 由於是非同步方法,使用yield asynchttpclient().fetch()方法傳送

引數列表:

獲取response內容:

使用safe_json_decode以及safte_typed_from_str來解析response

int)最後對response內容進行校驗,輸出日誌raise error

乙個模板類,僅供參考

:raise blerror(u'內部呼叫錯誤'

)except exception as e:

gen_log.warn(u'request to {}/{} failed {}'

.format

(host, name,

unicode

(e))

)raise blerror(u'內部呼叫錯誤'

)if nocheck:

raise return(res.body)

else

: data = safe_json_decode(res.body)

if data[

'status']!=

1:raise blerror(u'內部呼叫錯誤'

)raise return(data[

'data'

])

Tornado非同步學習

why asynchronous tornado是乙個非同步web framework,說是非同步,是因為tornado server與client的網路互動是非同步的,底層基於io event loop。但是如果client請求server處理的handler裡面有乙個阻塞的耗時操作,那麼整體的s...

Tornado非同步模式

先介紹下背景 由於工作需要,前段時間又寫了一段爬蟲去獲取和更新一些資料。之前爬蟲主要用scrapy框架批量爬取一些頁面資料,或者用gevent呼叫目標站點的介面。偶然看到了tornado,聽說這個框架很強大,所以打算這次爬蟲用tornado試試。不足之處,歡迎指正。總的來說,tornado是pyth...

Tornado 非同步socketTCP通訊

tornado 有 tcpclient 和 tcpserver 兩個類,可用於實現 tcp 的客戶端和服務端。事實上,這兩個類都是對iostream的簡單包裝。iostream 是 client 與 server 之間的 tcp 通道。被動等待建立 iostream 的一方是 server,主動找對...