python3中的程序池(附帶例項,一個fake檔案下載)
阿新 • • 發佈:2019-02-15
''' <程序池的概念> 初始化Pool時,可以指定一個最大程序數。在有新的請求提交到Pool中時,如果 池子還沒有滿,那麼就會建立一個新的程序用來執行請求;如果池中的程序數 已經達到最大值,那麼該請求就會等待,直到池中有程序結束,才會建立新的程序 ''' #下面是一個程序池的例子,寫一個偽檔案下載器-->使用多程序(程序池)的思想 #引入多執行緒模組 from multiprocessing import Pool import os,time #downloader(偽檔案下載def) def downloader(file_name): #假裝開始下載 print('%s downloading.....'%file_name) #使def睡眠5秒 time.sleep(5) #假裝下載成功 print('%s finished!!!'%file_name) #主程式(僅當前指令碼執行有效) if __name__ == '__main__': #接收設定下載檔案的總個數 file_num = int(input('plz set total download files num here : ')) # file_num = 100 #接收設定程序池中存在程序的最大極值 max_process = int(input('plz set max pool num here : ')) # max_process = 5 #例項化一個程序池物件 pool = Pool(max_process) #迴圈下載檔案 for v in range(1,file_num+1): #設定檔名稱 file_name = '%d.jpg'%v #使用Pool物件的apply_async()方法迴圈向程序池中新增程序,func->程序執行的def,args->引數元組(單個引數元組時請加,) pool.apply_async(func=downloader,args=(file_name,)) #關閉程序池物件(關閉後pool不再接收新的請求) pool.close() #阻塞一會程序等待其執行完畢(注意:這個一語句一定要放在close後面) pool.join() #假裝所有下載都完成了 print('upload done!')