進程間通信(python)

Process之間肯定是需要通信的,操作系統提供了很多機制來實現進程間的通信。Python的multiprocessing模塊包裝了底層的機制,提供了QueuePipes等多種方式來交換數據。

一、我們以Queue為例,在父進程中創建兩個子進程,一個往Queue里寫數據,一個從Queue里讀數據:

from multiprocessing import Process,Queue
import os,time,random
# 寫數據進程執行的代碼:
def write(q):print("Process to write: %s"% os.getgid())for value in ['A','B','C']:print('Put %s to queue...' % value)q.put(value)time.sleep(random.random())#讀數據進程執行的代碼
def read(q):print("Process to read: %s "% os.getgid())while True:value = q.get(True)print('Get %s from queue.' % value)if __name__ == '__main__':# 父進程創建Queue,并傳給各個子進程q = Queue()pw = Process(target=write, args=(q,))pr = Process(target=read, args=(q,))#啟動子進程pw,寫入:pw.start()#啟動子進程pr,讀取:pr.start()#等待pw結束pw.join()#pr進程這里是死循環,無法等待其結束,只能強行終止pr.terminate()

輸出:

Process to write: 15582
Put A to queue...
Process to read: 15583?
Get A from queue.
Put B to queue...
Get B from queue.
Put C to queue...
Get C from queue.

在Unix/Linux下,multiprocessing模塊封裝了fork()調用,使我們不需要關注fork()的細節。由于Windows沒有fork調用,因此,multiprocessing需要“模擬”出fork的效果,父進程所有Python對象都必須通過pickle序列化再傳到子進程去,所有,如果multiprocessing在Windows下調用失敗了,要先考慮是不是pickle失敗了。

二、管道Pipes

現有2個進程A和B,他們都在內存中開辟了空間,那么我們在內存中再開辟一個空間C,作用是連接這兩個進程的。對于進程來說內存空間是可以共享的(任何一個進程都可以使用內存,內存當中的空間是用地址來標記的,我們通過查找某一個地址就能找到這個內存)A進程可以不斷的向C空間輸送東西,B進程可以不斷的從C空間讀取東西,這就是進程間的通信???

??????這個通信方式的原理類似于用文件通信,一個進程往文件里寫,另外一個進程從文件里讀取,最大的不同在于管道里C的空間是開辟在內存當中,第一是他不容易被截獲,第二是進程結束后內存空間他會自動的釋放掉,文件就不能自動釋放掉。第三就是內存的傳輸是不需要和磁盤交互,所以相比文件管道的傳輸效率要高很多,這就是管道的基本原理。

??????管道在信息傳輸上是以流的方式傳輸, 也就是你從A進程不斷的寫入,B進程源源不斷的讀出,A進程先寫入的就會被B進程先讀出,后寫進來的就會被后讀出,管道不僅僅可以讓A進程寫C內存空間收,也可以B進程寫,C內存空間收,也就是雙向通信,單項通信叫做半雙工,雙向叫做全雙工。

2.管道本質
?????在內存中開辟一個新的空間,對多個進程可見,在通信形式上形成一種約束

3.創建管道
?????multiprocessing------------->Pipe

?????1.首先理解Pipe是什么,有人理解為類,那到底是什么?

????????>>> from multiprocessing import Pipe
????????>>> type(Pipe)

????????????????<class 'method'>

???????可以看到是個方法,也就是函數,是通過函數的返回值來完成工作的,不是類
?

----------------------

待完善

?

參考:

(1)、https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431927781401bb47ccf187b24c3b955157bb12c5882d000

(2)、https://blog.csdn.net/weixin_39859512/article/details/80898340

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273890.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273890.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273890.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

80x86 CPU 的工作模式

8086/8088微處理器只有一種工作模式&#xff1a;實地址模式。 32為的80x86微處理器有3種工作模式&#xff1a;實地址模式、保護模式和虛擬8086模式。 實地址模式 對于8086/8088微處理器&#xff0c;實模式是它的唯一工作方式&#xff0c;對于80386以上的處理器來說&#xff0c;…

Python定時任務調度——APScheduler

參考&#xff1a; &#xff08;1&#xff09;https://www.cnblogs.com/luxiaojun/p/6567132.html &#xff08;2&#xff09;https://blog.csdn.net/u010376788/article/details/75726182

Ajax 模糊查詢的簡單實現

類似于百度的搜索引擎模糊查詢功能&#xff0c;不過百度的模糊查詢功能更強大&#xff0c;這里簡單實現下. 要實現模糊查詢&#xff0c;首先要做的就是把SQL寫好。話不多少&#xff0c;直接貼代碼了! JSP頁面&#xff1a; <% page language"java" import"jav…

OpenStack組件

OpenStack的架構及組件&#xff08;Havana&#xff09; 服務項目名描述控制臺Horizon用戶通過該服務與OpenStack的各服務進行交互&#xff0c;如啟動虛機實例、分配IP地址、設置訪問控制等&#xff1b;計算Nova按需分派并管理虛機&#xff1b;網絡Neutron通常是計算服務通過該服…

python 計算數字 k 在 0 到 n 中的出現的次數,k 可能是 0~9 的一個值

