高級編程之 進程

1. 進程

1-1. 進程與程序

進程: 正在執行的程序
程序: 沒有執行的代碼,是一個靜態的

1-2. 進程的狀態

進程的狀態

1-3. 使用進程實現多任務

multiprocessing模塊就是跨平臺的多進程模塊,提供了一個Process類來代表一個進程對象,這個對象可以理解
爲是一個獨立的進程,可以執行另外的事情

1-4. 線程與進程之間的對比

進程: 能夠完成多任務,一臺電腦上可以同時運行多QQ
線程: 能夠完成多任務,一個QQ中的多個聊天窗口
區別: 進程是操作系統資源分配的基本單位,而線程是任務調度和執行的基本單位

1-5. 進程間通信 -Queue

特點:

  • 先進先出

1-6. 多進程共享全局變量

案例:

在這裏插入代碼片

2. 進程池:

定義: 當需要創建的子進程數量不多時,可以直接利用multiprocessing中的Process動態生成多個進程,但是如果是上百甚至上千個目標,手動的去創建的進程的工作量巨大,此時就可以用到multiprocessing模塊提供的Pool方法

初始化Pool時,可以指定一個最大進程數,當有新的請求提交到Pool中時,如果池還沒有滿,那麼就會創建一個
新的進程用來執行該請求,但是如果池中的進程數已經達到指定的最大值,那麼該請求就會等待,直到池中有進
程結束,纔會用之前的進程來執行新的任務

案例:

from multiprocessing import Pool
import os,time,random
def worker(msg):
	t_start = time.time()
	print('%s開始執行,進程號爲%d'%(msg,os.getpid()))
	time.sleep(random.random()*2)
	t_stop = time.time()
	print(msg,"執行完成,耗時%0.2f"%(t_stop-t_start))
def demo():
	pass
if __name__ == '__main__':
	po = Pool(3) # 定義一個進程池
	for i in range(0,10):
		po.apply_async(worker,(i,))
	print("--start--")
	po.close()
	po.join()
	print("--end--")

2-2. 案例,多任務文件夾複製

流程:

  1. 獲取用戶要copy的文件夾的名次
  2. 創建一個新的文件夾
  3. 獲取文件夾的所有的待copy的文件名字
  4. 創建進程池
  5. 向進程池中添加拷貝任務
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章