Python 多進程和數(shù)據(jù)傳遞的理解
Python 多進程和數(shù)據(jù)傳遞的理解
python不僅線程用的是系統(tǒng)原生線程,進程也是用的原生進程
進程的用法和線程大同小異
import multiprocessing p = multiprocessing.Process(target=fun,args=())
線程的基本方法在進程中都能夠使用
但是進程和線程中有一個明顯的區(qū)別:可以實現(xiàn)多核的運用
python本身會啟動一個主進程,并且擁有一個主線程把主進程看做一家之主,那主線程也是他本身,其他線程就相當于老婆們
而進程,長大了的兒子們,線程固然是不能分割的,一家人還是要團結(jié),但是兒子自家的事務,老子卻也不能插手,所以,一家只能占用一個CPU實現(xiàn)單核運用的話,生多個兒子那必然就實現(xiàn)了多核運用
GIL鎖住的,只是一個進程,讓一家人團結(jié)
但是一個進程只有這么一把全量鎖,線程不能單獨跑,那就打包一起跑
多進程就這樣完成了一般語言中多線程的優(yōu)化
數(shù)據(jù)傳遞
多線程,多進程中總有要協(xié)同的工作,都涉及數(shù)據(jù)的交互,不過交互方式有些不同
信息進行傳遞的時候,為了不阻塞執(zhí)行一般會將數(shù)據(jù)放入對列當中而不是直接返回
線程中,由于都屬于同一個進程,定義一個全局的隊列在各線程中就能夠壓入數(shù)據(jù)
進程可能運行在不同的CPU上,因此,相互間的傳遞不能在全局定義,只能通過創(chuàng)建時進行傳入
內(nèi)部操作:傳入的隊列實際上并不是將引用傳入,然后直接操作隊列,這畢竟是不同的CPU上的工作
隊列的傳入實際上是隊列拷貝的傳入,通過pickle拷貝后進行傳入,然后再pickle將數(shù)據(jù)傳回
import multiprocessing multiprocessing.Queue()
線程和進程都有不同的隊列對象,以實現(xiàn)不同的數(shù)據(jù)交互,不能錯位使用
如有疑問請留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- python多進程共享變量
- 探究Python多進程編程下線程之間變量的共享問題
- Python實現(xiàn) 多進程導入CSV數(shù)據(jù)到 MySQL
- Python利用多進程將大量數(shù)據(jù)放入有限內(nèi)存的教程
- Python多進程并發(fā)(multiprocessing)用法實例詳解
- 淺析Python中的多進程與多線程的使用
- Python多進程同步Lock、Semaphore、Event實例
- python 多進程通信模塊的簡單實現(xiàn)
- Python控制多進程與多線程并發(fā)數(shù)總結(jié)
- python多進程操作實例
- Python實現(xiàn)多進程共享數(shù)據(jù)的方法分析
相關文章
python判斷一個數(shù)是否能被另一個整數(shù)整除的實例
今天小編就為大家分享一篇python判斷一個數(shù)是否能被另一個整數(shù)整除的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12python腳本調(diào)用iftop 統(tǒng)計業(yè)務應用流量的思路詳解
這篇文章主要介紹了python腳本調(diào)用iftop 統(tǒng)計業(yè)務應用流量的思路詳解,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-10-10Python必備技巧之Pandas數(shù)據(jù)合并函數(shù)
Pandas中一共有五個數(shù)據(jù)合并函數(shù),分別為:concat、append、merge、join、combine,本文詳細講解這五個函數(shù)的使用方法,需要的可以參考一下2022-03-03Django 接收Post請求數(shù)據(jù),并保存到數(shù)據(jù)庫的實現(xiàn)方法
今天小編就為大家分享一篇Django 接收Post請求數(shù)據(jù),并保存到數(shù)據(jù)庫的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07