ThreadPoolExecutor
from concurrent.futures.thread import ThreadPoolExecutor import requests song_list=[ {'title':'胡广生.mp3','url':'https://webfs.hw.kugou.com/202401081759/c31a8ef4b3a90566ef3edc50b0ba89cf/v2/8c655f575ebb2414b53eff0d2c13188d/G239/M0B/10/17/j4cBAF-iFpOAfy28ADSAwjCjhSY182.mp3'}, {'title':'爱的尽头.mp3','url':'https://webfs.tx.kugou.com/202401081803/03783d35c65c56c15f1dc22ec6b0b60f/v2/e3e5d6f3505fc4bd5fe145fd810fc431/G312/M05/43/74/GJUEAGVa7GGAKDupAFek4771K10136.mp3'}, {'title': '直到世界尽头.mp3', 'url': 'https://webfs.hw.kugou.com/202401081804/535a2fd592ea6cf53002ef291b29dcdd/v2/19e030ab78dc0ea613ee5b71b250abd3/part/0/960169/G324/M0B/A4/57/clip_JJUEAGTTXSCAbZn7AEqqboHJhh0589.mp3'}, ] def downUrl(url): return requests.get(url).content def save(filename): def done(ret): ret=ret.result() with open('%s'%filename,'wb') as fw: fw.write(ret) return done pool=ThreadPoolExecutor(4) for song in song_list: title=song.get('title') url = song.get('url') task=pool.submit(downUrl,url=url) task.add_done_callback(save(title))