前往 >>?【阅读原文】
1、说点儿题外话
记得刚毕业那会儿,老是喜欢研究各种其他的新的技术性的东西,可能今天还在 hadoop 的分布式明天又去准备了解 python 的机器学习。慢慢的了解过很多东西,除了 java 之外,对 scala、C#、python、shell 等都有粗浅的了解,但是真正让我写一个东西拿到生产环境或是作为一个正式的项目说实话有点难。其实,到了编程3年以后我觉得对技术的深度要比宽度更重要一些,所以,我现在主要写一些 java、python 相关的东西,其他的语言不准备碰了。
2、每天都在接触多线程
现在,很多项目中的多线程都是通过容器或是中间件来完成的。比如说,最常见的就是 web 项目容器,在 web-2.0 以来,很多项目更是从其他的地方挪到了 web 服务器,使用浏览器就可以方便的访问。在 web 容器中基本都封装了对多线程的支持,nginx 服务更是以进程为导向进行设计的,它们以用户的请求为导向使用中间件划分为多线程的请求模式。除了架构或是运维人员会注意这些,其他的开发人员面对繁重的开发任务又怎么会注意到这些呢。所以,面对这种情况在日常开发中如果不是主动研究根本不会要求你写一个多线程、高并发的需求。
3、python 中的多线程
在说明之前先回顾一下理论知识,搞清楚线程是什么以及应该注意什么。多线程:理论上能在同一个时间段执行多个程序片段,每个程序片段就看作是一个线程。为什么要说理论上,因为实际在操作系统中真正的在同一时间段基本是不存在的,但是在软件编程中我们可以理解为它是在同一时间段执行的。同步:在多个线程同时执行到一个对象节点时,同时执行会使这个对象发生冲突,因此,在一个线程执行到这里的时候另外其他的线程也要处理这个对象时则需要等待,这样称之为同步。反之,则称之为异步。通常,遇到需要同步的情况,不同的编程语言都选择通过加锁的方式来实现同步,python 亦是如此。
在 python 语言中提供了两个和多线程线程相关的模块,一个是 thread 模块、另一个是 threading 模块。相比于 threading 模块,thread 模块提供的功能和函数相对比较少,它只提供了低级别的线程和一个简单的锁用来做同步,而 threading 模块相对处理多线程的函数比较多。
4、thread?模块如何实现多线程
创建使用线程
线程同步
实例
5、threading 模块如何实现多线程
创建使用线程
线程同步
除了使用锁的形式实现线程同步,也可以使用使用 python 模块中的队列的形式来实现对线程同步的控制。
实例