管道:雙向通訊 2個程序之間相互通訊
1例項利用管道解決消費者模式from multiprocessing import
pipe,process23
deffunc(conn1,conn2):
4conn2.close()
5while
true:
6try
:7 msg =conn1.recv()
8print
(msg)
9except eoferror: #
丟擲無資料時異常
10conn1.close()
11break
1213
if__name__ == '
__main__':
14 conn1, conn2 =pipe()
15 process(target=func,args =(conn1,conn2)).start()
16conn1.close()
17for i in range(20):
18 conn2.send('
吃了麼'
)19 conn2.close()
1例子from multiprocessing import
lock,pipe,process
2def
producer(con,pro,name,food):
3con.close()
4for i in range(100):
5 f = '
%s生產%s%s
'%(name,food,i)
6print
(f)7
pro.send(f)
8pro.send(none)
9pro.send(none)
10pro.send(none)
11pro.close()
1213
defconsumer(con,pro,name,lock):
14pro.close()
15while
true:
16lock.acquire()
17 food =con.recv()
18lock.release()
19if food is
none:
20con.close()
21break
22print('
%s吃了%s
' %(name, food))
23if
__name__ == '
__main__':
24 con,pro =pipe()
25 lock=lock()
26 p = process(target=producer,args=(con,pro,'
egon
','泔水'))
27 c1 = process(target=consumer, args=(con, pro, '
alex
',lock))
28 c2 = process(target=consumer, args=(con, pro, '
bossjin
',lock))
29 c3 = process(target=consumer, args=(con, pro, '
wusir
',lock))
30c1.start()
31c2.start()
32c3.start()
33p.start()
34con.close()
35pro.close()
3637
from multiprocessing import
process,pipe,lock
3839
defconsumer(produce, consume,name,lock):
40produce.close()
41while
true:
42lock.acquire()
43 baozi=consume.recv()
44lock.release()
45if
baozi:
46print('
%s 收到包子:%s
' %(name,baozi))
47else:48
consume.close()
49break50#
51def
producer(produce, consume,n):
52consume.close()
53for i in
range(n):
54produce.send(i)
55produce.send(none)
56produce.send(none)
57produce.close()58#
59if
__name__ == '
__main__':
60 produce,consume=pipe()
61 lock =lock()
62 c1=process(target=consumer,args=(produce,consume,'c1'
,lock))
63 c2=process(target=consumer,args=(produce,consume,'c2'
,lock))
64 p1=process(target=producer,args=(produce,consume,30))
65c1.start()
66c2.start()
67p1.start()
68produce.close()
69consume.close()
7071
#pipe 資料不安全性72#
ipc73
#加鎖來控制操作管道的行為 來避免程序之間爭搶資料造成的資料不安全現象
7475
#佇列 程序之間資料安全的76#
管道 + 鎖
Linux 管道通訊
一 定義 管道是單向的 先進先出的。它將乙個程式的輸入和另乙個程式的輸出連線起來。資料被乙個程序讀出後,將被從管道中刪除。分為無名和有名管道兩種。前者用於父程序和子程序間的通訊,後者用於同一系統的兩個程序間通訊。二 無名管道 int pipe int fd 2 其中,fd 0 用於讀管道,fd 1 ...
Linux管道通訊
現在在linux 中使用較多的程序間通訊方式主要有以下幾種。1 管道 pipe 及有名管道 named pipe 管道可用於具有親緣關係程序間的通訊,有名管道,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。2 訊號 signal 訊號是在軟體層次上對中斷機制的一種模擬,它是比較複雜的通訊...
pipe管道通訊
pipe函式是用來建立管道的,當它建立成功會返回兩個檔案描述符,0是讀,1是寫 在用管道時,當我們使用讀端就要關閉寫,使用寫端就要關閉讀的功能。include include include include int main double shou 2 int i 0 int ret double ...