python多任务线程
来源:互联网 发布:java easyui tree例子 编辑:程序博客网 时间:2024/06/18 07:43
一、多任务概念
- 多任务:同时执行多个任务
- 多任务是由cpu时间片轮转的方法执行的
- 多任务的二种方式:
- 并发:多个任务通过cpu任务调度方法,通过时间片轮转运行多任务
- 并行:多个cpu,同个时间点调用不同cpu执行多任务(cpu数量关系)
二、线程概念(重点)
- 线程:一个进程内部的一条执行流程(线程)
主线程:原始线程 子线程:新建线程
2. 多线程创建:
- threading 模块调用(多任务线程模块)
- Thread是一个类,创建一个线程执行计划 target指定函数 不需要调用
- threading.Thread(target=, args =)
- target 指定线程执行的函数名
- args 指定需要使用的函数参数——元组
- 返回值就是Thread的实例对象
- 第一种方式:
1.创建任务
thd = threading.THREAD(target = 需要进行的任务名称)
2.启动多任务
thd.start()
3.获取当前进程内部的线程列表
threading.enumerate()
len(threading.enumerate()显示线程数
4.获取线程列表
threading.enumerate
默认情况下,主线程会自动等待子线程全部退出后退出
- 第二种方式:
1.定义一个类,继承threading.Thread,定义要执行的新的方法
2.主函数创建一个对象 修改run方法
3.对象调用start()方法 调用run方法
线程的执行顺序是无序的 ,将运行sleep是会阻塞(Blocked)的
4.Thread对象.join() :(重点&&&)
主线程 阻塞等待—子线程结束 退出之后继续执行
三、多线程同步(重点*)----秩序
- 多线程-共享全局变量
- 多线程进行全局变量修改,同时修改回导致数据混乱(即非线程安全)
- 怎样解决变量的混乱,非线程的不安全?
- 互斥锁:互斥锁保证在任何一个时间点只有 一个 任务可以获取并占有 锁资源
1.设置互斥锁
lock=threading.Lock()
2.尝试取锁,如未锁定 将被我锁定 如果锁定等待
lock.acquire(bloocking=True,timeout= -1)timeout 为负值,就是死等。false为不等待,不发生阻塞。
3.释放这把锁 —用完解锁
lock.release()
优点 保证多任务修改共享数据时能够同步 使运算结果正确
缺点 失多任务优势,容易造成死锁问题
四、死锁问题
任务在获取锁时造成 一直在等待(死等) 锁资源 而不能成功获取
原因:
没有正确释放 --
用户规范 用完一定要关
解决办法:
就是在获取锁的时候 使用非阻塞 或者 阻塞+超时等待 方式获取锁
多种锁资源分配不当 -- 银行家算法可以解决该问题:
阅读全文
0 0
- Python-多任务-线程
- python多任务-线程
- python多任务线程
- [MFC]多任务线程
- [MFC]多任务线程
- Python 定时执行线程 执行任务
- python 多任务
- Python-多任务-进程
- 多任务、进程和线程
- 多任务、进程和线程
- 多任务、进程和线程
- 多任务处理:线程池
- 多任务、进程与线程
- Python记录记录(进程与线程多任务管理理论)
- 线程--任务
- python实现多任务编程
- 【Python】多任务udp聊天
- Linux多任务编程(一)---任务、进程、线程
- JAVA基础: 集合\迭代器
- 一些常用JS方法
- C++11/14线程--线程的创建与分离
- 2017-12-17
- 压实测试(三)
- python多任务线程
- STM32 使用HAL库做串口的DMA发送和中断接收
- 个人提升:知识管理
- python 多进程
- jave学习笔记
- 获取当前相对绝对路径
- 讲下SpringMvc的核心入口类是什么,Struts1,Struts2的分别是什么
- Gas Station
- 前端学习笔记