python多线程编程(1): python对多线程的支持
From: http://www.cnblogs.com/holbrook/archive/2012/03/01/2376408.html
前面介绍过多线程的基本概念,理解了这些基本概念,掌握python多线程编程就比较容易了。
在开始之前,首先要了解一下python对多线程的支持。
虚拟机层面
Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,暂时无法利用多处理器的优势。
语言层面
在语言层面,Python对多线程提供了很好的支持,Python中多线程相关的模块包括:thread,threading,Queue。可以方便地支持创建线程、互斥锁、信号量、同步等特性。
thread:多线程的底层支持模块,一般不建议使用。
threading:对thread进行了封装,将一些线程的操作对象化,提供下列类:
Thread 线程类
Timer与Thread类似,但要等待一段时间后才开始运行
Lock 锁原语
RLock 可重入锁。使单线程可以再次获得已经获得的锁
Condition 条件变量,能让一个线程停下来,等待其他线程满足某个“条件”
Event 通用的条件变量。多个线程可以等待某个事件发生,在事件发生后,所有的线程都被激活
Semaphore为等待锁的线程提供一个类似“等候室”的结构
BoundedSemaphore 与semaphore类似,但不允许超过初始值
Queue:实现了多生产者(Producer)、多消费者(Consumer)的队列,支持锁原语,能够在多个线程之间提供很好的同步支持。提供的类:
Queue队列
LifoQueue后入先出(LIFO)队列
PriorityQueue 优先队列
其中Thread类是你主要的线程类,可以创建进程实例。该类提供的函数包括:
getName(self) 返回线程的名字
isAlive(self) 布尔标志,表示这个线程是否还在运行中
isDaemon(self) 返回线程的daemon标志
join(self, timeout=None) 程序挂起,直到线程结束,如果给出timeout,则最多阻塞timeout秒
run(self) 定义线程的功能函数
setDaemon(self, daemonic) 把线程的daemon标志设为daemonic
setName(self, name) 设置线程的名字
start(self) 开始线程执行
第三方支持
如果你特别在意性能,还可以考虑一些“微线程”的实现:
Stackless Python:Python的一个增强版本,提供了对微线程的支持。微线程是轻量级的线程,在多个线程间切换所需的时间更多,占用资源也更少。
greenlet:是 Stackless 的副产品,其将微线程称为 “tasklet” 。tasklet运行在伪并发中,使用channel进行同步数据交换。而”greenlet”是更加原始的微线程的概念,没有调度。你可以自己构造微线程的调度器,也可以使用greenlet实现高级的控制流。
下一节,将开始用python创建和启动线程。
本人已在github上用Jekyll建立了新的博客:http://thinkinside.tk/,本站文章会陆续迁移过去
python多线程编程(1): python对多线程的支持相关推荐
- 多线程编程(1): python对多线程的支持
python多线程编程(1): python对多线程的支持 前面介绍过多线程的基本概念,理解了这些基本概念,掌握python多线程编程就比较容易了. 在开始之前,首先要了解一下python对多线程的支 ...
- 【2021最新版】Python 并发编程实战,用多线程、多进程、多协程加速程序运行
[2021最新版]Python 并发编程实战,用多线程.多进程.多协程加速程序运行 视频地址:https://www.bilibili.com/video/BV1bK411A7tV/ P1 Pytho ...
- python游戏编程入门 免费-python游戏编程入门 python游戏编程入门课
python游戏编程入门 python游戏编程入门课 什么是python游戏编程入门?首先我们需要认识什么是Python Python既是一个软件工具包,也是一种语言.Python软件包包含了一个名为 ...
- 5天玩转C#并行和多线程编程 —— 第五天 多线程编程大总结
5天玩转C#并行和多线程编程 -- 第五天 多线程编程大总结 5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 -- 第一天 认识Parallel 5天玩转C#并行和多线程编程 ...
- python多线程编程_python多线程编程(1): python对多线程的支持
前面介绍过多线程的基本概念,理解了这些基本概念,掌握python多线程编程就比较容易了. 在开始之前,首先要了解一下python对多线程的支持. 虚拟机层面 Python虚拟机使用GIL(Global ...
- python并发编程之多进程、多线程、异步和协程
转载 自 tyomcat: https://www.cnblogs.com/tyomcat/p/5486827.html 一.多线程 多线程就是允许一个进程内存在多个控制权,以便让多个函数同时处于激活 ...
- 自学python单片机编程-用Python语言控制单片机
早年,虽然Python是一款比较容易上手的脚本语言,而且有强大的社区支持,一些非计算机专业领域的人都选它作为入门语言.遗憾的是,它不能实现一些非常底层的操控,所以在硬件领域并不起眼.本文引用地址:ht ...
- python语言编程入门-Python编程从入门到精通 PDF 下载
相关截图: 资料简介: 本书循序渐进.由浅入深地详细讲解了Python语言开发技术,并通过具体实例演练了各个知识点的具体使用流程.全书共23章,其中第1-2章是基础知识部分,讲解了Python语言开发 ...
- 自学python单片机编程-用Python语言控制单片机-可编程逻辑-与非网
早年,虽然 Python 是一款比较容易上手的脚本语言,而且有强大的社区支持,一些非计算机专业领域的人都选它作为入门语言.遗憾的是,它不能实现一些非常底层的操控,所以在硬件领域并不起眼. 然而今时不同 ...
最新文章
- 二十岁出头的时候上,你一无所有,你拥有一切
- matlab的帮助命令是英文的,4 Matlab 帮助系统
- 继续昨日计划: 2022-2-16
- vc6.0 简易的tcp网络讲解(二)
- php如何查找业务bug,一般从php网站找bug怎么开始
- (最小生成树)Truck History --POJ -- 1789
- 区块链项目-Lisk
- java如何把string转化E_java将string转为代码执行
- Spring MVC –自定义RequestMappingHandlerMapping
- 前端如何查看音频的长度_Android音频可视化
- 旋转链表 Java,leetcode 旋转链表 Java
- 配置React Native环境
- 手把手带你搭建Linux环境(保姆级,包含vivado与petalinux)
- pwm控制直流电机转速流程图_直流电机PWM控制原理
- android 手机超频降频秘籍
- java程序如何解代数方程_基于代数方程库Algebra.js解二元一次方程功能示例
- 程序员分级-八个等级
- 拼多多Temu如何批量养国外买家账号进行拉新?
- 数据线的问题--极度的悲催
- LTS = Long Term Support:长期支持版本
热门文章
- ### 阅读之痕-2013/11
- 普里姆从不同顶点出发_来自三个不同聚类分析的三个不同教训数据科学的顶点...
- spring中@Inject和@Autowired的区别?分别在什么条件下使用呢?
- 如何修复会话固定漏洞_PHP安全漏洞:会话劫持,跨站点脚本,SQL注入以及如何修复它们...
- 了解如何在20分钟内创建您的第一个Angular应用
- 编程程序的名称要记住吗_学习编程时要记住的5件事
- 基于MVC的网站和在线教育系统
- window使用技巧记录
- 团队作业3——需求改进系统设计
- 微信小程序开发demo-地图定位