并发:多个任务同一时间段进行

并行:多个任务同一时刻进行

线程的实现

线程模块

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中线程的使用的更多相关文章

  1. python中线程和进程(一)

    目录 进程和线程 Python中的线程 1. Thread类 2. 线程的启动 3. 线程的传参 4. 线程的属性和方法 5. daemon线程和non-daemon线程 6. join方法 7. 定 ...

  2. 操作系统/应用程序、操作中的“并发”、线程和进程,python中线程和进程(GIL锁),python线程编写+锁

    并发编程前言: 1.网络应用 1)爬虫 直接应用并发编程: 2)网络框架 django flask tornado 源码-并发编程 3)socketserver 源码-并发编程 2.运维领域 1)自动 ...

  3. python中线程和进程的简单了解

    python中线程和进程的简单了解   一.操作系统.应用程序 1.硬件:硬盘.cpu.主板.显卡........ 2.装系统(本身也是一个软件): 系统就是一个由程序员写出来的软件,该软件用于控制计 ...

  4. Python 中线程和进程

    目录 线程和进程 一. 什么是进程 / 线程 1. 引论 2. 线程 3. 进程 4. 区别 5. 使用 二. 多线程使用 1. 常用方法 2. 常用参数 3. 多线程的应用 3.1 重写线程法 3. ...

  5. python中线程2

    cpython中的GIL和pool GIL锁(全局解释器锁) 1.what? GIL是全局解释器锁,和普通锁加在数据上不同的是:GIL加在加在解释器上,是为了防止多个线程在同一时间执行python字节 ...

  6. python中线程和进程(二)

    目录 线程同步 Event Lock RLock Condition Barrier semaphore GIL 线程同步 线程同步,即线程之间协同工作,一个线程访问某些数据时,其他线程不能访问这些数 ...

  7. python中线程的知识点

    什么是线程? 程序的执行线路.每个进程默认有一条线程.线程包含了程序的具体步骤. 多线程就是一个进程中有除主线程(默认线程)外还有多个线程. 线程与进程的关系(进程包含线程,而线程依赖进程存在) 1. ...

  8. Python中线程与互斥锁

    了解之前我们先了解一下什么是多任务? 概念: 几个不同的事件在同时运行就是多任务, 这样的话, 我们有牵扯到了真的多任务, 假的多任务; 并行: 真的多任务, 通过电脑的核数来确定 并发: 假的多任务 ...

  9. python中线程、进程和协程的区别

    进程是资源分配的单位 线程是操作系统调度的单位 协程,又称微线程,纤程,协程的切换只是单纯的操作CPU的上下文,资源很小,效率高 进程切换需要的资源很最大,效率很低 一个程序至少有一个进程,一个进程至 ...

随机推荐

  1. 记录SqlServer安装后局域网无法连接

    ,如果安装的时候 已经选择 “混合模式(SQL Server 身份验证和Windows 身份验证)(M)”, 并且已经为 SQL Server 系统管理员分配了账户和密码 则不用重新配置. 配置方法如 ...

  2. mysql 安装(Linux、Ubuntu)

    1.检查系统是否已经安装过mysql rpm -qa | grep mysql 若出现类似于以上的结果则表明系统已经安装过mysql,执行以下命令卸载 rpm -e --nodeps mysql-co ...

  3. Ubuntu下Xilinx Linux内核编译问题,出现“缺少ncurses”libraries

    对官方提供的内核源码包进行解压缩,进入到内核目录,使用make menuconfig后,发现提示以下错误: *** Unable to find the ncurses libraries or th ...

  4. JVM-0-JVM知识体系

     

  5. go语言设计模式之observer

    observer.go package observer import ( "fmt" ) type Observer interface { Notify(string) } t ...

  6. C# 常用排序算法

    文章引用地址:https://www.cnblogs.com/fengyeqingxiang/archive/2019/06/14/11021852.html C#所有经典排序算法汇总   1 2 3 ...

  7. 算法问题实战策略 MEETINGROOM 附一份tarjan模板

    地址 https://algospot.com/judge/problem/read/MEETINGROOM 解答  2-sat 代码样例过了 没有ac. 我又没有正确代码对拍..... 已确认是输出 ...

  8. ASP.NET Core 模型验证的一个小小坑

    今天在我们的一个项目中遇到一个 asp.net core 模型验证(model validation)的小问题.当模型属性的类型是 bool ,而提交上来的该属性值是 null ,asp.net co ...

  9. Python连载43-current中的map函数、xml文件

    一.current中的map函数 1.map(fn,*iterable,timeout=None) (1)跟map函数相类似(2)函数需要异步执行(3)timeout代表超时时间 (4)map和sub ...

  10. MNIST 例程源码分析 TensorFlow 从入门到精通

    按照上节步骤, TensorFlow 默认安装在 /usr/lib/python/site-packages/tensorflow/ (也有可能是 /usr/local/lib……)下,查看目录结构: ...