Apabila menggunakan python untuk merangkak data, dayakan merangkak berbilang benang dalam satu proses Lagipun, saya tidak mempunyai berbilang proses kerana keadaan intensif IO.
Kod adalah seperti berikut
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()
Tetapi selagi permintaan benang tidak mengembalikan nilai, benang akan terus menunggu dan tidak akan menulis, jadi akan ada masalah bahawa proses utama tidak disekat.
Seperti yang ditunjukkan dalam gambar
Bagaimana untuk menanganinya, sebagai contoh, tetapkan tamat masa untuk permintaan.dapatkan, tetapi apa yang perlu dilakukan selepas ia melebihi Selepas saya menetapkan tamat masa, nampaknya benang itu telah dibunuh secara langsung, dan saya boleh terus memuat turun sasaran seterusnya , tetapi yang ini tidak dimuat turun Saya seperti Rekod ini, bolehkah anda menangkap pengecualian ini dan menyambung semula? Perkara utama adalah menulis, saya tidak begitu mahir. Sangat tidak dikenali
人生最曼妙的风景,竟是内心的淡定与从容!