recherche

Maison  >  Questions et réponses  >  le corps du texte

Fichiers d'analyse multithread Python, comment définir le délai d'attente pour se reconnecter.

Lorsque vous utilisez Python pour explorer des données, activez l'exploration multithread en un seul processus. Après tout, je n'ai pas plusieurs processus en raison de conditions intensives en E/S.


Le code est le suivant

    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()

Mais tant que les requêtes d'un thread ne renvoient pas de valeur, le thread continuera d'attendre et n'écrira pas, il y aura donc un problème que le processus principal ne soit pas bloqué.
Comme le montre l'image


Comment gérer cela, par exemple, définir un délai d'attente pour request.get, mais que faire une fois qu'il est dépassé ? Après avoir défini le délai d'attente, il semble que le thread ait été tué directement et je peux continuer à télécharger la cible suivante ? , mais celui-ci n'est pas téléchargé. Je suis comme cet enregistrement, pouvez-vous intercepter cette exception et vous reconnecter ? L’essentiel c’est d’écrire, je ne suis pas très doué pour ça. Tellement inconnu

黄舟黄舟2827 Il y a quelques jours885

répondre à tous(1)je répondrai

  • ringa_lee

    ringa_lee2017-05-18 11:04:31

    num = 3 # 重试次数
    while num > 0:
        try:
            result = requests.get(..., timeout=3) 
        except requests.exceptions.ReadTimeout:
            print 'Timeout, try again'
            num -= 1
        else:
            # 成功获取
            print 'ok'
            print result
            break
    else:
        # 3次都失败
        print 'Try 3 times, But all failed'
        

    répondre
    0
  • Annulerrépondre