python3之執行緒

2022-09-05 15:24:10 字數 2014 閱讀 9071

1執行緒的建立:

import threading

import 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 threading

import 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

1170362

1302259

1302259

如何解決呢,用到互斥鎖:

import threading

import 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()

結果:

1846157

2000000

2000000

Python3多執行緒

學習python執行緒 python3 執行緒中常用的兩個模組為 thread threading 推薦使用 thread 模組已被廢棄。使用者可以使用 threading 模組代替。所以,在 python3 中不能再使用 thread 模組。為了相容性,python3 將 thread 重新命名為...

python3 執行緒死鎖

所謂死鎖 是指兩個或兩個以上的程序或執行緒在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序,如下就是死鎖 code from threading import thread,lock ...

python3 多執行緒

多執行緒簡介 執行緒 thread 也稱輕量級程序,時作業系統能夠進行運算排程的最小單位,它被包涵在程序之中,時程序中的實際運作單位。執行緒自身不擁有資源,只擁有一些在執行中必不可少的資源,但他可與同屬乙個程序的其他執行緒共享程序所擁有的全部資源。乙個執行緒可以建立和撤銷另乙個執行緒,同一程序中的多...