tornado使用異步

      網友投稿 790 2022-05-30

      為什么要用異步

      一般代碼都是同步執行,會產生阻塞的問題(比如后端在從數據庫中調數據渲染給前端頁面時,發現數據庫中沒有指定數據或者存在臟數據就會出現此問題【會一直顯示正在加載】,甚至會卡死!)

      而使用異步則可以解決此類問題:

      異步處理可以讓應用/程序在長時間的API和數據庫請求中避免阻塞的時間耗費,最終更快地服務更多請求。

      注意——異步的缺陷:

      應用異步

      1.為了更加直觀鮮明的說明為什么要使用異步:

      我選擇分別使用異步和同步實現同一功能觀察各自響應過程,并通過響應時間為直觀性標準加以說明。

      2.實現的同一功能是:

      實現指定URL的圖片的上傳功能(其實就是爬蟲爬取圖片)。

      3.提供兩個圖片URL以供測試使用(一個是固定圖片的URL/一個是隨機圖片的URL):

      ①請求隨機圖片的網址 : http://source.unsplash.com/random

      ②請求固定圖片的網址:http://pic1.win4000.com/wallpaper/2018-05-08/5af150aea45bd.jpg

      (1)同步版本實現:

      首先下載requests庫以供功能實現使用:

      pip install requests

      1.指定URL的圖片上傳功能邏輯實現(在handler中創建service.py文件編寫SyncSaveHandler類)

      from .main import AuthBaseHandler import requests from utils.photo import UploadImage from utils.account import add_post import tornado.web from uuid import uuid4 class SyncSaveHandler(AuthBaseHandler): """ 同步上傳指定url的圖片功能 """ @tornado.web.authenticated def get(self,*args,**kwargs): # 獲取上傳的地址 save_url = self.get_argument('save_url',None) print('上傳的圖片鏈接',save_url) headers = { 'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36', } resp = requests.get(url=save_url, headers=headers) # 保存上傳的圖片的路徑 print("上傳狀態碼",resp.status_code) # 用戶上傳圖片處理邏輯類的初始化 圖片名稱通過uuid4庫隨機生成 upload_im = UploadImage(self.settings['static_path'], '{}.jpg'.format(uuid4().hex)) # 1.用戶上傳圖片的保存 upload_im.save_upload(resp.content) # 2.生成用戶上傳圖片對應的縮略圖并保存 upload_im.make_thumb() # 3.用戶上傳圖片數據的入庫 add_post(self.current_user, upload_im.image_url, upload_im.thumb_url) # 上傳成功則跳轉到首頁 self.redirect('/')

      ①固定圖片的URL測試:

      運行項目之后,任意登錄某一純凈用戶(新用戶,沒有任何圖片數據),訪問——http://118.31.61.177:8000/save?save_url=http://pic1.win4000.com/wallpaper/2018-05-08/5af150aea45bd.jpg,即可實現指定URL圖片(固定圖片的URL)的上傳并跳轉至首頁。

      ②隨機圖片的URL的測試:

      運行項目之后,任意登錄某一純凈用戶(新用戶,沒有任何圖片數據),訪問——http://118.31.61.177:8000/save?save_url=http://source.unsplash.com/random,即可實現指定URL圖片(隨機圖片的URL)上傳并跳轉至首頁。

      (2)異步版本實現:(Tornado官方文檔中推薦使用 協程 寫異步代碼)

      異步和非阻塞I/O — Tornado 4.3 官方文檔

      生動形象地理解一下異步和非阻塞I/O:

      tornado實現異步的模塊:

      tornado.gen.coroutine + yield

      tornado.httpclient.AsyncHTTPClient

      1.指定URL的圖片上傳功能邏輯實現(在handler中創建的service.py文件編寫AsynSaveHandler類)

      import tornado.gen import tornado.web from tornado.httpclient import AsyncHTTPClient from uuid import uuid4 class AsyncSaveHandler(AuthBaseHandler): """ 異步上傳指定url的圖片功能 """ @tornado.gen.coroutine def get(self,*args,**kwargs): # 獲取上傳的地址 save_url = self.get_argument('save_url',None) print('上傳的圖片鏈接', save_url) # 構造非阻塞HTTP客戶端 client = AsyncHTTPClient() # 發送請求獲取響應 使用yield回調函數配合執行 .fetch()方法:執行一個請求,異步返回一個' HTTPResponse '! resp = yield client.fetch(save_url) # 用戶上傳圖片處理邏輯類的初始化 圖片名稱通過uuid4庫隨機生成 upload_im = UploadImage(self.settings['static_path'], '{}.jpg'.format(uuid4().hex)) # 1.用戶上傳圖片的保存 upload_im.save_upload(resp.body) # 2.生成用戶上傳圖片對應的縮略圖并保存 upload_im.make_thumb() # 3.用戶上傳圖片數據的入庫 add_post(self.current_user, upload_im.image_url, upload_im.thumb_url) # 上傳成功則跳轉到首頁 self.redirect('/')

      ①固定圖片的URL測試:

      tornado中使用異步

      運行項目之后,任意登錄某一純凈用戶(新用戶,沒有任何圖片數據),訪問——http://118.31.61.177:8000/async?save_url=http://pic1.win4000.com/wallpaper/2018-05-08/5af150aea45bd.jpg,即可實現指定URL圖片(固定圖片的URL)的上傳并跳轉至首頁。

      ②隨機圖片的URL的測試:

      運行項目之后,任意登錄某一用戶,訪問——http://118.31.61.177:8000/async?save_url=http://source.unsplash.com/random,即可實現指定URL圖片(隨機圖片的URL)上傳并跳轉至首頁。

      (3)總結:

      我們觀察上面同步代碼和異步代碼實現的功能測試截圖:

      可以明顯看到,使用異步代碼實現隨機圖片下載時(3365.48ms)比使用同步代碼(4197.10ms)要快很多!!!

      Tornado

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:String 還能這樣性能調優,我直呼內行
      下一篇:信息系統項目管理師項目變更管理
      相關文章
      亚洲AV无码一区二区三区在线观看| 久久久久亚洲精品无码网址色欲| 亚洲M码 欧洲S码SSS222| 亚洲中文字幕无码av永久| 亚洲在成人网在线看| 亚洲第一成年网站大全亚洲| 亚洲综合区图片小说区| 亚洲精品日韩专区silk| 亚洲六月丁香六月婷婷色伊人| 亚洲第一永久在线观看| 亚洲综合久久一本伊伊区| 亚洲av乱码一区二区三区| 日韩亚洲国产综合高清| 亚洲精品V天堂中文字幕| 国产精品久久久久久亚洲影视| 亚洲AⅤ优女AV综合久久久| 亚洲国产一级在线观看| 狠狠色婷婷狠狠狠亚洲综合| 永久亚洲成a人片777777| 国产亚洲精品a在线观看app| 亚洲大成色www永久网站| 亚洲人成依人成综合网| 亚洲欧洲日产v特级毛片| 亚洲一区中文字幕在线电影网| 久久乐国产综合亚洲精品| 亚洲另类无码专区丝袜| 国产精品亚洲а∨天堂2021| 亚洲情a成黄在线观看| 亚洲色偷拍另类无码专区| 亚洲AV乱码久久精品蜜桃| 亚洲美女大bbbbbbbbb| 亚洲一区精品视频在线| 亚洲一卡一卡二新区无人区| 色噜噜噜噜亚洲第一| 国产日产亚洲系列最新| 亚洲va久久久噜噜噜久久狠狠| 亚洲一级二级三级不卡| 亚洲日日做天天做日日谢| 国产成人亚洲综合在线| 亚洲综合色自拍一区| 久久精品国产亚洲av日韩|