單線程+異步協程

一 . 線程池和進程池

  可以適當的使用,在大量的IO情況下有更好的方法

import time
from multiprocessing.dummy import Pool
def request(url):print('正在下載->',url)time.sleep(2)print('下載完畢->',url)
start = time.time()
urls = ['www.baidu.com','www.taobao.com','www.sougou.com'
]
pool = Pool(3)
pool.map(request,urls)print('總耗時->',time.time()-start)

二 . 單線程+異步協程(高性能的異步爬蟲)

event_loop:相當于無線循環,我們可以把特殊的函數注冊到這個時間循環上,異步執行
coroutine:協程,就是被async修飾的函數
task:任務,它是對協程進一步封裝,包含了協程的各個狀態
future:將要執行的任務
async/await,這兩個是需要重點了解的

  事件循環

import asyncio
async def hello(name):print('hello->'+ name)
# 獲取一個協程對象
c = hello('attila')# 創建一個事件循環
loop = asyncio.get_event_loop()# 將協程對象注冊到事件循環中,并且啟動事件循環對象
loop.run_until_complete(c)

  task

import asyncio
async def hello(name):print('hello->'+ name)
# 獲取一個協程對象
c = hello('attila')# 創建一個事件循環
loop = asyncio.get_event_loop()# 把協程封裝到task中
task = loop.create_task(c)
print(task)  # Task pending
# 將協程對象注冊到事件循環中,并且啟動事件循環對象
loop.run_until_complete(task)
print(task)  # Task finished

  future

import asyncio
async def hello(name):print('hello->'+ name)
# 獲取一個協程對象
c = hello('attila')# 把協程封裝到task中
task = asyncio.ensure_future(c)# 將協程對象注冊到事件循環中,并且啟動事件循環對象
loop.run_until_complete(task)

  綁定回調

import asynciodef call_back(task):print('---->',task.result())
async def hello(name):print('hello->'+ name)return name
# 獲取一個協程對象
c = hello('attila')# 把協程封裝到task中
task = asyncio.ensure_future(c)
# 給任務綁定一個回調函數,這個call_back里面的參數就是綁定回到函數的task
task.add_done_callback(call_back)
# 將協程對象注冊到事件循環中,并且啟動事件循環對象
loop.run_until_complete(task)

  多任務異步協程(這里需要用到一個新模塊aiohttp,一定不能是requests,因為requests是一個非異步模塊)

    pip install aiohttp

import aiohttp
import asyncioasync def get_page(url):async with aiohttp.ClientSession() as session:async with await session.get(url=url) as response:  # 只要有io操作的地方就要掛起(await)page_text = await response.text()print(page_text)start = time.time()
# 這里的url是自己在后臺搭建的服務器,沒給url都是time.sleep(2)
urls = ['http://127.0.0.1:5000/cat','http://127.0.0.1:5000/dog','http://127.0.0.1:5000/monkey','http://127.0.0.1:5000/cat','http://127.0.0.1:5000/dog','http://127.0.0.1:5000/monkey','http://127.0.0.1:5000/cat','http://127.0.0.1:5000/dog','http://127.0.0.1:5000/monkey',
]
tasks = []
loop = asyncio.get_event_loop()
for url in urls:c = get_page(url)task = asyncio.ensure_future(c)tasks.append(task)
loop.run_until_complete(asyncio.wait(tasks))
print('總耗時->',time.time()-start)   # 總耗時-> 2.053046464920044

?

  

?

轉載于:https://www.cnblogs.com/attila/p/10913429.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275085.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275085.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275085.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Repeater\DataList\GridView實現分頁,數據編輯與刪除

一、實現效果 1、GridView 2、DataList 3、Repeater 二、代碼 1、可以去Csdn資源下載,包含了Norwind中文示例數據庫噢!(放心下,不要資源分) 下載地址:數據控件示例源碼Norwind中文數據庫 2、我的開發環境&a…

網站快速成型_我的老板對快速成型有什么期望?

網站快速成型Some of the top excuses I have gotten from clients when inviting them into a prototyping session are: “I am not a designer!” “I can’t draw!” “I have no creative background!”在邀請客戶參加原型制作會議時,我從客戶那里得到的一些主…

碎片化學前端,融入到積極上進的環境,我推薦~

眾所周知,關注公眾號可以了解學習掌握技術方向,學習優質好文,落實到自己項目中。還可以結交圈內好友,讓自己融入到積極上進的技術氛圍,促進自己的技術提升。話不多說,推薦這些優質前端公眾號前端之神 80w閱…

重學JavaScript深入理解系列(六)

JavaScript深入理解—-閉包(Closures) 概要 本文將介紹一個在JavaScript經常會拿來討論的話題 —— 閉包(closure)。閉包其實已經是個老生常談的話題了; 有大量文章都介紹過閉包的內容,盡管如此,這里還是要試著從理論角…

EXT.NET復雜布局(四)——系統首頁設計(上)

