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

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

线程的实现

线程模块

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. Python 條件式 Condition

    除了重複使用Function,有時我們須檢查結果,依此判斷下個步驟該怎麼進行,如此就需要條件式 condition statement. if ... elif ... ese ( 或 if ... ...

  2. IDEA 运行后乱码问题解决

    页面乱码: 在edit configurations->vm options 添加 -Dfile.encoding=UTF-8 调整idea文件编码格式,全部为 UTF-8 (file -> ...

  3. python-网络编程socket模块详解

    # ### tcp 循环发消息 import socket # 1.创建一个对象 sk = socket.socket() sk.setsockopt(socket.SOL_SOCKET,socket ...

  4. Django2.1集成xadmin管理后台所遇到的错误集锦,解决填坑(二)

    django默认是有一个admin的后台管理模块,但是丑,功能也不齐全,但是大神给我们已经集成好了xadmin后台,我们拿来用即可,但是呢,django已经升级到2.1版本了,xadmin貌似跟不上节 ...

  5. Linux-3.14.12内存管理笔记【伙伴管理算法(3)】

    前面分析了伙伴管理算法的初始化,在切入分析代码实现之前,例行先分析一下其实现原理. 伙伴管理算法(也称之为Buddy算法),该算法将所有空闲的页面分组划分为MAX_ORDER个页面块链表进行管理,其中 ...

  6. 图像处理&计算机视觉中upscale,downscale的翻译理解

    最近在看SAN网络(Second-order Attention Network for Single Image Super-Resolution)的论文,其中的Upscale module理解的不 ...

  7. django--通过jwt获取用户信息的两种方式

    HTTP请求是无状态的,我们通常会使用cookie或session对其进行状态保持,cookie存储在客户端,容易被用户误删,安全性不高,session存储在服务端,在服务器集群情况下需要解决sess ...

  8. php 交换值

    使用异或和第三参数比较 结果比较:(其中之一) 异或:执行时间在 0.035-0.085之间 第三参数:执行时间在 0.035-0.050之间 结论:使用第三参数执行效率更高/更稳定

  9. 终端中的 zsh 和 bash-魔法切换

    常用ubuntu,这两个终端都装了,平时使用zsh比较方便,可是,有时候出现了问题,不知道是谁的问题时候,还要做一下切换操作的,怎么才能迅速切换呢? 要切换,首先要知道你现在使用的是什么,请看第一个命 ...

  10. window.onload在文档加载完成后执行

    验证a .b两点疑惑: a.<script src="./main.js"></script>中的window.onload是在html全部加载完了才执行, ...