執行緒
執行緒:是cpu排程的最小單位,乙個程序裡面至少有乙個執行緒,通過時間片輪訓方式進行的
執行緒之間共享全域性變數
執行緒的特點:1.是乙個輕型實體 2.獨立排程和分派的基本單位 3.共享程序資源 4.可併發執行
執行緒執行順序:當所有子執行緒執行完畢,主線程執行完畢
python實現多執行緒的兩種方式:
python的thread模組是比較底層的模組,python的threading模組是對thread做了一些包裝的,可以更加方便的被使用,通過threading模組可以建立執行緒
多執行緒實現多工方式1
#多執行緒實現多工方式引入threading執行緒模組
import
threading
import
time
defdownload_music():
""""""
for i in range(5):
time.sleep(1) #
休眠1秒
print("
" %i)
defplay_music():
""""""
for i in range(5):
time.sleep(1) #
休眠1秒
print("
" %i)
defmain():
#建立執行緒物件t1
#target: 指向新開啟的執行緒要執行的**
t1 = threading.thread(target=download_music)
t2 = threading.thread(target=play_music)
t1.start()
#啟動執行緒,既然執行緒開始執行
t2.start()
if__name__ == '
__main__':
main()
import說明:python的threading.thread類有乙個run方法,用於定義執行緒的功能函式,可以在自己的執行緒類中覆蓋該方法。而建立自己的執行緒例項後,通過thread類的start方法,可以啟動該執行緒,當該執行緒獲得執行的機會時,就會呼叫run方法執行執行緒。threading
import
time
#2. 自定義類,繼承threading.thread類
class
mythread(threading.thread):
defrun(self):
"""把執行緒要執行的**封裝在該方法中
"""#
threading.current_thread().name :取得執行該**的執行緒的名稱,即當前執行緒的名稱
for i in range(3):
time.sleep(1) #
休眠1秒,模擬耗時的操作
#print(" run 當前執行緒的名稱%s ---**塊%d" %(threading.current_thread().name,i))
print("
run 當前執行緒的名稱%s ---**塊%d
" %(self.name, i))
if__name__ == '
__main__':
print("
main 當前執行緒的名稱%s
" %threading.current_thread().name)
#通過自定義的類建立執行緒物件
t1 =mythread()
#執行執行緒
t1.start()
執行緒鎖
gil鎖:全域性直譯器鎖,是cpython直譯器下的python程式,它的存在導致同一時刻只有乙個執行緒會執行解決直譯器中多個執行緒競爭資源問題
互斥鎖:當多個執行緒幾乎同時修改某乙個共享資料的時候,需要進行同步控制
使用互斥鎖完成2個執行緒對同乙個全域性變數各加100萬次的操作
import結果如下:threading
import
time
from threading import
lock,thread
#全域性變數
num=0
mutex_lock=lock() #
互斥鎖def
work(loop):
global
num
for i in
range(loop):
#加鎖mutex_lock.acquire()
temp=num
num=temp+1
#釋放鎖mutex_lock.release()
print("
in work
",num )
defwork2(loop):
global
num
for i in
range(loop):
mutex_lock.acquire()
temp =num
num=temp+1mutex_lock.release()
print("
in owrk
",num)
if__name__ == '
__main__':
#建立子執行緒
t1=thread(target=work,args=(10000,))
t2=thread(target=work2,args=(10000,))
#執行子執行緒
t1.start()
t2.start()
#主線程執行,表示子執行緒沒有執行完,則主線程休眠1秒
while len(threading.enumerate())!=1:
time.sleep(1)
print("
2個子執行緒對同乙個全域性變成操作之後的最終結果為:%s
"%num)
多工 執行緒
建立函式 建立執行緒物件,並制定函式 開啟執行緒 import threading import time defwork1 1.定義函式 for i in range 5 print 正在掃地 i time.sleep 1 defmain 測試執行緒的基本使用 2.建立執行緒物件 t1 threa...
多工 執行緒
簡單地說,就是作業系統可以同時執行多個任務。實現多工有多種方式,執行緒 程序 協程。可以簡單理解為同一程序中有多個計數器,每個執行緒的執行時間不確定,而每個程序的時間片相等,執行緒是作業系統排程執行的最小單位.import threadingt1 threading.thread target fu...
多工 執行緒
什麼叫 多工 呢?簡單地說,就是作業系統可以同時執行多個任務。執行緒 1.使用threading模組 import threading defsing pass defdance pass defmain t1 threading.thread target sing t2 threading.th...