亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用py-spy解決scrapy卡死的問題方法

 更新時間:2020年09月29日 12:03:54   作者:云中的魚  
這篇文章主要介紹了使用py-spy解決scrapy卡死的問題方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

背景

在使用scrapy爬取東西的時候,使用crontab定時的啟動爬蟲,但是發(fā)現(xiàn)機器上經(jīng)常產(chǎn)生很多卡死的scrapy進程,一段時間不管的話,會導(dǎo)致有10幾個進程都卡死在那,并且會導(dǎo)致數(shù)據(jù)產(chǎn)出延遲。

問題定位

使用py-spy這個非常好用的python性能分析工具來進行排查,py-spy可以查看一個python進程函數(shù)調(diào)用用時,類似unix下的top命令。所以我們用這個工具看看是什么函數(shù)一直在執(zhí)行。

首先安裝這個工具

pip install py-spy

用py-spy看看scrapy哪個函數(shù)執(zhí)行時間長

# 先找到這個卡死的scrapy進程的pid
ps -ef |grep scrapy 
# 啟動 py-spy 觀察這進程
py-spy top --pid 53424

首先我們按3,按OwnTime進行排序,這個表示函數(shù)自身執(zhí)行的時間,可以看到read這個函數(shù)執(zhí)行的時間最長,那看來是IO導(dǎo)致的,程序中的IO行為就是讀寫磁盤和網(wǎng)絡(luò)IO,磁盤讀寫一般不會有問題,所以初步定位是網(wǎng)絡(luò)IO導(dǎo)致的。

在這里插入圖片描述

接下來進行進一步確認,再按4,按TotalTIme 所有子函數(shù)執(zhí)行時間總和進行排序,可以看到是在process_item和download,upload_image這些主流程函數(shù)的執(zhí)行時間比較長,這一步是先把圖片下載到本地,然后上傳到靜床,看來是下載這步從網(wǎng)絡(luò)中read數(shù)據(jù)時出現(xiàn)了問題,進一步追蹤代碼。

在這里插入圖片描述

看下download的函數(shù)的代碼:

if filename == '':
      filename = os.path.basename(url)
    path = path + '/' + filename
    
    try:
      res = request.urlretrieve(url,filename=path)
      print(url,res)
      return path
    except Exception as e:
      print('download img failed')
      print(e)
      return False

可以看到用了urllib這個庫里面request.urlretrieve函數(shù),這個函數(shù)是用來下載文件的,去看看python官網(wǎng)文檔的函數(shù)說明,發(fā)現(xiàn)里面沒有超時時間這個參數(shù),所以是由于沒有超時時間,導(dǎo)致一直在read,進而使得進程卡死。

urllib.request.urlretrieve(url, filename=None,reporthook=None,data=None)

解決方案

使用另一種方式來下載圖片,使用支持超時時間的urlopen函數(shù),封裝成一個自定義的url_retrieve,這樣就不再會出現(xiàn)沒有超時導(dǎo)致的卡死問題了。

def url_retrieve(self,url, path):
    r = request.urlopen(url, timeout=5)
    res = False
    with open(path,"wb") as f:
      res = f.write(r.read())
      f.flush()
      f.close()
    return res

到此這篇關(guān)于使用py-spy解決scrapy卡死的問題方法的文章就介紹到這了,更多相關(guān)scrapy卡死內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python正則表達式急速入門(小結(jié))

    Python正則表達式急速入門(小結(jié))

    這篇文章主要介紹了Python正則表達式急速入門(小結(jié)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • python常用模塊(math itertools functools sys shutil)使用講解

    python常用模塊(math itertools functools sys 

    這篇文章主要介紹了python常用模塊之math itertools functools sys shutil的使用示例講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • 對pandas數(shù)據(jù)判斷是否為NaN值的方法詳解

    對pandas數(shù)據(jù)判斷是否為NaN值的方法詳解

    今天小編就為大家分享一篇對pandas數(shù)據(jù)判斷是否為NaN值的方法詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-11-11
  • 總結(jié)的幾個Python函數(shù)方法設(shè)計原則

    總結(jié)的幾個Python函數(shù)方法設(shè)計原則

    這篇文章主要介紹了總結(jié)的幾個Python函數(shù)方法設(shè)計原則,本文講解了每個函數(shù)只做一件事、保持簡單、保持簡短、輸入使用參數(shù)、輸出使用return語句等內(nèi)容,需要的朋友可以參考下
    2015-06-06
  • python實現(xiàn)二級登陸菜單及安裝過程

    python實現(xiàn)二級登陸菜單及安裝過程

    這篇文章主要介紹了python實現(xiàn)二級登陸菜單及安裝過程,,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • Django中幾種重定向方法

    Django中幾種重定向方法

    這篇文章主要介紹了Django中幾種重定向方法,本文講解了使用HttpResponseRedirect、redirect、reverse以及配置文件中配置URL等方法,需要的朋友可以參考下
    2015-04-04
  • Python?Flask框架實現(xiàn)小紅書圖片無水印解析下載

    Python?Flask框架實現(xiàn)小紅書圖片無水印解析下載

    這篇文章主要為大家介紹了Python?Flask框架實現(xiàn)小紅書圖片無水印解析下載,需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Python selenium的安裝和下載谷歌瀏覽器鏡像驅(qū)動

    Python selenium的安裝和下載谷歌瀏覽器鏡像驅(qū)動

    Selenium是一個用于web自動化測試的框架,在使用Ajax請求數(shù)據(jù)的頁面中,會出現(xiàn) sign ,token等密鑰,借助使用Selenium框架來實現(xiàn)數(shù)據(jù)爬取很不錯,本文給大家介紹Python selenium的安裝和下載谷歌瀏覽器鏡像驅(qū)動,需要的朋友可以參考下
    2022-11-11
  • python實現(xiàn)與redis交互操作詳解

    python實現(xiàn)與redis交互操作詳解

    這篇文章主要介紹了python實現(xiàn)與redis交互操作,結(jié)合實例形式分析了Python Redis模塊的安裝、導(dǎo)入、連接與簡單操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2020-04-04
  • 利用Django提供的ModelForm增刪改數(shù)據(jù)的方法

    利用Django提供的ModelForm增刪改數(shù)據(jù)的方法

    這篇文章主要介紹了利用Django提供的ModelForm增刪改數(shù)據(jù),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-01-01

最新評論