Python中线程的使用
并发:多个任务同一时间段进行
并行:多个任务同一时刻进行
线程的实现
线程模块
Python通过两个标准库_thread 和threading,提供对线程的支持 , threading对_thread进行了封装
因此在实际的使用中我们一般都是使用threading
threading模块中提供了Thread , Lock , RLock , Condition等组件
Thread类
常用参数
target 表示调用对象,即子线程要执行的任务
name 子线程的名称
args 传入target函数中的位置参数,是一个元组,参数后必须加逗号
常用实例方法
Thread.run (self) 线程启动时运行的方法,由该方法调用target参数所指定的函数
Thread.start (self) 启动进程,start方法就是去帮你调用run方法
Thread.terminate (self) 强制终止线程
Thread.join (self, timeout=None) 阻塞调用,主线程进行等待
Thread.setDaemon (self,daemonic) 将子线程设置为守护线程
Thread.getName(self,name) 获取线程名称
Thread.setName (self,name ) 设置线程名称
创建线程
实例Thread类
继承Thread类
Join & setDaemon
主线程 : 当一个程序启动时 , 就有一个线程开始运行 , 该线程通常叫做程序的主线程
子线程 : 因为程序是开始时就执行的 , 如果你需要再创建线程 , 那么创建的线程就是这个主线程的子线程
主线程的重要性体现在两方面 :
1. 是产生其他子线程的线程
2. 通常它必须最后完成执行比如执行各种关闭操作
join : 阻塞调用程序 , 直到调用join () 方法的线程执行结束, 才会继续往下执行
setDaemon() 与 join() 基本上是相对的 , join会等子线程执行完毕 ; 而setDaemon则不会等,主线程结束,则全部结束
线程通信
锁
在多线程中 , 所有变量对于所有线程都是共享的
因此 , 线程之间共享数据最大的危险在于多个线程同时修改一个变量 , 那就乱套了
所以我们需要互斥锁 , 来锁住数据
线程间全局变量的共享
因为线程属于同一个进程,因此它们之间共享内存区域,所以全局变量是公共的
共享内存间存在竞争问题
在这里进行原子操作(取值、运算、赋值)的时候切换到了其它线程,一个线程还没赋值,另外的线程就已经给它赋值了,然后又切回来继续赋值
使用锁来控制共享资源的访问
加锁:Lock对象.acquire()
解锁:Lock对象.release()
队列的基本概念
一个入口,一个出口,先入先出(FIFO)
线程安全队列、操作一览
入队: put(item)
出队: get()
测试空: empty()
测试满: full()
队列长度: qsize()
任务结束: task_done()
等待完成: join()
线程池
池的概念
主线程:相当于生产者,只管向线程池提交任务,并不关心线程池是如何执行任务的,因此,也不关心是哪一个线程执行的这个任务
线程池:相当于消费者,负责接收任务,并将任务分配到一个空闲的线程中去执行
线程池的简单实现
python内置线程池
池的其他操作
操作一: close - 关闭提交通道,不允许再提交任务
操作二: terminate - 中止进程池,中止所有任务
Python中线程的使用的更多相关文章
- python中线程和进程(一)
目录 进程和线程 Python中的线程 1. Thread类 2. 线程的启动 3. 线程的传参 4. 线程的属性和方法 5. daemon线程和non-daemon线程 6. join方法 7. 定 ...
- 操作系统/应用程序、操作中的“并发”、线程和进程,python中线程和进程(GIL锁),python线程编写+锁
并发编程前言: 1.网络应用 1)爬虫 直接应用并发编程: 2)网络框架 django flask tornado 源码-并发编程 3)socketserver 源码-并发编程 2.运维领域 1)自动 ...
- python中线程和进程的简单了解
python中线程和进程的简单了解 一.操作系统.应用程序 1.硬件:硬盘.cpu.主板.显卡........ 2.装系统(本身也是一个软件): 系统就是一个由程序员写出来的软件,该软件用于控制计 ...
- Python 中线程和进程
目录 线程和进程 一. 什么是进程 / 线程 1. 引论 2. 线程 3. 进程 4. 区别 5. 使用 二. 多线程使用 1. 常用方法 2. 常用参数 3. 多线程的应用 3.1 重写线程法 3. ...
- python中线程2
cpython中的GIL和pool GIL锁(全局解释器锁) 1.what? GIL是全局解释器锁,和普通锁加在数据上不同的是:GIL加在加在解释器上,是为了防止多个线程在同一时间执行python字节 ...
- python中线程和进程(二)
目录 线程同步 Event Lock RLock Condition Barrier semaphore GIL 线程同步 线程同步,即线程之间协同工作,一个线程访问某些数据时,其他线程不能访问这些数 ...
- python中线程的知识点
什么是线程? 程序的执行线路.每个进程默认有一条线程.线程包含了程序的具体步骤. 多线程就是一个进程中有除主线程(默认线程)外还有多个线程. 线程与进程的关系(进程包含线程,而线程依赖进程存在) 1. ...
- Python中线程与互斥锁
了解之前我们先了解一下什么是多任务? 概念: 几个不同的事件在同时运行就是多任务, 这样的话, 我们有牵扯到了真的多任务, 假的多任务; 并行: 真的多任务, 通过电脑的核数来确定 并发: 假的多任务 ...
- python中线程、进程和协程的区别
进程是资源分配的单位 线程是操作系统调度的单位 协程,又称微线程,纤程,协程的切换只是单纯的操作CPU的上下文,资源很小,效率高 进程切换需要的资源很最大,效率很低 一个程序至少有一个进程,一个进程至 ...
随机推荐
- BPC成员公式
BPC可以通过成员公式,定义维度成员之间相关的计算公式,前端自动得到相应计算结果. 新建成员公式,选择对应的维度成员. 编辑维度成员的计算公式.保存后激活维度即可.
- OC深浅复制
浅复制:指针的复制 深复制:内容的复制 主要有两个关键字 copy 和mutablecopy 对于基本类型 判断深浅方法 1.只要=右边从创建到赋值,至少包含一个NSMutable便会重新生成一个对 ...
- MySQL复习值代码知识点(2)
目录 总汇表 order by使用举例 group by使用举例 limit举例 group by 与order by 联合使用 having的使用 SQL运行结果查询 总汇表 order by 排序 ...
- matplotlib---修改图例
matplotlib.pyplot.legend(*args, **kwargs) 参考文献: [1]python - matplotlib.legend()函数用法解析 - qq_33221533的 ...
- 【cf1272】F. Two Bracket Sequences
传送门 题意: 给出\(s,t\)两个合法括号序列,现在找到一个长度最小的合法的序列\(p\),使得\(s,t\)都为其子序列. 思路: 考虑\(dp:dp[i][j][d]\)表示第一个串在\(i\ ...
- 13-scrapy中selenium的应用
一. 引入 在通过scrapy框架进行某些网站数据爬取的时候,往往会碰到页面动态数据加载的情况发生,如果直接使用scrapy对其url发请求,是绝对获取不到那部分动态加载出来的数据值.但是通过观察我们 ...
- selenium三大切换的骚操作之显性等待
一.handle窗口切换 当点击某个元素后,会重新生成一个新的页签,但此时我们的操作仍然在原先的窗口当中,如果要在新的窗口继续操作元素,那么就要用到handle窗口切换的方法. 常用方法: windo ...
- 邮件hMailServer +Foxmail 安装使用教程
hMialServer是Windows下一款免费开源的邮件服务器软件,支持smtp.pop3.imap. 本文主要根据官方文档Quick-Start guide整理而成. 一.下载 下载地址:http ...
- 给 K8s API “做减法”:阿里巴巴云原生应用管理的挑战和实践
作者 | 孙健波(天元) 阿里巴巴技术专家本文整理自 11 月 21 日社群分享,每月 2 场高质量分享,点击加入社群. 早在 2011 年,阿里巴巴内部便开始了应用容器化,当时最开始是基于 LXC ...
- C++ 类的前向声明的用法
我们知道C++的类应当是先定义,然后使用.但在处理相对复杂的问题.考虑类的组合时,很可能遇到俩个类相互引用的情况,这种情况称为循环依赖. 例如: class A { public: void f(B ...