新闻资讯  快讯  焦点  财经  政策  社会
互 联 网   电商  金融  数据  计算  技巧
生活百科  科技  职场  健康  法律  汽车
手机百科  知识  软件  修理  测评  微信
软件技术  应用  系统  图像  视频  经验
硬件技术  知识  技术  测评  选购  维修
网络技术  硬件  软件  设置  安全  技术
程序开发  语言  移动  数据  开源  百科
安全防护  资讯  黑客  木马  病毒  移动
站长技术  搜索  SEO  推广  媒体  移动
财经百科  股票  知识  理财  财务  金融
教育考试  育儿  小学  高考  考研  留学
您当前的位置:首页 > IT > 程序开发 > 语言 > Python

python中的线程与线程池

时间:2019-05-14 09:45:22  来源:  作者:

进程和线程

什么是进程?

进程就是正在运行的程序, 一个任务就是一个进程, 进程的主要工作是管理资源, 而不是实现功能

什么是线程?

线程的主要工作是去实现功能, 比如执行计算.

线程和进程的关系就像员工与老板的关系,

老板(进程) 提供资源 和 工作空间,

员工(线程) 负责去完成相应的任务

特点

一个进程至少由一个线程, 这一个必须存在的线程被称为主线程, 同时一个进程也可以有多个线程, 即多线程

当我们我们遇到一些需要重复执行的代码时, 就可以使用多线程分担一些任务, 进而加快运行速度

线程的实现

线程模块

Python通过两个标准库_thread和threading, 提供对线程的支持 , threading对_thread进行了封装。

threading模块中提供了Thread , Lock , RLock , Condition等组件。

因此在实际的使用中我们一般都是使用threading来实现多线程

线程包括子线程和主线程:

主线程 : 当一个程序启动时 , 就有一个线程开始运行 , 该线程通常叫做程序的主线程

子线程 : 因为程序是开始时就执行的 , 如果你需要再创建线程 , 那么创建的线程就是这个主线程的子线程

主线程的重要性体现在两方面 :

是产生其他子线程的线程

通常它必须最后完成执行, 比如执行各种关闭操作

Thread类

常用参数说明

python中的线程与线程池

 

常用实例方法

python中的线程与线程池

 

创建线程

在python中创建线程有两种方式, 实例Thread类和继承重写Thread类

python中的线程与线程池

 

实例Thread类

python中的线程与线程池

 

继承Thread类

python中的线程与线程池

 

常用方法

join()

阻塞调用程序 , 直到调用join () 方法的线程执行结束, 才会继续往下执行

python中的线程与线程池

 

setDemon()

使用给线程设置守护模式: 子线程跟随主线程的结束而结束, 不管这个子线程任务是否完成. 而非守护模式的子线程只有在执行完成后, 主线程才会执行完成

setDaemon() 与 join() 基本上是相对的 , join会等子线程执行完毕 ; 而setDaemon则不会等

python中的线程与线程池

 

线程间的通信

互斥锁

在同一个进程的多线程中 , 其中的变量对于所有线程来说都是共享的 , 因此 , 如果多个线程之间同时修改一个变量 , 那就乱套了 , 共享的数据就会有很大的风险 , 所以我们需要互斥锁 , 来锁住数据 , 防止篡改。

来看一个错误的示范:

python中的线程与线程池

 

下面我们改一下上面的代码 , 两个方法加上互斥锁:

python中的线程与线程池

 

在容易出现抢夺资源的地方进行上锁 , 实现同一时间内 , 只有一个线程可以对对象进行操作

队列Queue

常用方法

关键字解释

python中的线程与线程池

 

(1): 阻塞: 程序停在阻塞的位置 , 无法继续执行

导入和实例化

python中的线程与线程池

 

put() 和 get()

python中的线程与线程池

 

empty()

python中的线程与线程池

 

qsize()

python中的线程与线程池

 

full()

python中的线程与线程池

 

join()

python中的线程与线程池

 

线程池

池的概念

线程池中实现准备好了一些可以重复使用的线程 , 等待接受任务并执行

主线程提交任务给 线程池 , 线程池中的每个线程会一次一个的接收任务并执行 , 直到主线程执行结束

主线程: 相当于生产者,只管向线程池提交任务。

并不关心线程池是如何执行任务的。

因此,并不关心是哪一个线程执行的这个任务。

线程池: 相当于消费者,负责接收任务,

并将任务分配到一个空闲的线程中去执行。

自定义线程池

python中的线程与线程池

 

简单使用

python中的线程与线程池

 

python内置线程池

原理

1.创建线程池

2.将任务扔进去

3.关闭线程池

4.等待线程任务执行完毕

python中的线程与线程池

 

使用方法

python中的线程与线程池

 

其他操作

操作一: close - 关闭提交通道,不允许再提交任务

操作二: terminate - 中止进程池,中止所有任务
 



