最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用PyCharm Profile分析異步爬蟲效率詳解

 更新時間:2019年05月08日 10:30:27   作者:長江CJ  
這篇文章主要給大家介紹了關于如何利用PyCharm Profile分析異步爬蟲效率的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用PyCharm具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

今天比較忙,水一下

下面的代碼來源于這個視頻里面提到的,github 的鏈接為:github.com/mikeckenned…(本地下載

第一個代碼如下,就是一個普通的 for 循環(huán)爬蟲。原文地址

import requests
import bs4
from colorama import Fore


def main():
 get_title_range()
 print("Done.")


def get_html(episode_number: int) -> str:
 print(Fore.YELLOW + f"Getting HTML for episode {episode_number}", flush=True)

 url = f'https://talkpython.fm/{episode_number}'
 resp = requests.get(url)
 resp.raise_for_status()

 return resp.text


def get_title(html: str, episode_number: int) -> str:
 print(Fore.CYAN + f"Getting TITLE for episode {episode_number}", flush=True)
 soup = bs4.BeautifulSoup(html, 'html.parser')
 header = soup.select_one('h1')
 if not header:
  return "MISSING"

 return header.text.strip()


def get_title_range():
 # Please keep this range pretty small to not DDoS my site. ;)
 for n in range(185, 200):
  html = get_html(n)
  title = get_title(html, n)
  print(Fore.WHITE + f"Title found: {title}", flush=True)


if __name__ == '__main__':
 main()

這段代碼跑完花了37s,然后我們用 pycharm 的 profiler 工具來具體看看哪些地方比較耗時間。

點擊Profile (文件名稱)

之后獲取到得到一個詳細的函數(shù)調(diào)用關系、耗時圖:

可以看到 get_html 這個方法占了96.7%的時間。這個程序的 IO 耗時達到了97%,獲取 html 的時候,這段時間內(nèi)程序就在那死等著。如果我們能夠讓他不要在那兒傻傻地等待 IO 完成,而是開始干些其他有意義的事,就能節(jié)省大量的時間。

稍微做一個計算,試用asyncio異步抓取,能將時間降低多少?

get_html這個方法耗時36.8s,一共調(diào)用了15次,說明實際上獲取一個鏈接的 html 的時間為36.8s / 15 = 2.4s。**要是全異步的話,獲取15個鏈接的時間還是2.4s。**然后加上get_title這個函數(shù)的耗時0.6s,所以我們估算,改進后的程序?qū)⒖梢杂?3s 左右的時間完成,也就是性能能夠提升13倍。

再看下改進后的代碼。原文地址。

import asyncio
from asyncio import AbstractEventLoop

import aiohttp
import requests
import bs4
from colorama import Fore


def main():
 # Create loop
 loop = asyncio.get_event_loop()
 loop.run_until_complete(get_title_range(loop))
 print("Done.")


async def get_html(episode_number: int) -> str:
 print(Fore.YELLOW + f"Getting HTML for episode {episode_number}", flush=True)

 # Make this async with aiohttp's ClientSession
 url = f'https://talkpython.fm/{episode_number}'
 # resp = await requests.get(url)
 # resp.raise_for_status()

 async with aiohttp.ClientSession() as session:
  async with session.get(url) as resp:
   resp.raise_for_status()

   html = await resp.text()
   return html


def get_title(html: str, episode_number: int) -> str:
 print(Fore.CYAN + f"Getting TITLE for episode {episode_number}", flush=True)
 soup = bs4.BeautifulSoup(html, 'html.parser')
 header = soup.select_one('h1')
 if not header:
  return "MISSING"

 return header.text.strip()


async def get_title_range(loop: AbstractEventLoop):
 # Please keep this range pretty small to not DDoS my site. ;)
 tasks = []
 for n in range(190, 200):
  tasks.append((loop.create_task(get_html(n)), n))

 for task, n in tasks:
  html = await task
  title = get_title(html, n)
  print(Fore.WHITE + f"Title found: {title}", flush=True)


if __name__ == '__main__':
 main()

同樣的步驟生成profile 圖:

可見現(xiàn)在耗時為大約3.8s,基本符合我們的預期了。


