進(jìn)程 運(yùn)行的程序
四種創(chuàng)建 方法
第一種
os模塊 fork() 創(chuàng)建 fork在子進(jìn)程和父進(jìn)程中返回的值不同 子進(jìn)程返回0 父進(jìn)程返回創(chuàng)建的子進(jìn)程PID getpid 獲取當(dāng)前進(jìn)程PID getppid獲取父級(jí)進(jìn)程PID
第二種 multiprocessing 中Process 類
實(shí)例類
Process(group,target,name,args,kwargs)
group 進(jìn)程組
target 調(diào)用對(duì)象
name 名字
args 參數(shù) 元祖形式
kwargs 參數(shù) 字典格式
常用方法
is_alive 判斷是否運(yùn)行
start 運(yùn)行
join 主進(jìn)程阻塞 等待子進(jìn)程結(jié)束
run
terminate 立即終止
第三種 寫一個(gè)Process 的派生類重寫run方法
第四種 Pool 進(jìn)程池
Pool() 創(chuàng)建進(jìn)程池
apply_async(func,args,kwargs)
apply(func,args,kwargs)
都是分配任務(wù)一個(gè)異步一個(gè)同步
close 關(guān)閉進(jìn)程池接受任務(wù)
join 主進(jìn)程阻塞 等待子進(jìn)程
terminate
進(jìn)程間通信 通過(guò) Queue 進(jìn)程池需要用Manager().Queue()
方法
qsize 查看當(dāng)前隊(duì)列個(gè)數(shù)
full 判斷隊(duì)列是否滿了
empty 判斷隊(duì)列是否為空
get(block,timeout) 獲取信息 默認(rèn)block True 同步
put(item,block ,timeout )添加信息
get_nowait()
put_nowait()
線程
多線程 threading Thread 類
實(shí)例 或者創(chuàng)建 派生類
用法和Process 差不多
可以共享全局變量 但是會(huì)產(chǎn)生 并發(fā)競(jìng)爭(zhēng) 通過(guò)鎖機(jī)制
Lock () 創(chuàng)建鎖
acquire 獲取鎖
release 釋放鎖
互斥鎖
特殊情況 死鎖 解決方案 銀行家算法 或者使用超時(shí)機(jī)制
消費(fèi)者和生產(chǎn)者模式 通過(guò) Queue 中Queue py2 py3 queue 中Queue 來(lái)解除線程之間的關(guān)聯(lián) 解耦作用
全局變量多線程不受影響 通過(guò) threading.local()