進程與線程學習

多線程

t=threading.Thread(target=task,arge=(11,))
start()開始
join()等待

主線程在默認情況下會等待所有非守護線程(子線程)結束后才會結束程序。也就是說,如果主線程在結束前沒有調用所有子線程的 join() 方法,主線程將繼續執行,并且當主線程完成它的執行后,它將等待所有子線程結束。

多線程對同一個變量操作時可能造成數據競爭

import threading
loop=1000000
number=0
def _add(count):global numberfor i in range(count):number+=1
def _sub(count):global numberfor i in range(count):number-=1
t1=threading.Thread(target=_add,args=(loop,))
t2=threading.Thread(target=_sub,args=(loop,))
t1.start()
t2.start()
t1.join()
#t2.join()
print(number)

未調用 t2.join() 會導致在 t1 線程結束后,主線程打印 number 的值,然后程序依然會等 t2 線程結束。但由于打印 number 的操作在 t2 結束前可能被執行,這會導致 number 的值不確定。

解決方案:
加鎖
import threading
loop=1000000
number=0
lock_object=threading.RLock()
def _add(count):lock_object.acquire() #申請鎖global numberfor i in range(count):number+=1lock_object.release() # 釋放鎖
def _sub(count):lock_object.acquire()global numberfor i in range(count):number-=1lock_object.release()
# 也可以這么寫
def sub():with lock_object:  #自動進行申請和釋放global numberfor i in range(count):number-=1
t1=threading.Thread(target=_add,args=(loop,))
t2=threading.Thread(target=_sub,args=(loop,))
t1.start()
t2.start()
t1.join()
t2.join()
print(number)
Lock(同步鎖)和 RLock(遞歸鎖)區別

Lock效率更高,但是不支持多次鎖的情況,一般項目開發還是用RLock

import threading
lock_object=threading.RLock()# personA create a function
def fun():with lock_object:pass
# personB,too and use A' fun()
def run():print("other use")fun()print("other use")
# personC create functions,need lock,use fun
def progress():with lock_object:print('other use')fun()print('hhhhh')
死鎖
競爭資源
import threading
lock=threading.RLock()
num=0
def task():print('start')lock.acquire()lock.acquire()global numfor i in range(100000):num+=ilock.release()lock.release()print(num)
for i in range(2):t=threading.Thread(target=task)t.start()
# start
# 4999950000
# start
# 9999900000
彼此通信
import threading
import time
lock_1=threading.RLock()
lock_2=threading.RLock()
def task1():lock_1.acquire()time.sleep(1)lock_2.acquire()print(11)lock_2.release()print(1111)lock_1.release()print(111111)
def task2():lock_2.acquire()time.sleep(1)lock_1.acquire()print(22)lock_1.release()print(2222)lock_2.release()print(222222)
t1=threading.Thread(target=task1)
t1.start()
t2=threading.Thread(target=task2)
t2.start()

t.daemon=true??設置守護線程

name=threading.current_thread().getName() 獲取當前線程名稱

t.setName('xxx') 設置線程名稱,要在 start()之前

線程池

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

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

相關文章

2025第十屆美陳展

展位又遭瘋搶!2025第十屆美陳展釋放“無界之美” 美是全球通用的語言,人類對美的追求始終如一,大眾審美在經歷了時代的變遷后開始趨同,東方文明深處的美學經濟開始崛起。 在如今商業邁入存量階段,以品牌為突破口打造…

基于 vuestic-ui 實戰教程 - 登錄篇

1. 簡介 登錄做為一個系統的門面,也是阻擋外界的一道防線,那在vuestic-ui中如何做登錄功能呢。在這里就之間沿用初始版本的Login頁面,作為一個演示模板,后續需要改進的讀者可以在此篇文章的基礎上修改。 2. 登錄接口相關api 與 t…

python連接mysql,并整理(去哪兒網)頁面數據到表

##引入requests/pymysql模塊 本地安裝mysql數據庫,安裝圖形化工具navicat import requests from pymysql import Connect#創建客戶端連接信息 client Connect(host127.0.0.1,port3306,userroot,password, ) #創建游標 cursor client.cursor() cursor.execute(cre…

17- PHP 開發-個人博客項目TP 框架路由訪問安全寫法歷史漏 洞

常見的php框架:laravel和thinkphp和yii 這里以thinkphp為例 thinkphp目錄訪問設置 這里只找到了這個3.多的源代碼,沒找點5.的,湊合一下 鏈接:GitHub - top-think/thinkphp: ThinkPHP3.2 ——基于PHP5的簡單快速的面向對象的PHP…

HTML用法介紹

文章目錄 一、HTML概念和模版二、常用標簽及用法1.p標簽2.span標簽3.h標簽4.hr標簽5.img標簽6.a標簽7.input標簽8.table標簽 一、HTML概念和模版 HTML的全稱為超文本標記語言&#xff0c;它包括一系列標簽組成&#xff0c;模版及各部分注釋如下&#xff1a; <!--聲明文檔類…

ROS基礎學習-話題通信機制研究

研究ROS通信機制 研究ROS通信機制 0.前言1.話題通信1.1 理論模型1.2 話題通訊的基本操作1.2.1 C++1.2.2 Python中使用自己的虛擬環境包1.2.2.1 參考11.2.2.2 參考21.2.2.3 /usr/bin/env:“python”:沒有那個文件或目錄1.2.3 Python1.2.2.1 發布方1.2.2.2 訂閱方1.2.2.3 添加可執…

【八股系列】談談關于對webpack熱更新的原理?

