Python多线程(三)

引言

 在前面的章节我们介绍了使用线程和不使使用线程的对比实例,并且引入了锁的概念,这节课我们来了解一下更高级的threading模块。

threading

 在threading模块中不仅包含了Thread类,还包含了非常好用的同步机制,下面我们先看下threading的一些属性介绍:

对象 描述
Thread 表示一个执行线程的对象
Lock 锁原语对象
RLock 可重入锁对象,使单一线程可(两次)获得已持有的锁(递归锁)
Condition 条件变量对象,使得一个线程等待另一个线程满足特定的“条件”,比如改变状态或者数据值
Event 条件变量的通用版本,任意数量的线程等待某个事件的发生,在该事件发生后所有线程将被激活
Semaphore 为线程间共享的有限资源提供了一个“计数器”,如果没有可用资源时会被阻塞
BoundedSemaphore 与Semaphore类似,不过它不允许超过初始值
Timer 与Thread类似,不过它要在运行前等待一段时间
Barrier 创建一个“障碍”,必须达到指定的线程数后才可以继续

 在前面的章节我们提到了锁和sleep(6)的讨论,不知道有没有同学去实验,如果不引入锁并且也不适用sleep(6)最后会导致什么结果?大家可以去试一下。
 根据上一个问题的讨论,所以在这里我不建议大家适用Thread模块,因为它没有守护线程这个概念,当主线程退出的时候,所有的子线程都将终止,不管他们是否正在工作当中。如果你不想这种事情发生,那就必须引入守护线程的概念了。
 threading模块支持守护线程,守护线程一般是一个等待客户端请求服务的服务器,如果没有客户端的请求,守护线程就是空闲的。如果把一个线程设置成为守护线程,就表示这个线程是不重要的,进程退出时不需要等待这个线程执行完成。
 如果主线程准备退出时,不需要等待某些子线程完成,就可以为这些子线程设置守护线程标记。该标记为true时,表示该线程不重要。或者说该线程只是用来等待客户端请求而不做任何其他的事情。
这节就到这里吧,明天继续。更多内容请持续关注公众号“计算机自学平台”

原创文章 52 获赞 40 访问量 9万+

猜你喜欢

转载自blog.csdn.net/farley119/article/details/82564061