python進階(4)

python進階(4)

線程

線程的注意點

子線程之間共享全局變量,就會形成資源的爭搶問題python

互斥鎖的問題

問題:web

由於線程之間共享全局變量,因此,在多線程幾乎在同時運行的時候,幾乎同時修改同一全局變量的時候沒,就要進行控制安全

此時,須要互斥鎖多線程

當某個線程須要修改資源的時候,先將資源進行鎖定,其餘線程不能修改該線程併發

當線程修改完成以後,而且釋放完互斥鎖以後,其餘的線程才能夠使用svg

互斥鎖保證當前只有一個線程能夠使用修改同一個資源ui

import threading
num = 0

def add_num1():
    global num
    for i in range(10000000):
        lock.acquire(True)
        num += 1
        lock.release()
    print('子線程1已經完成,此時獲得的num1',num)

def add_num2():
    global num
    for i in range(10000000):
        lock.acquire()
        num += 1
        lock.release()
    print('子線程2已經完成,此時獲得的num2',num)

if __name__ == '__main__':
    lock = threading.Lock()
    thread1=threading.Thread(target=add_num1)
    thread2=threading.Thread(target=add_num2)
    thread1.start()
    thread2.start()

注意點:spa

  1. 確保了關鍵代碼只能由一個線程從頭至尾完整的執行完成
  2. 阻止了多線程的併發操做,包含鎖的代碼,其實仍是單線程執行的,效率降低
    • 若是當前的程序出現了多個鎖,可能會出現死鎖問題

死鎖的問題

避免死鎖的方法:線程

  1. 超時釋放
  2. 設計的時候,避免死鎖

線程安全

from queue import Queuefrom