1. 程式人生 > >python3中的程序池(附帶例項,一個fake檔案下載)

python3中的程序池(附帶例項,一個fake檔案下載)

'''
<程序池的概念>
初始化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!')