python `queue` 模塊提供了同步的、線程安全的隊列類

在Python中,queue 模塊提供了同步的、線程安全的隊列類,這使得在多線程環境下共享數據變得簡單。下面是一個使用 queue.Queue 的并發編程示例,其中使用了 threading 模塊來創建多個線程,這些線程將向隊列中添加元素并從隊列中取出元素。

import queue
import threading
import time
import random# 定義一個工作函數,用于模擬生產者(向隊列中添加數據)和消費者(從隊列中取出數據)
def worker(q, job_type):while True:item = random.randint(1, 100)  # 模擬生成數據if job_type == 'producer':q.put(item)  # 生產者向隊列中添加數據print(f'{threading.current_thread().name} 生產了 {item}')time.sleep(random.random())  # 模擬耗時操作elif job_type == 'consumer':item = q.get()  # 消費者從隊列中取出數據q.task_done()  # 表示隊列中之前入隊的一個任務已經完成print(f'{threading.current_thread().name} 消費了 {item}')time.sleep(random.random())  # 模擬耗時操作# 創建一個隊列
q = queue.Queue()# 創建并啟動生產者線程
for i in range(2):  # 假設有兩個生產者t = threading.Thread(target=worker, args=(q, 'producer'), name=f'生產者-{i+1}')t.daemon = True  # 設置為守護線程,主線程結束時守護線程也會結束t.start()# 創建并啟動消費者線程
for i in range(3):  # 假設有三個消費者t = threading.Thread(target=worker, args=(q, 'consumer'), name=f'消費者-{i+1}')t.daemon = True  # 設置為守護線程t.start()# 主線程等待所有任務完成(這里假設所有任務都會很快完成,實際情況中可能需要更復雜的同步機制)
q.join()  # 等待隊列中的所有項目都被處理print("所有任務完成。")

注意

  1. 在這個示例中,我使用了 random.randint(1, 100) 來模擬生產的數據,以及 random.random() 來模擬生產者和消費者的耗時操作。

  2. q.put(item) 用于生產者向隊列中添加元素,而 q.get() 用于消費者從隊列中取出元素。q.task_done() 表示隊列中之前入隊的一個任務已經完成,每當消費者線程完成一個元素的消費后,就應當調用這個方法。

  3. 使用了 threading.Thread 來創建線程,并設置了 daemon 屬性為 True,這意味著這些線程是守護線程,當主線程結束時,它們也會自動結束。

  4. 使用了 q.join() 方法來等待隊列中的所有元素都被處理。但是,需要注意的是,在這個示例中,由于生產者線程是無限循環的(沒有明確的退出條件),所以實際上 q.join() 可能永遠不會返回,除非在外部有某種機制來停止生產者線程(例如,通過共享變量或使用 threading.Event)。在實際應用中,你可能需要設計更復雜的邏輯來確保生產者線程在適當的時候停止。

  5. 為了簡化示例,這里沒有包含優雅地關閉線程或隊列的代碼。在實際應用中,你可能需要實現某種形式的信號機制來通知線程何時停止工作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/42431.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/42431.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/42431.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

探索 WebKit 的前沿之旅:HTML5 新特性的卓越處理

探索 WebKit 的前沿之旅:HTML5 新特性的卓越處理 隨著 Web 技術的飛速發展,HTML5 已經成為構建現代網頁和應用的基石。WebKit,作為領先的瀏覽器引擎之一,承載著將這些創新技術轉化為用戶可感知體驗的使命。本文將深入探討 WebKit…

工程化:Commitlint / 規范化Git提交消息格式

一、理解Commitlint Commitlint是一個用于規范化Git提交消息格式的工具。它基于Node.js,通過一系列的規則來檢查Git提交信息的格式,確保它們遵循預定義的標準。 1.1、Commitlint的核心功能 代碼規則檢查:Commitlint基于代碼規則進行檢查&a…

匯聚榮拼多多電商的技巧有哪些?

在電商平臺上,匯聚榮拼多多以其獨特的商業模式和創新的營銷策略吸引了大量消費者。那么,如何在這樣一個競爭激烈的平臺上脫穎而出,成為銷售佼佼者呢?本文將深入探討匯聚榮拼多多電商的成功技巧。 一、精準定位目標客戶群體 首先,…

