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