異步爬蟲 原理與解析

先遍歷100遍一個程序

import requests
import logging
import timelogging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s: %(message)s')
TOTAL_NUMBER = 100
BASE_URL = 'https://ssr4.scrape.center/'start_time = time.time()
for id in range(1,TOTAL_NUMBER + 1):url =BASE_URL.format(id=id)logging.info('scraping %s',url)response = requests.get(url)
end_time = time.time()
logging.info('total time: %s seconds',end_time - start_time)

?耗時較長

同步指不同程序單元為了完成某個任務在執行過程中需靠某種通信方式以協調一致,稱這些程序單元是同步執行的

同步意味著有序

異步 不同程序單元之間無需通信協調,也能完成任務的方式,不相關的程序單元之間可以是異步的

異步以為著無序

協程

coroutine

在python中指代為協程對象類型可以將協程對象注冊到時間循環中,它會被事件循環調用

可以使用async關鍵字來定義一個方法

這個方法在調用時不會立即被執行,而是返回一個協程對象

實例引用:

import asyncioasync def execute(X):print('Number:',X)coroutine = execute(1)
print('Coroutine:',coroutine)
print('After calling execute')loop = asyncio.get_event_loop()
loop.run_until_complete(coroutine)
print('After calling loop')

?運行結果如下:

?

import asyncioasync def execute(X):print('Number:',X)return Xcoroutine = execute(1)
print('Coroutine:',coroutine)
print('After calling execute')loop = asyncio.get_event_loop()
task = loop.create_task(coroutine)
print('Task:',task)
loop.run_until_complete(task)
print('Task:',task)
print('After calling loop')

?

import asyncio
import requestsasync def request():url = 'https://www.baidu.com'status = requests.get(url)return statusdef callback(task):print('Status:',task.result())coroutine = request()
task = asyncio.ensure_future(coroutine)
task.add_done_callback(callback)
print('Task:',task)loop = asyncio.get_event_loop()
loop.run_until_complete(task)
print('Task:',task)

一次請求

多任務協程

import asyncio
import requestsasync def request():url = 'https://www.baidu.com'status = requests.get(url)return statustasks = [asyncio.ensure_future(request()) for _ in range(5)]
print('Task:',tasks)loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))for task in tasks:print('Status:',task.result())

?

import asyncio
import requests
import timestart = time.time()async def request():url = 'https://ssr4.scrape.center/'print('Waiting for',url)response = requests.get(url)print('Get response from',url,'response',response)tasks = [asyncio.ensure_future(request()) for _ in range(10)]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))end = time.time()
print('Cost time:',end - start)

?相比于第一個耗時更少

使用aiohttp 模塊 將一個進程掛起

import asyncio
import aiohttp
import timestart = time.time()async def get(url):session = aiohttp.ClientSession()response = await session.get(url)await response.text()await session.close()return responseasync def request():url = 'https://ssr4.scrape.center/'print('Waiting for',url)response = await get(url)print('Get response from',url,'response',response)tasks = [asyncio.ensure_future(request()) for _ in range(10)]
loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait(tasks))end = time.time()
print('Cost time:',end - start)

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

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

相關文章

vscode管理go多個版本

#1.下載go安裝包 https://developer.aliyun.com/mirror/golang/?spma2c6h.25603864.0.0.55ea7c45IsI4GM # 2.創建 sdk 目錄(如果不存在) mkdir -p ~/sdk # 3.解壓下載的 go1.16.15 到 ~/sdk/ tar -C ~/sdk -xzf go1.16.15.linux-amd64.tar.gz # 4.重…

香港維爾利健康科技集團推出AI輔助醫學影像訓練平臺,助力醫護人才數字化轉型

香港維爾利健康科技集團近日正式發布其自主研發的“AI輔助醫學影像訓練平臺(V-MedTrain)”,這一創新平臺的上線,標志著醫學影像教育邁入智能化輔助教學新時代。依托人工智能與大數據分析技術,香港維爾利健康科技集團在…

互聯網+醫療,醫療服務的全方位革新

近年來,互聯網醫療行業迅速崛起,為醫療健康服務帶來了翻天覆地的變革。新模式、新業態層出不窮,不僅大幅提升了醫療健康服務的可及性,也使得群眾就醫體驗更為舒適、便捷。互聯網技術的廣泛應用,不僅改變了醫療核心業務…

酒店智能門鎖系統常見問題解決方法——東方仙盟

重做系統后 usb發卡器與注冊時發卡器不一致 解決發方法: 用總卡重新注冊軟件,要可以開房間的總卡 房號不存在 2聲---正確提示,表示是設置卡 3聲---門鎖已反鎖,解決方法:用能開反鎖的卡或解除反鎖 6聲---房號不對,解決方法&#…

從零開始理解百度語音識別API的Python實現

大家好!今天我要給大家詳細講解一個使用百度語音識別API的Python代碼。這個代碼可以將音頻文件轉換成文字,非常適合做語音轉文字的應用。我會從最基礎的概念開始講起,確保沒有任何編程基礎的朋友也能理解。 翻譯 一、代碼概覽 這段代碼主要…

中小企業適用的幾種會議簽到工具

對企業行政來說,會議簽到是件小事,但處理不好,會直接拖慢會議流程、影響管理效率、降低參會體驗。尤其是面對人數多、時間緊、場地臨時變動等情況,靠傳統紙筆或簡單Excel管理,往往應對乏力。 實際上,簽到看…