Tags:python   点击:()  评论:()
声明:本站部分内容来自互联网,如有任何版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▌相关评论
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
▌相关推荐
作者 | Serdar Yegulalp译者 | 姜松浩,责编 | 屠敏转载自 CSDN(ID:CSDNnews)Python因其强大、灵活且易于使用等特性,而赢得了声誉。这些优点使其在各种各样的应用程序、工作流程...【详细内容】
2019-07-19   python  点击:(3)  评论:(0)  加入收藏
本文要点 字符串拼接 拆分含有多种分隔符的字符串 判读字符串a是否以字符串b开头或结尾 调整字符串中文本的格式 对字符串进行左,右,居中对齐 删除字符串中不需要的字符字符串...【详细内容】
2019-07-19   python  点击:(1)  评论:(0)  加入收藏
导读:Python数据工具箱涵盖从数据源到数据可视化的完整流程中涉及到的常用库、函数和外部工具。其中既有Python内置函数和标准库,又有第三方库和工具。这些库可用于文件读写、...【详细内容】
2019-07-18   python  点击:(3)  评论:(0)  加入收藏
前置内容为了更容易理解闭包,在说闭包之前,讲一下两个概念:作用域和嵌套函数。 作用域作用域是变量能被访问的范围,定义在函数内的变量是局部变量,局部变量的作用范围只能在函数...【详细内容】
2019-07-17   python  点击:(1)  评论:(0)  加入收藏
引言:年初参与到一个后台系统开发的项目中,里面涉及了很多接口,我做为项目组测试人员,需要对这些接口进行测试,一开始使用 postman 工具测试,很是方便。但随着接口数量的增加,不光...【详细内容】
2019-07-17   python  点击:(5)  评论:(0)  加入收藏
48作者 | Python语音识别来源 | 深度学习与python(ID:PythonDC)不管是机器学习、web开发或者爬虫,数据库都是绕不过去的。那么今天我们就来介绍Python如何Mysql数据库进行连...【详细内容】
2019-07-17   python  点击:(0)  评论:(0)  加入收藏
使用 pyenv 和 virtualwrapper 来管理你的虚拟环境,可以避免很多困惑。-- Matthew Broberg(作者)作为 Python 开发者和 MacOS 用户,拿到新机器首先要做的就是设置 Python 开发...【详细内容】
2019-07-12   python  点击:(6)  评论:(0)  加入收藏
搜索是大数据领域里常见的需求。Splunk和ELK分别是该领域在非开源和开源领域里的领导者。本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家理解大数据搜索...【详细内容】
2019-07-12   python  点击:(6)  评论:(0)  加入收藏
前言我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes。将字符串和Bytes互相转换可以使用encode()和decode()方法。 URL编码正常的URL中...【详细内容】
2019-07-12   python  点击:(6)  评论:(0)  加入收藏
IP合法性校验是开发中非常常用的,看起来很简单的判断,作用确很大,写起来比较容易出错,今天我们来总结一下,看一下3种常用的IP地址合法性校验的方法。IPv4的ip地址格式:(1~255).(0~255...【详细内容】
2019-07-04   python  点击:(10)  评论:(0)  加入收藏
经常写爬虫的都知道,有些页面在登录之前是被禁止抓取的,比如知乎的话题页面就要求用户登录才能访问,而 “登录” 离不开 HTTP 中的 Cookie 技术。登录原理Cookie 的原理非常简...【详细内容】
2019-07-02   python  点击:(20)  评论:(0)  加入收藏
image.png技巧 #1字符串翻转a = "codementor">>> print "Reverse is",a[::-1]翻转后的结果为 rotnemedoc技巧 #2矩阵转置mat = [[1, 2, 3], [4, 5, 6]]>>> zip(*mat)[(1, 4)...【详细内容】
2019-07-01   python  点击:(12)  评论:(0)  加入收藏
1.安装引入模块 安装mysql模块,在windows和ubuntu中 windows里安装mysql模块 Linux里安装mysql模块 在文件中引入模块import pymysql 2.Connection对象 用于建立与数据库的...【详细内容】
2019-06-28   python  点击:(14)  评论:(0)  加入收藏
常遇到两类朋友。一类是会爬虫但不知道如何进一步做数据分析的,一类是平常用 Excel 做分析但不太会用 Python 分析的。如果和你很像,那下面这篇系统长文会很适合你,建议先收藏...【详细内容】
2019-06-26   python  点击:(14)  评论:(0)  加入收藏
文 | 我爱学Python@简书 编辑 | EarlGrey推荐 | 编程派公众号(ID:codingpy)昨天在上厕所的时候突发奇想,当你把usb插进去的时候,能不能自动执行usb上的程序。查了一下,发现只有win...【详细内容】
2019-06-25   python  点击:(12)  评论:(0)  加入收藏
迭代器是一个更抽象的概念,任何对象,如果它的类有 next 方法和 iter 方法返回自己本身,对于 string、list、dict、tuple 等这类容器对象,使用 for 循环遍历是很方便的。在后台 f...【详细内容】
2019-06-24   python  点击:(8)  评论:(0)  加入收藏
python强大的引进-生成器。这就是我们今天要学习的这一章内容。定义:在Python中,这种一边循环一边计算的机制,称为生成器(Generator)。换句更简单的话来理解:任何包含yield语句的...【详细内容】
2019-06-21   python  点击:(14)  评论:(0)  加入收藏
很多同学在使用python进行自动化测试的时候,会涉及到数据库数据校验的问题,因为不知道如何在python中如何对接数据库,这个时候会一脸茫然。今天在这里给大家汇总一下python对接...【详细内容】
2019-06-20   python  点击:(24)  评论:(0)  加入收藏
对正常的网络行为建立模型,要处理的网络数据和保存在模型内的正常模式相匹配,如果不在正常范围内,就认为是攻击行为,对其做出处理。网络安全攻击与防御的工具有哪些? 网络安全与...【详细内容】
2019-06-20   python  点击:(19)  评论:(0)  加入收藏
业务场景:用户下单之后,在规定时间内如果不完成付款,订单自动取消,并且释放库存使用技术:Redis键空间通知(过期回调)用户下单之后将订单id作为key,任意值作为值存入redis中,给这条数...【详细内容】
2019-06-20   python  点击:(37)  评论:(0)  加入收藏
推荐资讯
相关文章
栏目更新
栏目热门