Python的多進(jìn)程可以借助from multiprocessing import Pool
來實(shí)現(xiàn)吗跋。
簡而言之分為這樣幾步:
- 導(dǎo)入包
from multiprocessing import Pool
- 編寫任務(wù)函數(shù)。
def 任務(wù)函數(shù)(參數(shù))
- 實(shí)例化進(jìn)程池并設(shè)置進(jìn)程數(shù)狗超。
pool=Pool(欲設(shè)置的進(jìn)程數(shù))
- 開始布置任務(wù)识脆,把多個(gè)任務(wù)添加進(jìn)多進(jìn)程池梯浪。
pool.apply_async(任務(wù)函數(shù),函數(shù)對(duì)應(yīng)的參數(shù)元組)
- 關(guān)閉進(jìn)程池的打包询微。
pool.close()
- 開始執(zhí)行多進(jìn)程。
pool.join()
具體使用方式詳見代碼:
import requests
from multiprocessing import Pool
def mission(url,n): #多進(jìn)程要調(diào)用的任務(wù)函數(shù)统屈,這里我把視頻的編號(hào)也帶上留作打印
print(url,"say hi") #來個(gè)標(biāo)記胚吁,打印視頻的URL
response=requests.get(url) #請(qǐng)求視頻內(nèi)容
f=open(f"./%03d.ts"%n,"wb") #打開空文件
f.write(response.content) #寫入下載內(nèi)容到空的視頻文件中
f.close() #寫入結(jié)束
print("%03d.ts OK..."%n) #打印告知視頻已寫入完畢
if __name__ == "__main__":
pool=Pool(10) #設(shè)置10個(gè)進(jìn)程
for n in range(1,7): #我有6小段視頻等待爬取
url = f"https://fable.vzaar.com/v4/usp/vz7b388613953b4867b8ea4436f03475ea/16997578.ism/16997578-audio_eng=123960-video_eng=511000-{n}.ts"
pool.apply_async(mission,(url,n)) #任務(wù)函數(shù)、視頻愁憔、編號(hào)打包進(jìn)多進(jìn)程池里
pool.close() #打包完畢
pool.join() #開始執(zhí)行多進(jìn)程
綜上所述腕扶。多進(jìn)程需要這幾步:
- from multiprocessing import Pool
- 編寫任務(wù)函數(shù)。這里我們用的是
def mission(url,n):
- 實(shí)例化吨掌,設(shè)置進(jìn)程數(shù)半抱。這里我們用的是
pool=Pool(10) #設(shè)置10個(gè)進(jìn)程
- 把多個(gè)任務(wù)添加進(jìn)多進(jìn)程池。這里我們用的是
for
循環(huán)配合pool.apply_async(mission,(url,n))
來添加進(jìn)去膜宋,注意apply_async
的使用方法是apply_async(任務(wù)函數(shù),函數(shù)對(duì)應(yīng)的參數(shù)元組)
窿侈。 - 打包完畢,關(guān)閉打包秋茫。
pool.close()
- 開始執(zhí)行多進(jìn)程史简。
pool.join()
運(yùn)行結(jié)果:
https://fable.vzaar.com/v4/usp/vz7b388613953b4867b8ea4436f03475ea/16997578.ism/16997578-audio_eng=123960-video_eng=511000-1.ts say hi
https://fable.vzaar.com/v4/usp/vz7b388613953b4867b8ea4436f03475ea/16997578.ism/16997578-audio_eng=123960-video_eng=511000-2.ts say hi
https://fable.vzaar.com/v4/usp/vz7b388613953b4867b8ea4436f03475ea/16997578.ism/16997578-audio_eng=123960-video_eng=511000-4.ts say hi
https://fable.vzaar.com/v4/usp/vz7b388613953b4867b8ea4436f03475ea/16997578.ism/16997578-audio_eng=123960-video_eng=511000-3.ts say hi
https://fable.vzaar.com/v4/usp/vz7b388613953b4867b8ea4436f03475ea/16997578.ism/16997578-audio_eng=123960-video_eng=511000-6.ts say hi
https://fable.vzaar.com/v4/usp/vz7b388613953b4867b8ea4436f03475ea/16997578.ism/16997578-audio_eng=123960-video_eng=511000-5.ts say hi
006.ts OK...
004.ts OK...
002.ts OK...
005.ts OK...
003.ts OK...
001.ts OK...
可見,由于下載和寫入文件的速度快慢對(duì)每個(gè)進(jìn)程的執(zhí)行時(shí)間是有影響的……