多线程--threading
python的thread模块是比较底层的模块,python的threading模块是对thread做了些封装的,可以更加方便的使用
1.使用thearding模块
说明:
--1.可以明显的看出使用了多线程并发的操作,花费时间要短很多
--2.创建好的线程,需要调用start()方法来启动
2.主线程会等待所有子线程结束后才结束
为什么会等子线程结束,主线程才结束呢?回收内存。
3.查看线程
上述代码添加了以下代码:
4.threading注意点
threading.Thread封装子类
通过使用threading模块能完成多任务的程序开发,为了让每个线程的封装性更完美,所以使用threading模块时,往往会定义一个新的子类class,只要继承threading.Thread就可以了,然后重新run方法
5.线程的执行顺序
说明:
只能保证每个线程都运行完整个run函数,但是线程的启动顺序,run函数中每次循环的执行顺序都不能确定
注意:
每个线程一定会有一个名字,尽管上面的例子中没有指定线程对象的name,但是python会自动为线程指定一个名字
当线程的run()方法结束时该线程完成
无法控制线程调度程序,但是可以通过被的方式来影响线程调度的方式
线程的集中状态:启动,调度,结束,等待
6.多线程--共享全局变量
两个线程修改全局变量
7.列表当做实参传递到线程中
在一个进程内的所有线程共享全局变量,能够在不适用其他方式的前提下完成
8.进程线程
进程:能够完成任务,比如一台电脑上能够同时运行多个QQ
线程:能够完成多任务,比如一个QQ中的多个聊天窗口
9.同步
同步就是协同步调,按预定的先后次序进行运行。
10.互斥锁
当多个线程几乎同时修改某一个共享数据的时候,需要进行同步控制
锁的好处:
确保了某段关键代码只能由一个线程从头到尾完整的执行
锁的坏处:
阻止了多线程并发执行,包含锁的某段代码实际上只能以单线程模式执行,效率就大大的下降了,
由于可以存在对哦个锁,不同的线程持有不同的锁,并试图获取对方持有的锁时,可能会造成死锁。