總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • python環(huán)境變量配置流程

    python環(huán)境變量配置流程

    這篇文章主要為大家介紹了python環(huán)境變量配置流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-02-02
  • 使用Python實現(xiàn)視頻拼接效果

    使用Python實現(xiàn)視頻拼接效果

    這篇文章主要為大家詳細介紹了使用Python實現(xiàn)視頻拼接效果的兩種方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-02-02
  • Python面向?qū)ο笾瓷?自省機制實例分析

    Python面向?qū)ο笾瓷?自省機制實例分析

    這篇文章主要介紹了Python面向?qū)ο笾瓷?自省機制,結(jié)合實例形式分析了Python面向?qū)ο蟪绦蛟O計中的反射/自省機制概念、原理及相關屬性操作技巧,需要的朋友可以參考下
    2018-08-08
  • windowns使用PySpark環(huán)境配置和基本操作

    windowns使用PySpark環(huán)境配置和基本操作

    pyspark是Spark對Python的api接口,可以在Python環(huán)境中通過調(diào)用pyspark模塊來操作spark,這篇文章主要介紹了windowns使用PySpark環(huán)境配置和基本操作,感興趣的可以了解一下
    2021-05-05
  • 利用Python判斷文件的幾種方法及其優(yōu)劣對比

    利用Python判斷文件的幾種方法及其優(yōu)劣對比

    任何的編程語言都離不開文件操作,文件操作主要是幫助我們更好的創(chuàng)建打開文件,讀取文件中的內(nèi)容、或是把我們想要保存的內(nèi)容寫入文件中、或是管理文件目錄等等,下面這篇文章主要給大家介紹了關于利用Python判斷文件的幾種方法及其優(yōu)劣對比的相關資料,需要的朋友可以參考下
    2022-06-06
  • Python?turtle.shape()用法及實戰(zhàn)案例

    Python?turtle.shape()用法及實戰(zhàn)案例

    turtle是Python自帶的一個小型的繪圖庫,它可以幫助我們快速地繪制簡單的圖形,這篇文章主要給大家介紹了關于Python?turtle.shape()用法及實戰(zhàn)案例的相關資料,需要的朋友可以參考下
    2024-03-03
  • 詳解Python中文分詞而生的jieba庫

    詳解Python中文分詞而生的jieba庫

    這篇文章主要介紹了詳解Python中文分詞而生的jieba庫,在Python中,最好用的中文分詞庫是jieba。用“結(jié)巴”給一個中文分詞庫命名,非常生動形象,同時還帶有一種程序員式的幽默感,需要的朋友可以參考下
    2023-07-07
  • python中快速進行多個字符替換的方法小結(jié)

    python中快速進行多個字符替換的方法小結(jié)

    最近在用python給自己的seo工作提高效率和節(jié)省時間,發(fā)現(xiàn)python真的很不錯,可以完成很多事情。多個字符替換是大家可能都會遇到的一個問題,昨天在工作中就碰到了這么一個問題,所以想著記錄一下解決方案及其過程,方便以后參考。下面來一起看看吧。
    2016-12-12
  • 使用Python讀取二進制文件的實例講解

    使用Python讀取二進制文件的實例講解

    今天小編就為大家分享一篇使用Python讀取二進制文件的實例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • python中apply函數(shù)詳情

    python中apply函數(shù)詳情

    這篇文章主要介紹了python中apply函數(shù)詳情,該函數(shù)最有用的是第一個參數(shù),這個參數(shù)是函數(shù),相當于C/C++的函數(shù)指針,更多詳細內(nèi)容,需要的小伙伴可以參考下面文章內(nèi)容
    2022-01-01

最新評論

张北县| 浙江省| 伊川县| 千阳县| 大姚县| 通化县| 安阳市| 汶上县| 洪雅县| 丹凤县| 商都县| 葫芦岛市| 迭部县| 沽源县| 鹤庆县| 兴业县| 聂荣县| 石首市| 江西省| 郑州市| 遂昌县| 永兴县| 彭泽县| 黎川县| 兴城市| 鹰潭市| 屏山县| 出国| 石门县| 长葛市| 平顺县| 腾冲县| 桐城市| 马边| 普定县| 平果县| 安塞县| 射洪县| 衡阳县| 宁德市| 桃园市|