Python魔法函數(Magic Methods簡介

在 Python 中,魔法函數(Magic Methods)也稱為雙下劃線方法(Dunder Methods),是指那些名字以雙下劃線開頭和結尾的特殊方法。 這些方法可以讓您的自定義類實現一些特定的行為,從而與 Python 的內…

絕區肆--2024 年AI安全狀況

前言 隨著人工智能系統變得越來越強大和普及,與之相關的安全問題也越來越多。讓我們來看看 2024 年人工智能安全的現狀——評估威脅、分析漏洞、審查有前景的防御策略,并推測這一關鍵領域的未來可能如何。 主要的人工智能安全威脅 人工智能系統和應用程…

Qt 繪圖詳解

文章目錄 頭文件和構造函數啟用反鋸齒功能繪制矩形繪制圓角矩形繪制橢圓繪制圓弧繪制弦繪制凸多邊形繪制圖片繪制直線繪制多條直線繪制多點連接的線繪制路徑繪制扇形繪制點繪制文本擦除矩形區域填充矩形填充路徑 頭文件和構造函數 #include "mainwindow.h" #include…

C-11 三角剖分的調研

C-11 三角剖分算法 三角剖分就是將輸入的多邊形,分割成一系列互不重疊的三角形,其重要性就在這不多贅述。這個是一個別人總結的鏈接:http://vterrain.org/Implementation/Libs/triangulate.html 圖片鏈接:http://www-cgrl.cs.m…

基于CentOS Stream 9平臺搭建MinIO以及開機自啟

1. 官網 https://min.io/download?licenseagpl&platformlinux 1.1 下載二進制包 指定目錄下載 cd /opt/coisini/ wget https://dl.min.io/server/minio/release/linux-amd64/minio1.2 文件賦權 chmod x /opt/coisini/minio1.3 創建Minio存儲數據目錄: mkdi…

springboot校園安全通事件報告小程序-計算機畢業設計源碼02445

Springboot 校園安全通事件報告小程序系統 摘 要 隨著中國經濟的飛速增長,消費者的智能化水平不斷提高,許多智能手機和相關的軟件正在得到更多的關注和支持。其中,校園安全通事件報告小程序系統更是深得消費者的喜愛,它的出現極大…

關于隱藏、覆蓋(重寫)、重載的理解

定義區分 在派生-對象中:優先考慮隱藏,此時派生類中的覆蓋(重寫)也是隱藏;沒有隱藏的情況下,子類對象才能調用父類重載函數。[此時感覺virtual沒用,]在派生-指針或者引用中:只用覆蓋(重寫)和重載; 注:C Pr…

《Programming from the Ground Up》閱讀筆記:p19-p48

《Programming from the Ground Up》學習第2天,p19-p48總結,總計30頁。 一、技術總結 1.object file p20, An object file is code that is in the machine’s language, but has not been completely put together。 之前在很多地方都看到object fi…

高階K8S面試題你會幾個?

前言 K8S架構、公有云、持久化存儲、HELM、CICD、負載均衡、監控告警、可觀察性、服務治理、架構探索。。。 Q1:如何調試 Kubernetes 集群中的網絡連接問題,比如 Pod 間通信失敗的情況? 狀態檢查:使用 kubectl get pods 和 kube…

MySQL-17-mysql alter 語句如何實現?如何合并為一個

拓展閱讀 MySQL 00 View MySQL 01 Ruler mysql 日常開發規范 MySQL 02 truncate table 與 delete 清空表的區別和坑 MySQL 03 Expression 1 of ORDER BY clause is not in SELECT list,references column MySQL 04 EMOJI 表情與 UTF8MB4 的故事 MySQL 05 MySQL入門教程&a…

Git使用中遇到的問題(隨時更新)

問題1.先創建本地庫,后拉取遠程倉庫時上傳失敗的問題怎么解決? 操作主要步驟: step1 設置遠程倉庫地址: $ git remote add origin gitgitee.com:yourAccount/reponamexxx.git step2 推送到遠程倉庫: $ git push -u origin "master&qu…

線程池理解及7個參數

定義理解 線程池其實是一種池化的技術實現,池化技術的核心思想就是實現資源的復用,避免資源的重復創建和銷毀帶來的性能開銷。線程池可以管理一堆線程,讓線程執行完任務之后不進行銷毀,而是繼續去處理其它線程已經提交的任務。 …

GStreamer學習5----probe數據探測

參考資料: gstreamer中如何使用probe(探針)獲取幀數據_gstreamer 視頻編碼時獲取視頻關鍵幀信息-CSDN博客 Gstreamer中可以使用AppSink作為一個分支來查看管線中的數據,還可以使用probe去處理。 在GStreamer中,probe…

LayerNorm Plugin的使用與說明

目錄 前言0. 簡述1. Layernorm Plugin的使用1.1 源碼下載1.2 模型下載和修改1.3 環境配置1.4 編譯1.4 engine生成和執行(trtexec)1.5 enging生成和執行(C API) 2. 補充說明2.1 RTMO顯存占用問題2.2 插件找不到的說明2.3 LayerNorm plugin封裝的嘗試2.4 layerNorm plugin核函數實…

拉曼光譜入門:3.拉曼光譜的特征參數與定量定性分析策略

1.特征參數 1.1 退偏振率 退偏振率(p)是一個衡量拉曼散射光偏振狀態的參數,它描述了拉曼散射光的偏振方向與入射光偏振方向之間的關系。退偏振率定義為垂直偏振方向的拉曼散射強度與平行偏振方向的拉曼散射強度之比。退偏振率(p&…

禁用windows的語音識別快捷鍵win+ctrl+s

win11組合鍵winctrls會彈出語音識別提示,即使到設置里禁用了語音識別也沒用 解決辦法:安裝PowerToys,通過“鍵盤管理器”-“重新映射快捷鍵”禁用 PowerToys是微軟自己的工具,不用擔心安全問題,下載地址:h…

系統設計題-簡易數據庫系統

一、設計一個簡易數據庫系統,包含create,insert,select三個指令。 create(int tableId,int colNum,String key):創建表,其id為tableId,如果該表已存在,則不做任何處理。colNum為表中列的數量&a…