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的上下文,资源很小,效率高 进程切换需要的资源很最大,效率很低 一个程序至少有一个进程,一个进程至 ...
随机推荐
- Python 條件式 Condition
除了重複使用Function,有時我們須檢查結果,依此判斷下個步驟該怎麼進行,如此就需要條件式 condition statement. if ... elif ... ese ( 或 if ... ...
- IDEA 运行后乱码问题解决
页面乱码: 在edit configurations->vm options 添加 -Dfile.encoding=UTF-8 调整idea文件编码格式,全部为 UTF-8 (file -> ...
- python-网络编程socket模块详解
# ### tcp 循环发消息 import socket # 1.创建一个对象 sk = socket.socket() sk.setsockopt(socket.SOL_SOCKET,socket ...
- Django2.1集成xadmin管理后台所遇到的错误集锦,解决填坑(二)
django默认是有一个admin的后台管理模块,但是丑,功能也不齐全,但是大神给我们已经集成好了xadmin后台,我们拿来用即可,但是呢,django已经升级到2.1版本了,xadmin貌似跟不上节 ...
- Linux-3.14.12内存管理笔记【伙伴管理算法(3)】
前面分析了伙伴管理算法的初始化,在切入分析代码实现之前,例行先分析一下其实现原理. 伙伴管理算法(也称之为Buddy算法),该算法将所有空闲的页面分组划分为MAX_ORDER个页面块链表进行管理,其中 ...
- 图像处理&计算机视觉中upscale,downscale的翻译理解
最近在看SAN网络(Second-order Attention Network for Single Image Super-Resolution)的论文,其中的Upscale module理解的不 ...
- django--通过jwt获取用户信息的两种方式
HTTP请求是无状态的,我们通常会使用cookie或session对其进行状态保持,cookie存储在客户端,容易被用户误删,安全性不高,session存储在服务端,在服务器集群情况下需要解决sess ...
- php 交换值
使用异或和第三参数比较 结果比较:(其中之一) 异或:执行时间在 0.035-0.085之间 第三参数:执行时间在 0.035-0.050之间 结论:使用第三参数执行效率更高/更稳定
- 终端中的 zsh 和 bash-魔法切换
常用ubuntu,这两个终端都装了,平时使用zsh比较方便,可是,有时候出现了问题,不知道是谁的问题时候,还要做一下切换操作的,怎么才能迅速切换呢? 要切换,首先要知道你现在使用的是什么,请看第一个命 ...
- window.onload在文档加载完成后执行
验证a .b两点疑惑: a.<script src="./main.js"></script>中的window.onload是在html全部加载完了才执行, ...