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
人生最曼妙的风景,竟是内心的淡定与从容!