進(jìn)程和程序
進(jìn)程:正在執(zhí)行的程序
程序:沒(méi)有執(zhí)行的代碼窥浪,是一個(gè)靜態(tài)的
進(jìn)程的狀態(tài)
使用進(jìn)程實(shí)現(xiàn)多任務(wù)
multiprocessing模塊就是跨平臺(tái)的多進(jìn)程模塊侍郭,提供了一個(gè)Process類來(lái)代表一個(gè)進(jìn)程對(duì)象,這個(gè)對(duì)象可以理解為是一個(gè)獨(dú)立的進(jìn)程,可以執(zhí)行另外的事情形耗。
線程和進(jìn)程之間的對(duì)比
進(jìn)程:能夠完成多任務(wù)纬纪,一臺(tái)電腦上可以同時(shí)運(yùn)行多個(gè)QQ
線程:能夠完成多任務(wù)甸昏,一個(gè)QQ中的多個(gè)聊天窗口
根本區(qū)別:進(jìn)程是操作系統(tǒng)資源分配的基本單位蛤迎,而線程是任務(wù)調(diào)度和執(zhí)行的基本單位
進(jìn)程間通信-Queue
Queue-隊(duì)列 先進(jìn)先出
隊(duì)列間簡(jiǎn)單通信
模擬下載數(shù)據(jù),與數(shù)據(jù)處理
多進(jìn)程共享全局變量
共享全局變量不適用于多進(jìn)程編程
進(jìn)程池
當(dāng)需要?jiǎng)?chuàng)建的子進(jìn)程數(shù)量不多時(shí),可以直接利用multiprocessing中的Process動(dòng)態(tài)生成多個(gè)進(jìn)程觅彰,但是如果是上百甚至上千個(gè)目標(biāo)吩蔑,手動(dòng)的去創(chuàng)建的進(jìn)程的工作量巨大,此時(shí)就可以用到multiprocessing模塊提供的Pool方法
from multiprocessing import Pool
import os,time,random
def worker(msg):
? ? t_start = time.time()
? ? print('%s開(kāi)始執(zhí)行,進(jìn)程號(hào)為%d'%(msg,os.getpid()))
? ? time.sleep(random.random()*2)
? ? t_stop = time.time()
? ? print(msg,"執(zhí)行完成,耗時(shí)%0.2f"%(t_stop-t_start))
def demo():
? ? pass
if __name__ == '__main__':
? ? po = Pool(3)? ? ? ? # 定義一個(gè)進(jìn)程池
? ? for i in range(0,10):
? ? ? ? po.apply_async(worker,(i,))? ?
? ? print("--start--")
? ? po.close()? ? ?
? ? po.join()? ? ?
? ? print("--end--")
進(jìn)程池間的進(jìn)程通信
多任務(wù)文件夾復(fù)制
1 獲取用戶要copy的文件夾的名次
2 創(chuàng)建一個(gè)新的文件夾
3 獲取文件夾的所有的待copy的文件名字
4 創(chuàng)建進(jìn)程池
5 向進(jìn)程池中添加拷貝任務(wù)