日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pipe实现单工和半双工模式

發布時間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pipe实现单工和半双工模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

單工模式代碼:

import sys reload(sys) sys.setdefaultencoding('utf-8') import multiprocessing import timedef 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互換,就會報錯,所以說是單工,因為只能一端發(只讀),一端收(只寫)。

半雙工代碼:

代碼轉載和改編自:http://www.yeayee.com/article-6604068-1.html

#-*- encoding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8') import multiprocessing import timedef 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。

但是,其實從全雙工的概念來看,以上的代碼只是半雙工而已,實際應用場景中,這種方式也夠用了。




總結

以上是生活随笔為你收集整理的pipe实现单工和半双工模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。