pipe實現單工和半雙工模式

2021-08-14 14:38:21 字數 2353 閱讀 9265

其實網上用pipe的python**所謂的全雙工,其實都是半雙工。

單工模式**:

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

import multiprocessing

import time

def proc1(pipe):

# while true:

for i in range(3):

print ("send: %s" %(i))

pipe.send(i)

time.sleep(1)

def proc2(pipe):

while true:

print ("proc2 rev:", pipe.recv())

time.sleep(1)

def proc3(pipe):

while true:

print ("proc3 rev:", pipe.recv())

time.sleep(1)

if __name__ == "__main__":

duplex=false#單工模式

conn1,conn2 = multiprocessing.pipe(duplex)

p1 = multiprocessing.process(target=proc1, args=(conn2,))

p2 = multiprocessing.process(target=proc2, args=(conn1,))

#p3 = multiprocessing.process(target=proc3, args=(pipe[1],))

p1.start()

p2.start()

#p3.start()

p1.join()

p2.join()

#p3.join()

以上的**中,如果開程序的那兩句,conn1和conn2互換,就會報錯,所以說是單工,因為只能一端發(唯讀),一端收(只寫)。

半雙工**:

#-*- encoding:utf-8 -*-

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

import multiprocessing

import time

def proc1(pipe):

# while true:

for i in range(3):

print ("send: %s" %(i))

pipe.send(i)

time.sleep(1)

def proc2(pipe):

while true:

print ("proc2 rev:", pipe.recv())

time.sleep(1)

def proc3(pipe):

while true:

print ("proc3 rev:", pipe.recv())

time.sleep(1)

if __name__ == "__main__":

duplex=true#半雙工

conn1,conn2 = multiprocessing.pipe(duplex)

p1 = multiprocessing.process(target=proc1, args=(conn1,))

p2 = multiprocessing.process(target=proc2, args=(conn2,))

#p3 = multiprocessing.process(target=proc3, args=(pipe[1],))

p1.start()

p2.start()

#p3.start()

p1.join()

p2.join()

#p3.join()

以上conn1與conn2可以互換,不會報錯,說明兩端可以是收-發,也可以是發-收,所以是半雙工。

pipe方法返回(conn1, conn2)代表乙個管道的兩個端。pipe方法有duplex引數,如果duplex引數為true(預設值),那麼這個管道是全雙工模式,也就是說 conn1和conn2均可收發。duplex為false,conn1只負責接受訊息,conn2只負責傳送訊息。

其實,所謂的全雙工模式並不是真正的全雙工模式

send和recv方法分別是傳送和接受訊息的方法。例如,在全雙工模式下,可以呼叫conn1.send傳送訊息,conn1.recv接收訊息。如果沒有訊息可接收,recv方法會一直阻塞。如果管道已經被關閉,那麼recv方法會丟擲eoferror。

半雙工 全雙工和單工

半雙工 概念 半雙工 half duplex 資料傳輸指資料可以在乙個訊號載體的兩個方向上傳輸,但是不能同時傳輸。在通訊過程的任意時刻,資訊既可由a傳到b,又能由b傳a,但只能有乙個方向上的傳輸存在。採用半雙工方式時,通訊系統每一端的傳送器和接收器,通過收 發開關轉接到通訊線上,進行方向的切換,因此...

單工,半雙工,全雙工

1 單工 單工就是指a只能發訊號,而b只能接收訊號,通訊是單向的,就象燈塔之於航船 燈塔發出光訊號而航船只能接收訊號以確保自己行駛在正確的航線上。2 半雙工 half duplex 半雙工就是指a能發訊號給b,b也能發訊號給a,但這兩個過程不能同時進行。最典型的例子就象我們在影視作品中看到的對講機一...

Swoole的全雙工 半雙工和單工

單工 只有乙個方向 不能同時 半雙工 有兩個方向 不能同時 全雙工 兩個方向 可以同時 1 單工 單工就是指a只能發訊號,而b只能接收訊號,通訊是單向的,就象燈塔之於航船 燈塔發出光訊號而航船只能 接收訊號以確保自己行駛在正確的航線上。2 半雙工 半雙工就是指a能發訊號給b,b也能發訊號給a,但這兩...