欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python进阶(4)

程序员文章站 2022-06-04 09:02:18
...

python进阶(4)

线程

线程的注意点

子线程之间共享全局变量,就会造成资源的争抢问题

互斥锁的问题

问题:

因为线程之间共享全局变量,所以,在多线程几乎在同时运行的时候,几乎同时修改同一全局变量的时候没,就要进行控制

此时,需要互斥锁

当某个线程需要修改资源的时候,先将资源进行锁定,其他线程不能修改该线程

当线程修改完成之后,并且释放完互斥锁之后,其他的线程才可以使用

互斥锁保证当前只有一个线程可以使用修改同一个资源

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

注意点:

  1. 确保了关键代码只能由一个线程从头到尾完整的执行完成
  2. 阻止了多线程的并发操作,包含锁的代码,其实还是单线程执行的,效率下降
    • 如果当前的程序出现了多个锁,可能会出现死锁问题

死锁的问题

避免死锁的方法:

  1. 超时释放
  2. 设计的时候,避免死锁

线程安全

from queue import Queuefrom 
相关标签: python进阶