Fichiers d'analyse multithread Python, comment définir le délai d'attente pour se reconnecter.
黄舟
黄舟 2017-05-18 11:02:31
0
1
851

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

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

répondre à tous(1)
左手右手慢动作
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'
    
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal