Python系统编程(多线程-互斥锁-死锁-thread-threading)

来源:互联网 发布:mac白屏很久 编辑:程序博客网 时间:2024/05/18 01:22

多任务的概念

这里写图片描述

这里写图片描述

Python实现多任务

  • 主线程加sleep是因为主线程如果结束子线程都会结束
    这里写图片描述

这里写图片描述

thread多线程注意点

  • 主线程结束, 子线程也结束
  • 子线程可以调用thread.exit_thread()来结束本线程和主线程

多线程threading

  • threading创建的线程不需要主线程结束之后子线程也可以运行
  • len(threading.enumerate()) 检测有多少个线程
    这里写图片描述

  • 一个线程执行一个函数
    这里写图片描述

  • 多个线程执行同一个函数
    这里写图片描述

  • 后面线程数只有1是因为子线程都运行结束了所以只剩下一个主线程
    这里写图片描述

threading注意点

这里写图片描述
这里写图片描述

  • 用类进行封装
    这里写图片描述

thread和threading的几个问题

这里写图片描述

线程的执行顺序

这里写图片描述

线程总结

这里写图片描述

这里写图片描述

这里写图片描述
这里写图片描述

多线程开发可能遇到的问题

这里写图片描述

线程同步

这里写图片描述

这里写图片描述

互斥锁

这里写图片描述
这里写图片描述
这里写图片描述

互斥锁同步

这里写图片描述
这里写图片描述
这里写图片描述

acquire() 有个参数默认为true表示上锁, 如果设置为false则无法上锁
这里写图片描述
这里写图片描述
运行结果
这里写图片描述
这里写图片描述

acquire(false)
这里写图片描述
这里写图片描述

上锁和解锁过程

这里写图片描述

互斥锁的好处和坏处

这里写图片描述

非共享数据不需要同步

只要是全局变量则线程是共享数据的
如果是函数内部变量那么各个线程的数据是互相独立的
这里写图片描述
运行结果
这里写图片描述

  • 多线程对函数内局部变量的影响
    这里写图片描述
    第二行在第一行打印5秒钟之后才打印
    这里写图片描述

死锁

这里写图片描述
这里写图片描述

光标一直在闪动, 卡主
这里写图片描述

这里写图片描述

这里写图片描述

原创粉丝点击