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