<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
一個人的力量是有限的,但是團隊合作可以發揮更大的作用。而團隊共同作業需要交流和通訊來有效的分配任務和協調工作,來保證保時保量的完成工作。
為什麼執行緒間需要通訊呢?這就好比一個團隊需要完成一個工作,但是這個工作週期性比較長,複雜度也比較高,此時就需要團隊共同作業了,領導就把工作分為了n
份,a
、b
、c
員工每次領取1份工作,做完了再向老闆同步,並且領取新的工作,這樣的話,工作很快就做完了嘛。
將執行緒代入上面的例子,在某些任務中,可能需要多個執行緒來完成同樣的任務,所以執行緒間通訊是為了執行緒之間的共同作業和同步,更快的完成任務。
在python
多執行緒程式設計中,執行緒間通訊方法主要有以下幾種:
這是最常用,也是用的最多的方式,這個很好理解,在同一程序中,多個執行緒有一部分記憶體是共用程序的,所以多個執行緒可以使用“共用變數”的方式共用同一份資料,通過對該變數的讀寫操作來實現執行緒間通訊。
在python
中,為我們提供了佇列的標準庫Queue
,它是標準庫中的一個安全佇列的實現。作用是可以在多個執行緒間共用資料,主要用法為通過get
方法將資料放入佇列,get
方法將資料從佇列中取出來,
python
管道是通過multiprocessing
庫中的Pipe
實現的,可以在2個執行緒之間任意傳遞資料,而且是雙向通訊的,主要用法為通過send
方法傳送資料,通過recv
方法接收資料。
除此之外,還有其他方法,例如 藉助第三方工具,比如redis
等。
共用變數,我們之前就已經用過了,比如上一節,我們自己實現了python
的讀寫鎖,就用到了共用變數的方式。這裡就不再過多闡述了。這裡將介紹一下管道的案例:
佇列多用於生產者消費者,在python
中,是使用queue
模組下的Queue
方法,建立一個新的佇列語句為:
queues = queue.Queue()
其中,Queue
可以傳入一個maxsize
,它將作為佇列的最大值,預設的話,是無限制。
想要往佇列中寫入資料的話,使用put
方法即可,例如,向佇列寫入字串"123",我們僅需要呼叫put
方法即可,例如:
queues.put("123")
而想要從佇列中獲取資料的話,需要使用get
方法,例如:
data = queues.get() print(data)
除此之外,還有佇列其他常用的方法,如: qsize()
會返回佇列中元素的數量,empty()
會判斷佇列是否為空,full()
會判斷佇列是否已經滿了。
這裡舉一個檔案分發下載的例子,我們需要定義一個生產者,用於釋出任務,定義多個消費者,用於執行任務,程式碼如下:
在上述程式碼中,我們定義了生產者和消費者2個類,其初始方法__init__
會傳入佇列資訊,生產者有定義了2個方法,一個是put
,是將元素放入佇列中,還有一個是qsize
,是返回當前佇列的個數。而消費者只定義了一個方法get
,上面寫了一個死迴圈,向佇列獲取資料,每獲取到一個資料,休息15秒。
在主函數中,我們定義了一個公共的佇列queues
,而後定義了生產者p
和消費者q
,二者都傳入了同一個佇列queues
。最後我們寫了3個執行緒,用於執行消費者q
的get
方法。 和 呼叫一個生產者方法put
。
執行結果為:
上述結果展現的是,生產者生成資料,而消費者接收。file_0
到file_9
都只被消費了一次,可見佇列是自己保證了執行緒競爭問題的。
本篇文章介紹了為什麼需要執行緒間通訊,以及通訊方式有哪些,最後每種通訊方式都舉了一個例子,總的來說,最常用的還是共用變數的方式來進行執行緒間通訊,但是此方法需要自己來保證執行緒競爭問題,除此之外,還有佇列和管道,此二者不用擔心執行緒競爭,但是前則更適用於生產者-消費者模型,後者更適用於兩執行緒間相互通訊。
到此這篇關於python淺談一下執行緒間通訊之佇列的文章就介紹到這了,更多相關python通訊佇列內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45