一、线程&进程

对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。进程是很多资源的集合。

有些进程还不止同时干一件事,比如Word,它可以同时进行打字、拼写检查、打印等事情。在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程(Thread)。

由于每个进程至少要干一件事,所以,一个进程至少有一个线程。当然,像Word这种复杂的进程可以有多个线程,多个线程可以同时执行,多线程的执行方式和多进程是一样的,也是由操作系统在多个线程之间快速切换,让每个线程都短暂地交替运行,看起来就像同时执行一样。当然,真正地同时执行多线程需要多核CPU才可能实现。线程是最小的执行单元,而进程由至少一个线程组成。

我们在做事情的时候,一个人做是比较慢的,如果多个人一起来做的话,就比较快了,程序也是一样的,我们想运行的速度快一点的话,就得使用多进程,或者多线程,在python里面,多线程被很多人诟病,为什么呢,因为Python的解释器使用了GIL的一个叫全局解释器锁,它不能利用多核CPU,只能运行在一个cpu上面,但是你在运行程序的时候,看起来好像还是在一起运行的,是因为操作系统轮流让各个任务交替执行,任务1执行0.01秒,切换到任务2,任务2执行0.01秒,再切换到任务3,执行0.01秒……这样反复执行下去。表面上看,每个任务都是交替执行的,但是,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。这个叫做上下文切换。

二、多线程,python中的多线程使用theading模块

下面是一个简单多线程

import threadingimport timedef sayhi(num): #定义每个线程要运行的函数print("running on number:%s" %num)time.sleep(3)if __name__ == '__main__':t1 = threading.Thread(target=sayhi,args=(1,)) #生成一个线程实例t2 = threading.Thread(target=sayhi,args=(2,)) #生成另一个线程实例t1.start() #启动线程t2.start() #启动另一个线程

下面是另一种启动多线程的方式,继承式

import threadingimport timeclass MyThread(threading.Thread):def __init__(self,num):threading.Thread.__init__(self)self.num = numdef run(self):#定义每个线程要运行的函数print("running on number:%s" %self.num)time.sleep(3)if __name__ == '__main__':t1 = MyThread(1)t2 = MyThread(2)t1.start()t2.start()

这两种方式没有什么区别,两种写法而已,我个人喜欢用第一种,更简单一些。

线程等待,多线程在运行的时候,每个线程都是独立运行的,不受其他的线程干扰,如果想在哪个线程运行完之后,再做其他操作的话,就得等待它完成,那怎么等待呢,使用join,等待线程结束

import threadingimport timedef run():print('qqq')time.sleep(1)print('done!')lis = []for i in range(5):t = threading.Thread(target=run)lis.append(t)t.start()for t in lis:t.join()print('over')

守护线程,什么是守护线程呢,就相当于你是一个国王(非守护线程),然后你有很多仆人(守护线程),这些仆人都是为你服务的,一但你死了,那么你的仆人都给你陪葬。

import threadingimport timedef run():print('qqq')time.sleep(1)print('done!')for i in range(5):t = threading.Thread(target=run)t.setDaemon(True)t.start()print('over')

转载于:https://www.cnblogs.com/lincy/p/8530197.html

python学习笔记(十六)-Python多线程多进程相关推荐

  1. python学习笔记(六)字典

    python学习笔记(六)字典 1.字典初见 python中的字典实际上就是一系列的"键-值"对(key-value),它们之间时无序的,每一个键都必须有与之对应的值,这个值可以是 ...

  2. 电脑安装python3.74_python3.4学习笔记(十六) windows下面安装easy_install和pip教程

    python3.4学习笔记(十六) windows下面安装easy_install和pip教程 easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安 ...

  3. Python学习笔记:使用Python操作数据库

    Python学习笔记:使用Python操作数据库 一.数据库编程接口 为了对数据库进行统一的操作,大多数语言都提供了简单的.标准化的数据库接口(API).在Python Database API 2. ...

  4. Python学习笔记:用Python获取数据(本地数据与网络数据)

    Python学习笔记:用Python获取数据(本地数据与网络数据) 一.用Python获取本地数据 读写文件(三种基本模式:r, w, a) 1.写文件 2.读文件

  5. python学习笔记26(python中__name__的使用)

    python学习笔记26(python中__name__的使用) 在python中,每个py文件都是一个模块,也都是一个可执行文件,即包含main方法.因此,对每个py文件,可以单独运行,也可以imp ...

  6. Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发

    Polyworks脚本开发学习笔记(十六)-用C#进行Polyworks二次开发 Polyworks支持C#二次开发,用对应的SDK文档试着做一下开发样例. 新建一个C#项目,在解决方案中右键添加引用 ...

  7. python学习笔记1之-python简介及其环境安装

    python学习笔记之-python简介及其环境安装 最近几年python之火不用多说,最近开始利用时间自学python,在学习的过程中,按照自己的思路和理解记录下学习的过程,并分享出来,如果正好你也 ...

  8. Mr.J-- jQuery学习笔记(十六)--展开和收起动画折叠菜单的实现

    之前写过动画的隐藏与显示:Mr.J-- jQuery学习笔记(十四)--动画显示隐藏 动画隐藏与显示的一个小demo--对联广告:Mr.J-- jQuery学习笔记(十五)--实现页面的对联广告 与动 ...

  9. python 学习笔记十九 django深入学习四 cookie,session

    缓存 一个动态网站的基本权衡点就是,它是动态的. 每次用户请求一个页面,Web服务器将进行所有涵盖数据库查询到模版渲染到业务逻辑的请求,用来创建浏览者需要的页面.当程序访问量大时,耗时必然会更加明显, ...

最新文章

  1. JavaScript前端框架的思考
  2. 工作328:uni-两个页面对象传递
  3. 自然语言处理包pytorch、torchvision、torchtext安装(亲测有效)
  4. ES6新特性_ES6函数参数的默认值设置---JavaScript_ECMAScript_ES6-ES11新特性工作笔记011
  5. java override 用法_JAVA中 @Override 的作用
  6. vue.js 添加 fastclick的支持
  7. 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_09 序列化流_2_对象的序列化流_ObjectOutputStream...
  8. (3)Spring框架----Bean实例化的几种方式对比
  9. linux上的MySQL默认端口,linux下mysql 查看默认端口号与修改端口号方法
  10. 项目管理软件-禅道-内网部署
  11. 基于SAML2.0单点登录的实现(JAVA)
  12. 解决Oracle使用in语句不能超过1000问题
  13. PIX飞控中POS数据读取方法(实用工具)
  14. Spring 专业认证考试学习指南
  15. halcon修改图像的灰度值02
  16. 【概率论】- (2)假设检验
  17. “大牌”纷纷入驻智能家居,小米能否守住高地?
  18. 网文版ChatGPT来了:大模型辅助写作,澜舟和中文在线联手出品
  19. unescape 不能再用!
  20. 6个AI绘画网站,可生成海报

热门文章

  1. 力扣 O(1) 时间插入、删除和获取随机元素 - 允许重复
  2. 除权除息对散户是利好还是不利好?
  3. TrashFlash卡是什么
  4. 未来的创业者和公司,一定要具备三大能力
  5. 如何做到行业顶尖位置?
  6. 聪明女人的七个致富之道,学会它你也能成为人人羡慕的小富婆
  7. 女孩去互联网大厂工作怎么样?
  8. 我发现不少大有课堂的年轻学员确实在做自媒体
  9. 数据线为什么不弄两头都是Typec接口的呢?
  10. 富文本编辑器KindEditor在前端JS的应用