Python 多程式和資料傳遞的理解

pythontab發表於2018-01-02

python不僅執行緒用的是系統原生執行緒,程式也是用的原生程式

程式的用法和執行緒大同小異

import multiprocessing 
p = multiprocessing.Process(target=fun,args=())

執行緒的基本方法在程式中都能夠使用

但是程式和執行緒中有一個明顯的區別:可以實現多核的運用

python本身會啟動一個主程式,並且擁有一個主執行緒把主程式看做一家之主,那主執行緒也是他本身,其他執行緒就相當於老婆們

而程式,長大了的兒子們,執行緒固然是不能分割的,一家人還是要團結,但是兒子自家的事務,老子卻也不能插手,所以,一家只能佔用一個CPU實現單核運用的話,生多個兒子那必然就實現了多核運用

GIL鎖住的,只是一個程式,讓一家人團結

但是一個程式只有這麼一把全量鎖,執行緒不能單獨跑,那就打包一起跑

多程式就這樣完成了一般語言中多執行緒的最佳化

資料傳遞

多執行緒,多程式中總有要協同的工作,都涉及資料的互動,不過互動方式有些不同

資訊進行傳遞的時候,為了不阻塞執行一般會將資料放入對列當中而不是直接返回

執行緒中,由於都屬於同一個程式,定義一個全域性的佇列在各執行緒中就能夠壓入資料

程式可能執行在不同的CPU上,因此,相互間的傳遞不能在全域性定義,只能透過建立時進行傳入

內部操作:傳入的佇列實際上並不是將引用傳入,然後直接操作佇列,這畢竟是不同的CPU上的工作

佇列的傳入實際上是佇列複製的傳入,透過pickle複製後進行傳入,然後再pickle將資料傳回

import multiprocessing 
multiprocessing.Queue()

執行緒和程式都有不同的佇列物件,以實現不同的資料互動,不能錯位使用


相關文章