Python 多進程和數據傳遞的理解

2019-12-21     IT生涯

python不僅線程用的是系統原生線程,進程也是用的原生進程

進程的用法和線程大同小異

1

2

import multiprocessing

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

線程的基本方法在進程中都能夠使用

但是進程和線程中有一個明顯的區別:可以實現多核的運用

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

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

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

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

多進程就這樣完成了一般語言中多線程的優化

數據傳遞

多線程,多進程中總有要協同的工作,都涉及數據的交互,不過交互方式有些不同

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

線程中,由於都屬於同一個進程,定義一個全局的隊列在各線程中就能夠壓入數據

進程可能運行在不同的CPU上,因此,相互間的傳遞不能在全局定義,只能通過創建時進行傳入

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

隊列的傳入實際上是隊列拷貝的傳入,通過pickle拷貝後進行傳入,然後再pickle將數據傳回

import multiprocessing

multiprocessing.Queue()

線程和進程都有不同的隊列對象,以實現不同的數據交互,不能錯位使用

文章來源: https://twgreatdaily.com/zh-mo/z8wrKW8BMH2_cNUgiBYy.html