91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python線程間通信之隊列怎么創建

發布時間:2023-04-26 14:46:37 來源:億速云 閱讀:139 作者:iii 欄目:開發技術

本篇內容介紹了“python線程間通信之隊列怎么創建”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

為什么需要線程間通信

一個人的力量是有限的,但是團隊合作可以發揮更大的作用。而團隊協作需要交流和通信來有效的分配任務和協調工作,來保證保時保量的完成工作。

為什么線程間需要通信呢?這就好比一個團隊需要完成一個工作,但是這個工作周期性比較長,復雜度也比較高,此時就需要團隊協作了,領導就把工作分為了n份,abc員工每次領取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()會判斷隊列是否已經滿了。

這里舉一個文件分發下載的例子,我們需要定義一個生產者,用于發布任務,定義多個消費者,用于執行任務,代碼如下:

python線程間通信之隊列怎么創建

在上述代碼中,我們定義了生產者和消費者2個類,其初始方法__init__會傳入隊列信息,生產者有定義了2個方法,一個是put,是將元素放入隊列中,還有一個是qsize,是返回當前隊列的個數。而消費者只定義了一個方法get,上面寫了一個死循環,向隊列獲取數據,每獲取到一個數據,休息15秒。

在主函數中,我們定義了一個公共的隊列queues,而后定義了生產者p和消費者q,二者都傳入了同一個隊列queues。最后我們寫了3個線程,用于執行消費者qget方法。 和 調用一個生產者方法put

執行結果為:

python線程間通信之隊列怎么創建

上述結果展現的是,生產者生成數據,而消費者接收。file_0file_9都只被消費了一次,可見隊列是自己保證了線程競爭問題的。

“python線程間通信之隊列怎么創建”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

保康县| 会同县| 武宣县| 柳河县| 浦城县| 南和县| 宜良县| 隆安县| 灌南县| 彩票| 咸阳市| 凤台县| 墨脱县| 溧阳市| 西安市| 门头沟区| 淮滨县| 五峰| 多伦县| 苏州市| 涟水县| 西乌珠穆沁旗| 普陀区| 柳河县| 游戏| 曲周县| 沙雅县| 资阳市| 峡江县| 太谷县| 山阳县| 巴南区| 绍兴县| 冕宁县| 宁化县| 渭源县| 余江县| 清水县| 嫩江县| 平利县| 鲜城|