文章目錄 1. 熱更新原理2. 熱更新配置 1. 熱更新原理 Webpack 的熱模塊替換&#xff08;Hot Module Replacement&#xff0c;HMR&#xff09;是一種在不完全刷新頁面的情況下更新應用代碼的技術&#xff0c;從而提高了開發效率。以下是 HMR 的核心原理&#xff1a; 步驟描述1…

tcpdump抓包,抓包導出.pcap文件用wireshark看

1、抓所有口的包 tcpdump -i any host 設備的ip2、抓特定口的包 tcpdump -i eth2 port 61182 -nne3、將抓到的包導出到pacb文件 tcpdump -i eth2 port 61182 -nne -s0 -w /tmp/61182.pcap -s0: Sets the snapshot length to capture the entire packet. The 0 means that tcpd…

《征服數據結構》目錄

我們知道要想學好算法&#xff0c;必須熟練掌握數據結構&#xff0c;數據結構常見的有 8 大類&#xff0c;分別是數組&#xff0c;鏈表&#xff0c;隊列&#xff0c;棧&#xff0c;散列表&#xff0c;樹&#xff0c;堆&#xff0c;圖。但如果細分的話就比較多了&#xff0c;比如…

go-zero 實戰(2)

go-zero 實戰&#xff08;1&#xff09; 中&#xff0c;使用了go-zero 創建了order 和 user 兩個微服務。而order作為grpc的客戶端&#xff0c;user 作為grpc的服務端&#xff0c;打通了 order 到 user的調用。接下來&#xff0c;我們在user中&#xff0c;加入mysql組件。確保數…

我說同事咋找工作命中率這么高,原來是學習了這些招式

最近有兩個同事離職了&#xff0c;其中一個還是專科&#xff0c;他倆一個是前端開發&#xff0c;一個是python開發&#xff0c;兩個人都接近35歲了。我們還勸告他們&#xff0c;不要離職&#xff0c;要騎驢找馬。但了解后&#xff0c;他倆非常有信心的說&#xff1a;不怕&#…

富格林:遵守可信準則安全交易

富格林指出&#xff0c;當下的金融市場&#xff0c;投資者大多都會更傾向于盈利效率高的理財產品&#xff0c;而近年來興起的現貨黃金&#xff0c;正合投資者的心意。不過&#xff0c;投資現貨黃金若是不遵循其中的可信準則&#xff0c;是難以實現安全盈利的。那么有哪些可信準…

3D視覺技術|螺栓分揀測試

隨著制造業自動化程度的不斷提高&#xff0c;某大型汽配企業為提升生產效率、減少人力成本&#xff0c;提出了使用復合機器人完成螺栓分揀的需求。富唯智能通過采用復合機器人&#xff0c;結合3D工業相機和高性能控制器&#xff0c;實現螺栓的自動抓取&#xff0c;從而提升生產…

鴻蒙OS開發:【一次開發,多端部署】(一多天氣)項目

一多天氣 介紹 本示例展示一個天氣應用界面&#xff0c;包括首頁、城市管理、添加城市、更新時間彈窗&#xff0c;體現一次開發&#xff0c;多端部署的能力。 1.本示例參考一次開發&#xff0c;多端部署的指導&#xff0c;主要使用響應式布局的柵格斷點系統實現在不同尺寸窗…

【Qt 學習筆記】Qt窗口 | 工具欄 | QToolBar的使用及說明

博客主頁&#xff1a;Duck Bro 博客主頁系列專欄&#xff1a;Qt 專欄關注博主&#xff0c;后期持續更新系列文章如果有錯誤感謝請大家批評指出&#xff0c;及時修改感謝大家點贊&#x1f44d;收藏?評論? Qt窗口 | 工具欄 | QToolBar的使用及說明 文章編號&#xff1a;Qt 學習…

怎么看智慧城市的發展?

智慧城市&#xff0c;就像一個擁有高度智慧和感知能力的未來城市居民&#xff0c;正在不斷地學習、適應和進化。它通過無數的眼睛&#xff08;傳感器&#xff09;和耳朵&#xff08;數據收集設備&#xff09;來觀察和傾聽城市的脈動&#xff0c;通過強大的大腦&#xff08;數據…

opencv文檔py_contours示例整理

文章目錄 目錄說明contours_begin目標什么是輪廓?如何畫等高線?輪廓逼近法contour_features目標1.Moments 時刻2. Contour Area 輪廓面積3. Contour Perimeter 輪廓周長4. Contour Approximation 輪廓近似5. Convex Hull 凸包6. Checking Convexity 檢查凸性7. Bounding Rect…

B2118 驗證子串

驗證子串 題目描述 輸入兩個字符串&#xff0c;驗證其中一個串是否為另一個串的子串。 輸入格式 兩行&#xff0c;每行一個字符串。 輸出格式 若第一個串 s 1 s_1 s1? 是第二個串 s 2 s_2 s2? 的子串&#xff0c;則輸出(s1) is substring of (s2)&#xff1b; 否則&…

Python并發與異步編程

Python的并發與異步編程是兩個不同的概念&#xff0c;但它們經常一起使用&#xff0c;以提高程序的性能和響應能力。以下是對這兩個概念的詳細講解&#xff1a; 并發編程 (Concurrency) 并發編程是指在程序中同時執行多個任務的能力。Python提供了幾種實現并發的機制&#xff…

嵌入式進階——RTC時鐘

&#x1f3ac; 秋野醬&#xff1a;《個人主頁》 &#x1f525; 個人專欄:《Java專欄》《Python專欄》 ??心若有所向往,何懼道阻且長 文章目錄 RTC時鐘原理圖PCF8563寄存器控制與狀態寄存器 設備地址I2C環境初始化RTC寄存器數據讀取RTC寄存器數據寫入RTC鬧鐘設置RTC定時器設置…