3. 統計數字 中文English 計算數字 k 在 0 到 n 中的出現的次數&#xff0c;k 可能是 0~9 的一個值。 Example 樣例 1&#xff1a; 輸入&#xff1a; k 1, n 1 輸出&#xff1a; 1 解釋&#xff1a; 在 [0, 1] 中&#xff0c;我們發現 1 出現了 1 次 (1)。樣例 2&#x…

[轉]Design Pattern Interview Questions - Part 2

Interpeter , Iterator , Mediator , Memento and Observer design patterns.(I) what is Interpreter pattern?(B) Can you explain iterator pattern?(A) Can you explain mediator pattern?(I) Can you explain memento pattern?(B) Can you explain observer pattern?…

python爬蟲面試題

1 :列表生成式和生成器的區別 &#xff1f; 列表生成式直接生成一個列表&#xff0c;所有元素對象被立即創建在內存中&#xff0c;當元素過多時&#xff0c;勢必會占用過多內存&#xff0c; 不可取&#xff0c;要用到生成器&#xff0c;它即時創建一個生成器對象&#xff0c;…

%hd %d %ld %u ......

%d 有符號10進制整數 %ld 長整型 %hd短整型%md,m指定的是輸出字段的寬度&#xff0c;默認左補空格, 如果數據的位數小于m&#xff0c;則左端補以空格&#xff0c;若大于m&#xff0c;則  按實際位數輸出&#xff0c;如&#xff1a;  printf("%4d,%4d",a,b)  若…

我的撲克牌

main.m文件&#xff1a; #import <Foundation/Foundation.h> #import "hearts.h" #import "spade.h" #import "wintersweet.h" #import "diamonds.h" #import "stdio.h" #import "string.h" int main(int a…

在使用selenium,Chrome無界面瀏覽模式與自定義插件加載問題

Chrome啟用無界面瀏覽模式時&#xff0c;自定義插件是沒法加載的&#xff0c;會報以下錯誤&#xff1a; selenium.common.exceptions.WebDriverException: Message: unknown error: failed to wait for extension background page to load: chrome-extension://cdkhikphdegmcl…

一遍學習,一遍進步

做挨踢這塊也快兩年了&#xff0c;還是個小白。懂得技術有限&#xff0c;會的東西不多。知道的東西越多越覺得該知道更多東西。新的知識技術更新越來越快。有點應接不暇。 2013很糊涂的過來了。沒有看幾本書&#xff0c;沒有自我提高&#xff0c;有點渾渾噩噩的感覺。單位的工作…

ubuntu18 安裝redis-manager

參考&#xff1a;https://blog.csdn.net/momomomomm/article/details/83626147

Ios17個常用代碼整理

1.判斷郵箱格式是否正確的代碼 //利用正則表達式驗證 -(BOOL)isValidateEmail:(NSString *)email { NSString *emailRegex "[A-Z0-9a-z._%-][A-Za-z0-9.-]\\.[A-Za-z]{2,4}"; NSPredicate *emailTest [NSPredicate predicateWithFormat:"SELF MATCHES%",…

ubuntu18 激活 pycharm

1、到官網上下載好對應的版本 2、到安裝好的pycharm的bin文件夾下&#xff0c;找到 pycharm.vmoptions 和 pycharm64.vmoptions&#xff0c;在兩個文件后面添加代碼&#xff1a; -javaagent:-javaagent:/home/maxzhang/user/pycharm/bin/JetbrainsCrack-release-enc.jar&#…

jquery背景自動切換特效

查看效果網址&#xff1a;http://keleyi.com/a/bjad/4kwkql05.htm 本特效的jquery版本只支持1.9.0以下。代碼如下&#xff1a; 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">2…

pandas和spark的區別

參考&#xff1a;https://blog.csdn.net/u013613428/article/details/78138857

Android ImageView圖片自適應

網絡上下載下來的圖片自適應&#xff1a;android:adjustViewBounds"true"&#xff08;其詳細解釋在下面&#xff09;<ImageViewandroid:id"id/dynamic_item_image"android:layout_width"wrap_content"android:layout_height"wrap_conten…

Python之IO編程——文件讀寫、StringIO/BytesIO、操作文件和目錄、序列化

BytesIO StringIO操作的只能是str&#xff0c;如果要操作二進制數據&#xff0c;就需要使用BytesIO。BytesIO實現了在內存中讀寫bytes&#xff0c;我們創建一個BytesIO&#xff0c;然后寫入一些bytes&#xff1a; 寫入的不是str&#xff0c;而是經過UTF-8編碼的bytes。 (1).參考…

都江堰很美-佩服古人_Crmhf的一天

地震遺跡&#xff1a;一條背街&#xff0c;損壞嚴重&#xff0c;基本沒什么人。真正的水利工程&#xff0c;值得每個人學習&#xff1a;轉載于:https://www.cnblogs.com/crmhf/p/3823157.html

爬蟲的增量式抓取和數據更新

不管是產生新頁面&#xff0c;還是原本的頁面更新&#xff0c;這種變化都被稱為增量&#xff0c; 而爬取過程則被稱為增量爬取。那如何進行增量式的爬取工作呢&#xff1f;回想一下爬蟲的工作流程&#xff1a; 發送URL請求 ----- 獲得響應 ----- 解析內容 ----- 存儲內容 我們…