国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python多線程原理與用法詳解

2020-02-15 22:47:33
字體:
來源:轉載
供稿:網友

本文實例講述了Python多線程原理與用法。分享給大家供大家參考,具體如下:

多線程(英語:multithreading),是指從軟件或者硬件上實現多個線程并發執行的技術。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程,進而提升整體處理性能。具有這種能力的系統包括對稱多處理機、多核心處理器以及芯片級多處理(Chip-level multithreading)或同時多線程(Simultaneous multithreading)處理器。[1] 在一個程序中,這些獨立運行的程序片段叫作“線程”(Thread),利用它編程的概念就叫作“多線程處理(Multithreading)”。具有多線程能力的計算機因有硬件支持而能夠在同一時間執行多于一個線程(臺灣譯作“執行緒”),進而提升整體處理性能。

創建并啟動一個線程

import threadingdef runtask(name):  print("%s線程已啟動"%name)t = threading.Thread(target=runtask,args=("task1",))  # args因為是一個元組,所以必須這樣寫,否則運行將報錯t.start()

join

等待當前線程執行完畢

import threadingimport timedef runtask(name):  print("%s線程已啟動"%name)  time.sleep(2)t = threading.Thread(target=runtask,args=("task1",))t.start()t.join()print("abc")  # 過了2s才會打印,若無等待將看不到等待2s的效果

setDaemon(True)

將線程設置為守護線程。若設置為守護線程,主線程結束后,子線程也將結束,并且主線程不會理會子線程是否結束,主線程不會等待子線程結束完后才結束。若沒有設置為守護線程,主線程會等待子線程結束后才會結束。

active_count

程序的線程數量,數量=主線程+子線程數量

Lock(互斥鎖)

Python編程中,引入了對象互斥鎖的概念,來保證共享數據操作的完整性。每個對象都對應于一個可稱為” 互斥鎖” 的標記,這個標記用來保證在任一時刻,只能有一個線程訪問該對象。在Python中我們使用threading模塊提供的Lock類。

import threading,timedef runtask(name):  global count  time.sleep(1)  lock.acquire()   # 獲取鎖資源,并返回是否獲取成功  count+=1  print(name,count)  lock.release()   # 釋放資源count = 0lock = threading.Lock()   # 互斥鎖for index in range(50):  t = threading.Thread(target=runtask,args=("thread%d"%index,))  t.start()

上面這段代碼如果沒有加上互斥鎖,在Python2.x中執行的結果將會是亂的。在Python3.x中執行卻總是正確的,似乎是自動為其加了鎖

RLock(遞歸鎖,可重入鎖)

當一個線程中遇到鎖嵌套情況該怎么辦,又會遇到什么情況?

def run1():  global count1  lock.acquire()  count1 += 1  lock.release()  return count1def run2():  global count2  lock.acquire()  count2 += 1  lock.release()  return count2def runtask():  lock.acquire()  r1 = run1()  print("="*30)  r2 = run2()  lock.release()  print(r1,r2)count1,count2 = 0,0lock = threading.Lock()for index in range(50):  t = threading.Thread(target=runtask,)  t.start()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高邑县| 乐都县| 上杭县| 凉城县| 肇源县| 资阳市| 耿马| 宿州市| 花垣县| 昂仁县| 林甸县| 德庆县| 红安县| 延安市| 麻阳| 大渡口区| 永善县| 祁阳县| 肇州县| 德阳市| 井陉县| 宁德市| 尉氏县| 新巴尔虎左旗| 临洮县| 乐清市| 宁波市| 福鼎市| 莆田市| 长寿区| 株洲市| 淮北市| 库伦旗| 东乌珠穆沁旗| 大新县| 苏尼特左旗| 申扎县| 温宿县| 温宿县| 叙永县| 吉水县|