前面介绍过多线程的基本概念,理解了这些基本概念,掌握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创建和启动线程。

python多线程编程_python多线程编程(1): python对多线程的支持相关推荐

  1. 视频教程-快速入门Python基础教程_Python基础知识大全-Python

    快速入门Python基础教程_Python基础知识大全 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥99.00 立即 ...

  2. 视频教程-快速入门Python基础教程_Python基础进阶视频-Python

    快速入门Python基础教程_Python基础进阶视频 十余年计算机技术领域从业经验,在中国电信.盛大游戏等多家五百强企业任职技术开发指导顾问,国内IT技术发展奠基人之一. 杨千锋 ¥199.00 立 ...

  3. python多线程调度_python并发编程之进程、线程、协程的调度原理(六)

    进程.线程和协程的调度和运行原理总结. 系列文章 进程.线程的调度策略介绍 linux中的进程主要有三种调度策略: 优先级调度:将进程分为普通进程和实时进程: 先进先出(队列)调度:实时进程先创建的先 ...

  4. python 网络编程_Python网络编程(六)

    回顾 在<Python进阶记录之网络编程(五)>中,我们介绍了如何利用TCP服务端和客户端实现一个简单的点对点聊天,区别基于TCP协议和UDP协议的不同之处.今天我们讲一下如何利用多进程和 ...

  5. python 多进程并发_python并发编程之多进程

    一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.P ...

  6. python udp通信_Python网络编程(三)

    回顾 在<Python进阶记录之网络编程(二)>中,我们介绍了UDP端口号的基本概念和作用以及Python中UDP服务端的端口绑定和简单创建.今天我们利用UDP server和UDP cl ...

  7. python 窗体编程_python窗体编程

    广告关闭 云服务器1核2G首年99年,还有多款热门云产品满足您的上云需求 python里的图形化界面(gui)模块主要有tkinter(python自带).pyqt.wxpython,我们这节主要讲解 ...

  8. python高并发编程_Python——并发编程

    开始说并发编程之前,最好有一定的底层知识积累,这里我把需要的知识总结了一下,如果看下面的有不理解的可以看一下:https://www.cnblogs.com/kuxingseng95/p/941820 ...

  9. python事件驱动编程_Python事件驱动编程

    事件驱动的编程侧重于事件.最终,程序的流程取决于事件.到目前为止,我们处理顺序或并行执行模型,但具有事件驱动编程概念的模型称为异步模型.事件驱动的编程取决于始终侦听新传入事件的事件循环.事件驱动编程的 ...

  10. python socket编程_Python Socket编程实现网络编程

    对于有经验的开发人员来说,掌握的编程语言应该是不少的.在这些编程语言中,网络编程的应用时必不可少的.其中Python也是这样的编程语言.我们今天将会在这里为大家详细介绍一下Python Socket编 ...

最新文章

  1. 【超级大转载】常用的D3D变换相关函数
  2. Springboot 2.返回cookies信息的get接口开发 和 带cookis去请求
  3. Windows7 IIS 500-内部服务器错误的解决方法
  4. MTCNN人脸及特征点检测---代码应用详解c++
  5. 4怎样判断动作是否执行_公众号交易时要怎样去判断粉丝是否真实的呢?
  6. 武汉船舶职业技术学院计算机分数线,武汉船舶职业技术学院录取分数线2021是多少分(附历年录取分数线)...
  7. 硅谷的高科技公司与“抵消战略”
  8. WordPress主题 WebStack导航主题
  9. Linux学习笔记---使用tftp命令下载文件
  10. 将 Java Spring Framework 应用程序迁移到 Windows Azure
  11. 刚买的win8.1电脑 求常用的软件推荐?
  12. word在html中预览,在网页中预览word和excel
  13. 通过一个html简单实现下载功能
  14. Bing必应来帮忙之-查询虚拟主机服务器上的同IP网站
  15. Win10+1050Ti配置Tensorflow教程
  16. 约翰霍普金斯大学计算机专业,约翰霍普金斯大学计算机科学专业介绍_计算机科学专业排名及就业方向和前景-小站留学...
  17. python和jsp哪个好学_Python,Java和JavaScript,学哪个编程语言好就业?
  18. VMware安装Windows11专业版详细教程
  19. ArcGIS 地图切图系列之(三)MapReduce 实现
  20. Nachos系统简介

热门文章

  1. 黄哲铿:妙用“缓存”,应对亿级流量峰值(文末赠书)
  2. SpringBoot2.0 基础案例(07):集成Druid连接池,配置监控界面
  3. 不要放弃,你的梦想是这个世界上最伟大的事情。
  4. 三个ImageView 实现无线轮播 方法
  5. RDD之四:Value型Transformation算子
  6. Vertx JDBC 批处理
  7. 操作系统---进程篇
  8. libcurl 多线程使用注意事项 - Balder~专栏 - 博客频道 - CSDN.NET
  9. Java基础之理解Annotation
  10. 微软IIS6漏洞:服务器敏感信息易被窃