1.1 獲取執行緒數
import threading
import time
def fun():
time.sleep(1)
print("hello")
t = threading.thread(target=fun)
t.start()
# print(threading.enumerate())
while true:
leng = len(threading.enumerate())
print("num%d" % leng)
time.sleep(0.2)
1.2 執行緒共享同乙個程序的變數
import threading
num = 1
def fun1():
num = 2
print(num)
fun1()
print(num)
def fun2():
global num
num = 3
print(num)
fun2()
print(num)
def fun3():
global num
num = 4
print(num)
t = threading.thread(target=fun3)
t.start()
print(num)
1.3 互斥鎖
由於執行緒共享乙個程序中的資料,所以在多個執行緒同時修改某乙個共享資料時,會造成資料混亂,基於此,引入互斥鎖,來保證
資料的正確性。
import threading
import time
num = 0
def fun1():
global num
for r in range(1000000):
# 加鎖,mutex.acquire()預設blocking為true,表示當前執行緒去獲取加鎖資源時如果加鎖不成功則阻塞直到加鎖成功
mutex.acquire()
num += 1
mutex.release()
def fun2():
global num
for r in range(1000000):
mutex.acquire()
num += 1
mutex.release()
mutex = threading.lock()
t1 = threading.thread(target=fun1)
t1.start()
# time.sleep(2)
t2 = threading.thread(target=fun1)
t2.start()
time.sleep(2)
print(num)
鎖的好處:確保資料正確性,避免資料混亂
鎖的壞處:阻止多執行緒併發執行,現率降低
可能會造成死鎖
思索可以控制線程的執行順序
import threading
mutex1 = threading.lock()
mutex2 = threading.lock()
mutex2.acquire()
mutex3 = threading.lock()
mutex3.acquire()
mutex4 = threading.lock()
mutex4.acquire()
def fun1():
while true:
if mutex1.acquire():
print("fun1 do")
mutex2.release()
def fun2():
while true:
if mutex2.acquire():
print("fun2 do")
mutex3.release()
def fun3():
while true:
if mutex3.acquire():
print("fun3 do")
mutex4.release()
t1 = threading.thread(target=fun1)
t2 = threading.thread(target=fun2)
t3 = threading.thread(target=fun3)
t1.start()
t2.start()
t3.start()
if mutex4.acquire():
print("finish")
1.4 threadlocal
通過threadlocal宣告的變數,只能被變數所屬的執行緒自己訪問,實現了執行緒之間的資料隔離
import threading
import time
local_var = threading.local()
# print(local_var, type(local_var))
def fun1():
local_var.stdo1 = 60
print(local_var.stdo1)
def fun2():
local_var.stdo1 = 100
print(local_var.stdo1)
t1 = threading.thread(target=fun1)
t2 = threading.thread(target=fun2)
t2.start()
time.sleep(1)
t1.start()
Python高階(多執行緒)
多執行緒結構 import threading def worker 子執行緒要執行的具體邏輯 函式 print threading t1 threading.current thread time.sleep 9 通過休眠模擬子執行緒非同步邏輯 print t1.getname new t thr...
Python高階 多執行緒 05 執行緒
併發 時間段內多個程式輪流執行 並行 同乙個時刻不同cpu同時執行 執行緒 程式執行中,執行 的乙個分支。每個執行至少都有乙個執行緒.執行緒是作業系統排程資源的基礎單位 1.建立 import threading 方法 thread group 執行緒組,目前只能使用none target 執行的目...
python高階 七 多執行緒併發
一 併發和並行 併發 任務數 cpu核數,通過系統的各任務排程演算法,來回切換,實現多個任務 一起 執行,實際上不是真正同時一起執行,只是切換執行的速度相當快,看上去是一起執行的而已 並行 任務數 cpu核數,是真正的一起同時執行。同步 同步是指 呼叫io操作時,必須等待io操作完成返回才呼叫的方式...