android 11.0 打開ALOGV ALOGI ALOGD日志輸出的方法

1.前言 在11.0的系統rom定制化開發中,在某些時候,需要打印ALOGV,ALOGI等TAG日志,在系統中,默認是關閉這些日志的, 防止日志打印過多,系統過于卡頓,但是有時候會為了調試,需要打開日志開關,所以就需要在系統源碼中查看哪里 需要打開日志的開關,來實現日志的打印解決…

語言大模型or時序大模型?原理、應用與未來發展

引言 隨著人工智能技術的飛速發展,大規模預訓練模型已成為當前研究的熱點。其中,語言模型和時序大模型作為兩類重要的模型架構,分別在自然語言處理和時間序列分析領域展現出卓越的性能。然而,這兩類模型在基本原理和應用場景上存…

【Excel數據分析】花垣縣事業單位出成績了,用Excel自帶的M語言做一個數據分析

這里寫自定義目錄標題 花垣縣事業單位出成績了,用Excel自帶的M語言做一個數據分析需求 花垣縣事業單位出成績了,用Excel自帶的M語言做一個數據分析 Power Query M 語言,簡稱 M 語言,全名叫 Power Query Formula Language。 需求…

微處理器原理與應用篇---音頻采集與串口傳輸功能的系統設計

這段內容是基于 STM32F407VGT6 單片機,實現音頻采集與串口傳輸功能的嵌入式系統設計方案,包含硬件架構、軟件邏輯和代碼實現,核心是通過 ADC 采集音頻、串口收發指令與數據 ,以下分模塊拆解: 一、系統設計概述 硬件&…

【大模型學習 | 量化】pytorch量化基礎知識(1)

pytorch量化 [!note] 官方定義:performing computations and storing tensors at lower bitwidths than floating point precision.支持INT8量化,可以降低4倍的模型大小以及顯存需求,加速2-4倍的推理速度通俗理解:降低權重和激活值…

ES和 Kafka 集群搭建過程中的典型問題、配置規范及最佳實踐

Kafka 集群搭建與配置經驗庫文檔(完整會話匯總) 一、會話問題分類與解決方案 1. Elasticsearch 映射解析錯誤 問題現象: {"error":{"root_cause":[{"type":"mapper_parsing_exception","re…

Linux-信號量

目錄 POSIX信號量 信號量的原理 信號量的概念 申請信號量失敗被掛起等待 信號量函數 二元信號量模擬實現互斥功能 基于環形隊列的生產消費模型 下面環形隊列采用數組模擬,用模運算來模擬環狀特性,類似如此 空間資源和數據資源 生產者和消費者申請…

Unity2D 街機風太空射擊游戲 學習記錄 #14 環射和散射組合 循環屏幕道具

概述 這是一款基于Unity引擎開發的2D街機風太空射擊游戲,筆者并不是游戲開發人,作者是siki學院的涼鞋老師。 筆者只是學習項目,記錄學習,同時也想幫助他人更好的學習這個項目 作者會記錄學習這一期用到的知識,和一些…

vue3 定時刷新

在Vue 3中實現定時刷新&#xff0c;你可以使用多種方法。這里列舉幾種常見的方法&#xff1a; 方法1&#xff1a;使用setInterval 這是最直接的方法&#xff0c;你可以在組件的mounted鉤子中使用setInterval來定時執行某些操作&#xff0c;例如重新獲取數據。 <template&…

局域網環境下瀏覽器安全限制的實用方法

在現代 Web 開發和網絡應用中&#xff0c;我們常常會遇到瀏覽器出于安全考慮對某些功能進行限制的情況。例如麥克風、攝像頭、地理位置等敏感功能&#xff0c;通常只能在 HTTPS 協議或 localhost 下使用。然而在局域網開發、測試或特定應用場景中&#xff0c;我們可能需要突破這…

如果你在為理解RDA、PCA 和 PCoA而煩惱,不妨來看看丨TomatoSCI分析日記

當你學習了 RDA、PCA 和 PCoA 這三種常見排序方法后&#xff0c;腦子里是不是也冒出過類似的疑問&#xff1a; PCA、PCoA、RDA 不都能畫圖嗎&#xff1f;是不是可以互相替代&#xff1f; RDA 圖上也有樣本點&#xff0c;那我還需要 PCoA 干什么&#xff1f; ... 這些看似“…

MySQL (二):范式設計

在 MySQL 數據庫設計中&#xff0c;范式設計是構建高效、穩定數據庫的關鍵環節。合理的范式設計能夠減少數據冗余、消除操作異常&#xff0c;讓數據組織更加規范和諧。然而&#xff0c;過度追求范式也可能帶來多表聯合查詢效率降低的問題。本文將深入講解第一范式&#xff08;1…

什么是財務共享中心?一文講清財務共享建設方案

目錄 一、財務共享中心是什么 1.標準化流程 2.集中化處理 3.智能化系統 4.專業化分工 二、財務共享中心的四大模塊 1. 共享系統 2. 共享流程 3. 共享組織 4. 共享數據 三、為什么很多財務共享中心做不下去&#xff1f; 1.只搬人&#xff0c;不換流程 2.系統買了&a…

001 雙指針

雙指針 雙指針&#xff08;Two Pointers&#xff09; 雙指針&#xff08;Two Pointers&#xff09; 對撞指針&#xff08;Opposite Direction Two Pointers&#xff09;&#xff1a; 對撞指針從兩端向中間移動&#xff0c;一個指針從最左端開始&#xff0c;另一個最右端開始&a…