1執行緒的建立:
import threadingimport time,random
def text1():
while true:
print(1111111)
time.sleep(random.random()*2)
def text2():
while true:
print(2222222)
time.sleep(random.random() * 2)
def main():
# text1()
# text2()
#建立多執行緒
t1 = threading.thread(target=text1)
t2 = threading.thread(target=text2)
t1.start() #執行多執行緒
t2.start()
if __name__ == "__main__":
main()
2互斥鎖:
在多執行緒之中全域性變數是共享的;在執行過程中又可能會發生資源競爭,所以會用到互斥鎖:比如
import threadingimport time,os,random
num = 0
def text1(agr):
global num
for i in range(agr):
num += 1
print(num)
def text2(agr):
global num
for i in range(agr):
num += 1
print(num)
def main():
t1 = threading.thread(target=text1,args=(1000000,))
t2 = threading.thread(target=text2,args=(1000000,))
t1.start()
t2.start()
time.sleep(5)
print(num)
if __name__ == "__main__":
main()
執行結果:如下,而不是我們向看到的2000000
11703621302259
1302259
如何解決呢,用到互斥鎖:
import threadingimport time,os,random
num = 0
def text1(agr,mutex):
global num
for i in range(agr):
mutex.acquire() #上鎖
num += 1
mutex.release() #解鎖
print(num)
def text2(agr,mutex):
global num
for i in range(agr):
mutex.acquire() #上鎖
num += 1
mutex.release() #解鎖
print(num)
def main():
mutex = threading.lock() #建立乙個互斥鎖
t1 = threading.thread(target=text1,args=(1000000,mutex))
t2 = threading.thread(target=text2,args=(1000000,mutex))
t1.start()
t2.start()
time.sleep(5)
print(num)
if __name__ == "__main__":
main()
結果:
18461572000000
2000000
Python3多執行緒
學習python執行緒 python3 執行緒中常用的兩個模組為 thread threading 推薦使用 thread 模組已被廢棄。使用者可以使用 threading 模組代替。所以,在 python3 中不能再使用 thread 模組。為了相容性,python3 將 thread 重新命名為...
python3 執行緒死鎖
所謂死鎖 是指兩個或兩個以上的程序或執行緒在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序,如下就是死鎖 code from threading import thread,lock ...
python3 多執行緒
多執行緒簡介 執行緒 thread 也稱輕量級程序,時作業系統能夠進行運算排程的最小單位,它被包涵在程序之中,時程序中的實際運作單位。執行緒自身不擁有資源,只擁有一些在執行中必不可少的資源,但他可與同屬乙個程序的其他執行緒共享程序所擁有的全部資源。乙個執行緒可以建立和撤銷另乙個執行緒,同一程序中的多...