很久沒有發帖了,很是慚愧,因此給各位使用EXT.NET的朋友獻上一份禮物。 本篇主要講述頁面設計與效果,下篇將講述編碼并提供源碼下載。 系統首頁設計往往是個難點,因為往往要考慮以下因素: 重要通知系統功能菜單快捷操作…

figma設計_在Figma中使用隔片移交設計

figma設計I was quite surprised by how much the design community resonated with the concept of spacers since I published my 自從我發表論文以來,設計界對間隔件的概念產生了多少共鳴,我感到非常驚訝。 last story. It encouraged me to think m…

axios源碼中的10多個工具函數,值得一學~

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。本文來自讀者Ethan01投稿…

安裝jenkins時出現 No such plugin: cloudbees-folder的解決辦法

今天安裝了一下jenkins,在初始化安裝插件時出現“ No such plugin: cloudbees-folder”錯誤,根據網上的教程: 1、打開鏈接“http://ftp.icm.edu.pl/packages/jenkins/plugins/cloudbees-folder/”,在最下面找到并打開“latest”目…

寄充氣娃娃怎么寄_我如何在5小時內寄出新設計作品集

寄充氣娃娃怎么寄Over the Easter break, I challenged myself to set aside an evening rethinking the structure, content and design of my portfolio in Notion with a focus on its 在復活節假期,我挑戰自己,把一個晚上放在一邊,重新思…

基于Hbase的用戶評分協同過濾推薦算法

基于Hbase的用戶評分協同過濾推薦算法 作者: 張保維 2012-1-3 一、 概述 本文為推薦引擎設計的基礎篇,介紹基于hbase 存儲方式用戶評分的方式進行推薦的主體算法及在分布式平臺環境下的實現。由于推薦算法分支眾多,我們先從簡單及實用的算法…

最全 JavaScript Array 方法 詳解

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。我們在日常開發中&#…

[譯] React Hooks: 沒有魔法,只是數組

[譯] React Hooks: 沒有魔法,只是數組 原文鏈接: medium.com/ryardley/r… 我是 React 新特性 Hooks 的粉絲。但是,在你使用 React Hooks的過程中,有一些看上去 很奇怪的限制 。在本文里,對于那些還在為了理解這些限制…

管理溝通中移情的應用_移情在設計中的重要性

管理溝通中移情的應用One of the most important aspects of any great design is the empathetic understanding of and connection to the user. If a design is ‘selfish’, as in when a product designed with the designer in mind and not the user, it will ultimatel…

網易前端進階特訓營,邀你免費入營!一舉解決面試晉升難題!

網易等大廠的前端崗位一直緊缺,特別是資深級。最近一位小哥面進網易,定級P4(資深),總包60W,給大家帶來真實面經要點分享。網易的要求有:1.對性能優化有較好理解,熟悉常用調試工具2.熟…

Feign的構建過程及自定義擴展功能

spring-cloud-openfeign-core-2.1.1.RELEASE.jar 中 HystrixFeign 的詳細構建過程: EnableFeignClients -> FeignClientsRegistrar 掃描 Feign注解的類 -> FeignClientFactoryBean通過Targeter生產FeignClient -> Targeter通過Feign.Builder構建Feign ->…

angelica類似_親愛的當歸(Angelica)是第一個讓我哭泣的VR體驗

angelica類似It was a night just like any other night. I finished work for the day and closed my laptop. I had dinner and after an hour, I put on my Oculus Quest headset in order to begin my VR workout.就像其他任何夜晚一樣, 這 是一個夜晚。 我完成…

面試官:請手寫一個帶取消功能的延遲函數,axios 取消功能的原理是什么

大家好,我是若川。最近組織了源碼共讀活動,感興趣的可以點此加我微信 ruochuan12 參與,每周大家一起學習200行左右的源碼,共同進步。同時極力推薦訂閱我寫的《學習源碼整體架構系列》 包含20余篇源碼文章。本文倉庫 https://githu…

關于base64編碼的原理及實現

我們的圖片大部分都是可以轉換成base64編碼的data:image。 這個在將canvas保存為img的時候尤其有用。雖然除ie外,大部分現代瀏覽器都已經支持原生的基于base64的encode和decode,例如btoa和atob。(將canvas畫布保存成img并強制改變…

Django web開發系列(五)模板

一 前言在上一節了解到視圖函數處理后,會將結果渲染到創建的html頁面,但html如何接收并顯示視圖函數返回的動態數據呢?最常用的做法就是使用模板(Template),本節將簡單介紹一下模板的作用和用法。 可以這樣簡單的理解模板的概念&a…

facebook 面試_如何為您的Facebook產品設計面試做準備

facebook 面試重點 (Top highlight)Last month, I joined Facebook to work on Instagram DMs and as a way to pay it forward, I 上個月,我加入了Facebook,從事Instagram DM的工作,作為一種支付方式,我 offered to help anyone…