首頁  >  問答  >  主體

python多執行緒爬取文件,怎麼設定超時重連。

在用python爬取資料時,單一進程裡開啟多執行緒抓取,畢竟IO密集我就沒搞多進程了。


程式碼如下

    def get_downloads_url_list(self,pageNum):
        FilePath='C:/RMDZY/h'+str(pageNum)
        os.chdir(FilePath)
        with open(FilePath+'/m3u8.txt', 'r') as f:
            m3u8_txt = f.read()
        download_ts_list = re.findall(r'ppvod' + r'\d{7}' + r'.ts', m3u8_txt)
        download_url_list = [url + str(pageNum) + '/1000kb/hls/' + download_ts_list[i] for i in
                             range(len(download_ts_list))]
        max_length=len(download_url_list)
        dat_list=['ts'+str(i)+'.ts' for i in range(max_length)]
        dat_str='+'.join(dat_list)
        ts_command='copy /b '+dat_str+' new.ts'
        with open('ts.bat','w') as f:
            f.write(ts_command)
        return download_url_list

    def download_by_m3u8(self,i,pageNum):
        download_list=self.get_downloads_url_list(pageNum)
        ts_file = requests.get(download_list[i], verify=False)
        with open('ts'+str(i)+'.ts','ab') as f:
            f.write(ts_file.content)![图片描述][1]

    def download_threading(self,pageNum):
        download_list=self.get_downloads_url_list(pageNum)
        thread_list=[]
        for i in range(len(download_list)):
            thread = threading.Thread(target=self.download_by_m3u8, args=[i,pageNum])
            thread_list.append(thread)
            thread.start()
        for thread in thread_list:
            thread.join()

但是只要一個執行緒的requests沒有回傳值,執行緒就會一直等待,也不會寫入,所以會出現,主行程一直沒阻塞的問題。
如圖


請問怎麼處理,比如,給requests.get設定一個timeout,但是超過之後怎麼處理啊,我設定了timeout之後,好像線程直接被kill了,可以繼續下載下一個目標,但是,這個沒下載的我這麼記錄啊,能不能捕獲這個異常然後重連啊。主要還是寫法,不太會。生疏啊

黄舟黄舟2711 天前771

全部回覆(1)我來回復

  • ringa_lee

    ringa_lee2017-05-18 11:04:31

    雷雷

    回覆
    0
  • 取消回覆