概述:

非并发: 1 程序由单个步骤序列构成  2 包含独立子任务的程序执行性能低

并发:  1 异步、高效  2 分解子任务、简化流程与逻辑

进程process:1 一个程序的执行实例  2 每个进程有自己的地址空间、内存、数据栈及辅助数据

线程 thread: 1 同一进程内,可被并行激活的控制流  2 共享相同上下文(空间地址、数据结构)

特点 1 便于信息共享和通信  2线程访问顺序差异会导致结果不一致(条件 race condition)

Python GIL 全局解释器锁:Global  Interpreter Lock

Python 代码由虚拟机(解释器主循环)控制

主循环同时只能有一个控制线程执行

多线程

_thread  Python已经不推荐使用

特点:  没有控制进程结束机制、只有一个同步原语(锁)、功能少于threading模块

.start_new_thread(function,args, **kwargs=None) 开始线程

threading 模块

.Thread 线程  构造:.Thread(target=目标函数,args=(参数,))

自定义Thread派生类,重写run方法逻辑

.start()  启动线程

.join()  要求主线程等待

.name  线程名称

.current_thread()  获取当前线程

同步原语:锁(效率不是很高,需要一定的逻辑加锁)

队列:

queue模块  Queue FIFO:.Queue(maxsize=0) 构造实例

.put(item, block=True, timeout=None)  放入数据项

.get(block=True, timeout=None)  获取数据项

.task_done()  声明当前队列任务处理完毕

.join()  队列所有项处理完毕前阻塞

LifoQueue LIFO

PriorityQeue 优先级队列

multiprocessing模块   充分运用多核、多CPU的计算能力,适用于计算密集型任务

concurrent.futures 模块   ThreadPoolExecutor、ProcessPoolExecutor

Python之并行编程笔记的更多相关文章

  1. Python之系统编程笔记

    概念 命令行工具. Shell 脚本.  系统管理 系统模块 sys   提供一组功能映射Python运行时的操作系统 os    提供跨平台可移植的操作系统编程接口   os.path 提供文件及目 ...

  2. python核心编程--笔记

    python核心编程--笔记 的解释器options: 1.1 –d   提供调试输出 1.2 –O   生成优化的字节码(生成.pyo文件) 1.3 –S   不导入site模块以在启动时查找pyt ...

  3. Python并行编程的几个要点

    一.基于线程的并行编程 如何使用Python的线程模块 如何定义一个线程 如何探测一个线程 如何在一个子类中使用线程 Lock和RLock实现线程同步 信号实现线程同步 条件(condition)实现 ...

  4. python并行编程

    一.编程思想 并行编程的思想:分而治之,有两种模型 1.MapReduce:将任务划分为可并行的多个子任务,每个子任务完成后合并得到结果 例子:统计不同形状的个数. 先通过map进行映射到多个子任务, ...

  5. Python并行编程(十四):异步编程

    1.基本概念 除了顺序执行和并行执行的模型以外,还有异步模型,这是事件驱动模型的基础.异步活动的执行模型可以只有一个单一的主控制流,能在单核心系统和多核心系统中运行. 在并发执行的异步模型中,许多任务 ...

  6. 《OpenCL异构并行编程实战》补充笔记散点,第一至四章

    ▶ 总体印象:适合 OpenCL 入门的书,有丰富的代码和说明,例子较为简单.先把 OpenCL 代码的基本结构(平台 → 设备 → 上下文 → 命令队列 → 创建缓冲区 → 读写缓冲区 → 编译代码 ...

  7. Python并行编程(二):基于线程的并行

    1.介绍 软件应用中使用最广泛的并行编程范例是多线程.通常一个应用有一个进程,分成多个独立的线程,并行运行.互相配合,执行不同类型的任务. 线程是独立的处理流程,可以和系统的其他线程并行或并发地执行. ...

  8. Python编程笔记二进制、字符编码、数据类型

    Python编程笔记二进制.字符编码.数据类型 一.二进制 bin() 在python中可以用bin()内置函数获取一个十进制的数的二进制 计算机容量单位 8bit = 1 bytes 字节,最小的存 ...

  9. Python中的并行编程速度

    这里主要想记录下今天碰到的一个小知识点:Python中的并行编程速率如何? 我想把AutoTool做一个并行化改造,主要目的当然是想提高多任务的执行速度.第一反应就是想到用多线程执行不同模块任务,但是 ...

随机推荐

  1. ZR#999

    ZR#999 解法: 一道计数题,看到要求必须 $ m $ 个标号,所有标号至少出现一次的方案. 很容易想到可以容斥,但容斥这个东西是一种很神奇的东西,你可以看出来一道题需要容斥,但你就是不知道怎么容 ...

  2. wireshark新手导航

    本篇教你如何开始使用Wireshark.开始本篇之前,请先已经安装完wireshark 3.0.0. 初始界面 启动wireshark,可以看到程序界面主要由以下几部分组成: 窗口标题-window ...

  3. JavaScript中获取html元素常用手法和区分

    对于许多前端开发项目来说,获取元素进行操作是必不可少的,例如tab标签,全屏切换,自动滚播等效果都需要通过获取节点元素来实现.下面我来总结下JavaScript最常用的4个Document对象中获取元 ...

  4. Java 面向对象(十一)

    常用类之集合 集合:就是用来存放数据的一个容器. 数组和集合的区别 (1)数组能存基本数据类型和引用类型:集合当中只能存放引用数据类型,直接放基本数据类型,也会自动帮你装箱(把基本数据类型转成对象), ...

  5. object_id()函数

    SQLServer数据库中,如果查询数据库中是否存在指定名称的索引或者外键约束等,经常会用到object_id('name','type')方法,做笔记如下: ? 语法:object_id('obje ...

  6. SpringBoot缓存技术

    一.SpringBoot整合Ehhcache 添加maven依赖 <dependency> <groupId>org.springframework.boot</grou ...

  7. python 设计模式之命令(Command)模式

    #写在前面 也了解了不少设计模式了,他们都有一个通病,那就是喜欢把简单的东西复杂化.比如在不同的类中加个第三者.哈哈哈,简单变复杂是有目的的,那就是降低耦合度,增强可维护性,提高代码复用性,使代码变得 ...

  8. logging日志管理

    日志:记录系统运行时的信息的(调试信息和异常信息) 基本用法: import logging logging.debug("这是一条调试信息") logging.info(&quo ...

  9. 解决Jmeter跨线程组取参数值难题!(还没试)

    来源 https://mp.weixin.qq.com/s/q7ArxwnX1sOfa9tfHouSBQ 如果你工作中已经在用jmeter做接口测试,或性能测试了,你可能会遇到一个麻烦.   那就是j ...

  10. LeetCode_101. Symmetric Tree

    101. Symmetric Tree Easy Given a binary tree, check whether it is a mirror of itself (ie, symmetric ...