python多執行緒和GIL全域性直譯器鎖
1、執行緒
執行緒被稱為輕量級程序,是最小執行單元,系統排程的單位。執行緒切換需要的資源一般,效率一般。2、多執行緒
在單個程式中同時執行多個執行緒完成不同的工作,稱為多執行緒3、併發:
作業系統同時執行幾個程式,這幾個程式都由一個cpu處理,但在一個時刻點上只有一個程式在cpu上處理4、並行:
作業系統同時執行2個程式,但是有兩個cpu,每個cpu處理一個程式,叫並行5、序列:
一、多執行緒
#python3是假的多執行緒,它不是真真正正的並行,其實就是序列,只不過利用了cpu上下文的切換而已1 mport threading 2 import time 3 # def test1(): 4 # for i in range(10): 5 # time.sleep(1) #睡1s 6 # print('test1=========>%s' % i)# 多執行緒是無序的,併發的 因為在啟動一個執行緒時,執行緒不會立即執行,而是等待cpu的資源排程。7 # 8 # 9 # def test2(): 10 # for i in range(10): 11 # time.sleep(1) 12 # print('test2=========>%s' % i) 13 # 14 # t1 = threading.Thread(target=test1) #定義一個執行緒 target=函式名 15 # t2 = threading.Thread(target=test2) 16 # t1.start() #開啟執行緒 17 # t2.start() 18# test1() 19 # test2()
1 # def test1(n): 2 # time.sleep(1) 3 # print('task', n) 4 # for i in range(10): 5 # t = threading.Thread(target=test1,args=('t-%s' % i,)) #args= 後接輸出結果 末尾必須加 “ , ” 號 6 # t.start()#計算併發所用的時間
1 2 # import threading 3 # import time 4 # def dest(n): 5 # time.sleep(1) 6 # print('this is running====>%s' %n) 7 # l = [] #定義一個空列表 8 # start = time.time() #開始的時間 9 # for i in range(10): #10個程序 10 # t = threading.Thread(target=dest,args=(i,)) 11 # t.start() 12 # l.append(t) #把執行緒執行時間加入到列表 13 # for g in l: 14 # g.join() #等待全部執行緒執行完畢 15 # end = time.time() #執行結束時間 16 # print('time',(end-start)) #執行結束時間 - 開始執行的時間
1 import threading 2 import time 3 def test1(n): 4 time.sleep(1) 5 print('test1====>%s' %n) 6 def test2(n): 7 time.sleep(2) 8 print('test2====>%s' %n) 9 start = time.time() 10 l = [] 11 t1 = threading.Thread(target=test1,args=(1,)) 12 t2 = threading.Thread(target=test2,args=(2,)) 13 t1.start() 14 t2.start() 15 l.append(t1) 16 l.append(t2) 17 for i in l: 18 i.join() 19 end = time.time() 20 print('time',(end - start))View Code #多執行緒共享全域性變數
1 # g_num = 0 2 # def update(): 3 # global g_num #global宣告全域性變數 4 # for i in range(10): 5 # g_num += 1 6 # 7 # def reader(): 8 # global g_num 9 # print(g_num) 10 # 11 # t1 = threading.Thread(target=update) 12 # t2 = threading.Thread(target=reader) 13 # t1.start() 14 # t2.start() 15
二、GIL全域性直譯器鎖
相關推薦
python多執行緒和GIL全域性直譯器鎖
1、執行緒 執行緒被稱為輕量級程序,是最小執行單元,系統排程的單位。執行緒切換需要的資源一般,效率一般。 2、多執行緒 在單個程式中同時執行多個執行緒完成不同的工作,稱為多執行緒 3、
python3多執行緒和GIL全域性直譯器所
GIL的全稱是:Global Interpreter Lock,意思就是全域性直譯器鎖,這個GIL並不是python的特性,他是隻在Cpython直譯器裡引入的一個概念,而在其他的語言編寫的直譯器裡就沒有這個GIL例如:Jython,Pypy 為什麼會有gil?:
關於python的執行緒和GIL全域性鎖的一些見解
GIL全域性鎖是:Python語言和GIL沒有半毛錢關係。僅僅是由於歷史原因在Cpython虛擬機器(直譯器),難以移除GIL.每個執行緒在執行的過程都需要先獲取GIL,保證同一時刻只有一個執行緒可以執行程式碼。作用就是保證同一時刻只有一個執行緒可以執行程式碼,造成了我們使用多執行緒的時候無法實
搞定python多執行緒和多程序
參考 https://www.cnblogs.com/whatisfantasy/p/6440585.html 1 概念梳理: 1.1 執行緒 1.1.1 什麼是執行緒 執行緒是作業系統能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。一條執行緒指的是程序中一個
從零開始學Python(八):Python多執行緒和佇列
很久沒有更新博文啦,在家過春節已經變懶了-_-,不過答應大家更完這個python的入門系列,偶還是會繼續努力的!另外祝願大家新年快樂,事事順心! 執行緒的概念 我們學習的很多程式語言,比如java,oc等,都會有執行緒這個概念.執行緒的用途非常的廣泛,給
Python多執行緒下的全域性變數、區域性變數
最近開發一個新功能遇到一個問題,就是在一個A.py檔案生成2個執行緒,呼叫B.py裡的函式,B.py裡面有若干global定義全域性變數,導致程式得不到想要的結果。B.py檔案裡面的全域性變數,被A.py裡面的2個執行緒所共享,一個執行緒改變了他們的值,另外一個執行緒讀取到
再談Python多執行緒--避免GIL對效能的影響
在Python中使用多執行緒,如果你對GIL本身沒有一定的瞭解;那麼很有可能你只是寫出了正確的多執行緒程式碼,而並沒有達到多執行緒的目的,甚至截然相反的效果。下面介紹了Python中GIL的作用和侷限性,並提供了避免GIL影響效能的幾個建議。 GIL是CPython中特有
Python多執行緒讀寫檔案加鎖
Python的多執行緒在io方面比單執行緒還是有優勢,但是在多執行緒開發時,少不了對檔案的讀寫操作。在管理多個執行緒對同一檔案的讀寫操作時,就少不了檔案鎖了。 使用fcntl 在linux下,python的標準庫有現成的檔案鎖,來自於fcntl模組。這個模組提供了unix
Python多執行緒中阻塞(join)與鎖(Lock)的使用誤區
關於阻塞主執行緒 join的錯誤用法 Thread.join() 作用為阻塞主執行緒,即在子執行緒未返回的時候,主執行緒等待其返回然後再繼續執行. join不能與start在迴圈裡連用 以下為錯誤程式碼,程式碼建立了5個執行緒,然後用一個迴圈啟用執行緒,
python多執行緒程式設計(3): 使用互斥鎖同步執行緒
問題的提出 上一節的例子中,每個執行緒互相獨立,相互之間沒有任何關係。現在假設這樣一個例子:有一個全域性的計數num,每個執行緒獲取這個全域性的計數,根據num進行一些處理,然後將num加1。很容易寫出這樣的程式碼: # encoding: UTF-8import
Python 多執行緒 多程序 全域性直譯器鎖GIL join
Python 程式碼的執行由Python 虛擬機器(也叫直譯器主迴圈)來控制。Python 在設計之初就考慮到要在主迴圈中,同時只有一個執行緒在執行,就像單CPU 的系統中執行多個程序那樣,記憶體中可以存放多個程式,但任意時刻,只有一個程式在CPU 中執行。同樣地,雖然Py
網路程式設計之多執行緒——GIL全域性直譯器鎖
網路程式設計之多執行緒——GIL全域性直譯器鎖 一、引子 定義: In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple native threads from executing Python b
Python多執行緒、多程序和協程的例項講解
執行緒、程序和協程是什麼 執行緒、程序和協程的詳細概念解釋和原理剖析不是本文的重點,本文重點講述在Python中怎樣實際使用這三種東西 參考: 程序、執行緒、協程之概念理解 程序(Process)是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。執
python多執行緒——1、GIL
一、GIL是什麼? 執行緒全域性鎖(Global Interpreter lock),python保護執行緒安全而採取的獨立執行緒執行的限制。 1、明確一點GIL並不是python的特性,pytho
Python 多執行緒,(全域性變數)資料共享,threading.Lock() 互斥鎖
demo.py(互斥鎖): import threading import time # 定義一個全域性變數 g_num = 0 def test1(num): global g_num # 全域性變數可以實現執行緒間資料共享。也可以通過傳參實現 fo
Python 多執行緒、多程序 (一)之 原始碼執行流程、GIL
Python 多執行緒、多程序 (一)之 原始碼執行流程、GIL Python 多執行緒、多程序 (二)之 多執行緒、同步、通訊 Python 多執行緒、多程序 (三)之 執行緒程序對比、多執行緒 一、python程式的執行原理 許多時候,在執行一個python檔案的時候,會發現在同一目錄下會出現一個__
python多執行緒-共享全域性變數
目錄 多執行緒-共享全域性變數 多執行緒-共享全域性變數 列表當作實參傳遞到執行緒中 總結 多執行緒-共享全域性變數問題 多執行緒開發可能遇到的問題 測試1 測試2 多執行緒-共享全域性變數 多執行緒-共享全域性變
Python中單執行緒、多執行緒和多程序的效率對比實驗
Python是執行在直譯器中的語言,查詢資料知道,python中有一個全域性鎖(GIL),在使用多程序(Thread)的情況下,不能發揮多核的優勢。而使用多程序(Multiprocess),則可以發揮多核的優勢真正地提高效率。 對比實驗 資料顯示,如果多執行緒的程序是CPU密集型的,那多執行緒並不能有多少
Python多執行緒的理解和使用(一)Threading中join()函式的理解
1. 多執行緒的概念 多執行緒類似於同時執行多個不同程式,多執行緒執行有如下優點: 使用執行緒可以把佔據長時間的程式中的任務放到後臺去處理。 使用者介面可以更加吸引人,這樣比如使用者點選了一個按鈕去觸發某些事件的處理,可以彈出一個進度條來顯示處理的進度 程式的執行速
Python 多執行緒 threading和multiprocessing模組
執行緒是一個程序的實體,是由表示程式執行狀態的暫存器(如程式計數器、棧指標)以及堆疊組成,它是比程序更小的單位。 執行緒是程式中的一個執行流。一個執行流是由CPU執行程式程式碼並操作程式的資料所形成的。因此,執行緒被認為是以CPU為主體的行為。 執行緒不包含