1.管道
from multiprocessing import結果:pipe
conn1,conn2 = pipe() #
返回兩個值
conn1.send('
wdc') #
傳送print(conn2.recv()) #
接收conn2.send('
yhf'
)print(conn1.recv())
~雙向通訊
2.在程序中傳遞資料
from multiprocessing import結果:pipe,process
class
pr1(process):
def__init__
(self,conn1):
super().
__init__
() self.conn1 =conn1
defrun(self):
self.conn1.send(
'吃了嗎?')
if__name__ == '
__main__':
conn1,conn2 =pipe()
p =pr1(conn1)
p.start()
print(conn2.recv())
解決當管道內資料為空時,還在繼續獲取資料時造成的阻塞問題。
from multiprocessing import結果:pipe,process
class
pr1(process):
def__init__
(self,conn1,conn2):
super().
__init__
() self.conn1 =conn1
self.conn2 =conn2
defrun(self):
self.conn2.close()
#關閉conn2
while
true:
try:
(self.conn1.recv())
except eoferror: #
當其他所有的conn埠都被關閉,只剩下乙個conn埠還在獲取管道內的資料,而管道內已經空了的時候就會報eoferror錯誤。
self.conn1.close() #
關閉conn1
break
if__name__ == '
__main__':
conn1,conn2 =pipe()
p =pr1(conn1,conn2)
p.start()
conn1.close()
#關閉conn1
for i in range(10):
conn2.send(
'吃了嗎?')
conn2.close()
#關閉conn2
輸出10次資料,然後結束全部程序。
管道實現生產者消費者問題:
from multiprocessing import結果:pipe,process
import
time
import
random
class producer(process): #
生產者類
def__init__
(self,pro,con,name,food):
super().
__init__
() self.pro =pro
self.con =con
self.name =name
self.food =food
defrun(self):
self.con.close()
for i in range(4):
time.sleep(random.randint(1,3))
f = '
{}生產了第{}個{}
'.format(self.name,i,self.food)
(f) self.pro.send(f)
self.pro.close()
class
consumer(process):
def__init__
(self,pro,con,name):
super().
__init__
() self.pro =pro
self.con =con
self.name =name
defrun(self):
self.pro.close()
while
true:
try:
f =self.con.recv()
print('
{}吃了{}
'.format(self.name,f))
time.sleep(random.randint(1,3))
except
eoferror:
self.con.close()
break
if__name__ == '
__main__':
con,pro =pipe()
p1 = producer(pro,con,'
wdc','包子'
) p1.start()
c1 = consumer(pro,con,'
yhf'
) c1.start()
con.close()
pro.close()
如果同時有兩個消費者同時拿到管道中相同的資料,則會報錯,管道中的資料是不安全的。
可以以用加鎖來避免程序直接爭搶資料造成的資料不安全現象。但是佇列是安全的,佇列就是基於管道+鎖
Python併發程式設計 管道
from multiprocessing import pipe,process def func conn1,conn2 conn2.close 子程序只需使用connection1,故關閉connection2 while true try msg conn1.recv print msg ex...
Python 併發程式設計
1.程序 執行緒 協程基本概念,建立 使用 2.協程的應用 生成器 第三方模組 3.併發的實踐 程式執行起來之後建立的乙個程序。建立程序已經學過使用multiprocessing.process類建立 1 multiprocessing.process 指定target引數,建立物件 2 繼承mul...
python併發程式設計 程序,併發
1.程序是乙個正在執行的程式,或者說是程式執行的過程,程序是個抽象概念 程序起源於作業系統,是作業系統最核心的概念,作業系統所有其他的概念都是圍繞程序展開 研究程序最底層就是在研究作業系統底層 2.序列 程序 乙個任務完完整整的執行完畢後,在執行下乙個任務 3.併發 程序 看起來多個任務是同時執行即...