python高階 多執行緒

2021-09-18 02:40:56 字數 2899 閱讀 2305

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操作完成返回才呼叫的方式...