日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

tornado学习笔记day08-tornado中的异步

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 tornado学习笔记day08-tornado中的异步 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

應為epoll主要用來解決網絡的并發問題,所以tornado中的異步也是主要體現在網絡的IO異步上,即異步web請求

tornado.httpclient.AsyncHTTPClient

tornado提供異步web請求客戶端,可以用來進行異步web請求,
這個客戶端和服務端是相對來說的,當tornado的Handler去其他位置去請求資源的時候,他就是客戶端

fetch(request, callback=None)

用于執行一個web請求,并異步響應返回一個tornado.httpclient.httpresponse
request可以是一個url,也可以是一個tornado.httpclient.httprequest對象
如果插入的是url會自動生成一個request對象

HTTPRequest

概述

HTTP請求類,該類的構造函數可以接收參數

參數

  • url: 字符串類型,要訪問的網址,必傳
  • method: 字符串類型,HTTP請求方式
  • headers: 字典類型,或者HTTPHeaders類型
  • body: HTTP請求體

HTTPResponse

響應類

屬性

  • code: 狀態碼
  • reason: 狀態碼的描述
  • body: 響應的數據
  • error: 異常

@tornado.web.asynchronous

不關閉通訊的通道

'''tornado 6之后棄用''' @tornado.web.asynchronous 改成 @tornado.gen.coroutine

示例

回調函數實現異步

代碼示例

class Students1Handler(RequestHandler):def on_response(self,response):print("剛進到on_response里面n")if response.error:self.send_error(500)else:print("開始獲取data")data = json.loads(response.body)print("data獲取成功")self.write(data)print("data寫入成功")self.finish()@tornado.gen.coroutinedef get(self):# 獲取所有學生的信息# time.sleep(30)# 創建客戶端url = "http://127.0.0.1:8080/home"print("url是",url)client = AsyncHTTPClient()print("客戶端創建成功")client.fetch(url, self.on_response)self.write("students info content!")class HomeHandler(RequestHandler):def get(self):# 獲取所有學生的信息self.write("homo page info!")

協程實現異步

代碼示例1

class Students2Handler(RequestHandler):@tornado.gen.coroutinedef get(self, *args, **kwargs):url = "http://s.budejie.com/topic/tag-topic/64/hot/budejie-android-6.6.9/0-20.json?market=xiaomi&ver=6.6.9&visiting=&os=7.1.1&appname=baisibudejie&client=android&udid=863254032906009&mac=02%3A00%3A00%3A00%3A00%3A00"client = AsyncHTTPClient()res = yield client.fetch(url)if res.error:self.send_error(500)else:data = json.loads(res.body)self.write(data)

代碼示例2 , 將異步web請求單獨分離出來

class Students3Handler(RequestHandler):@tornado.gen.coroutinedef get(self, *args, **kwargs):res = yield self.getData()self.write(res)@tornado.gen.coroutinedef getData(self):url = "http://s.budejie.com/topic/tag-topic/64/hot/budejie-android-6.6.9/0-20.json?market=xiaomi&ver=6.6.9&visiting=&os=7.1.1&appname=baisibudejie&client=android&udid=863254032906009&mac=02%3A00%3A00%3A00%3A00%3A00"client = AsyncHTTPClient()res = yield client.fetch(url)if res.error:ret = {"ret":0}else:ret = json.loads(res.body)raise tornado.gen.Return(ret) class HomeHandler(RequestHandler):def get(self):# 獲取所有學生的信息self.write("homo page info!")

相似文章

tornado學習筆記day01 tornado學習筆記day02 tornado學習筆記day03 tornado學習筆記day04 tornado學習筆記day05 tornado學習筆記day06 tornado學習筆記day07 tornado學習筆記day08

總結

以上是生活随笔為你收集整理的tornado学习笔记day08-tornado中的异步的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。