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. 多线程编程(1): python对多线程的支持

    python多线程编程(1): python对多线程的支持 前面介绍过多线程的基本概念,理解了这些基本概念,掌握python多线程编程就比较容易了. 在开始之前,首先要了解一下python对多线程的支 ...

  2. 【2021最新版】Python 并发编程实战,用多线程、多进程、多协程加速程序运行

    [2021最新版]Python 并发编程实战,用多线程.多进程.多协程加速程序运行 视频地址:https://www.bilibili.com/video/BV1bK411A7tV/ P1 Pytho ...

  3. python游戏编程入门 免费-python游戏编程入门 python游戏编程入门课

    python游戏编程入门 python游戏编程入门课 什么是python游戏编程入门?首先我们需要认识什么是Python Python既是一个软件工具包,也是一种语言.Python软件包包含了一个名为 ...

  4. 5天玩转C#并行和多线程编程 —— 第五天 多线程编程大总结

    5天玩转C#并行和多线程编程 -- 第五天 多线程编程大总结 5天玩转C#并行和多线程编程系列文章目录 5天玩转C#并行和多线程编程 -- 第一天 认识Parallel 5天玩转C#并行和多线程编程 ...

  5. python多线程编程_python多线程编程(1): python对多线程的支持

    前面介绍过多线程的基本概念,理解了这些基本概念,掌握python多线程编程就比较容易了. 在开始之前,首先要了解一下python对多线程的支持. 虚拟机层面 Python虚拟机使用GIL(Global ...

  6. python并发编程之多进程、多线程、异步和协程

    转载 自 tyomcat: https://www.cnblogs.com/tyomcat/p/5486827.html 一.多线程 多线程就是允许一个进程内存在多个控制权,以便让多个函数同时处于激活 ...

  7. 自学python单片机编程-用Python语言控制单片机

    早年,虽然Python是一款比较容易上手的脚本语言,而且有强大的社区支持,一些非计算机专业领域的人都选它作为入门语言.遗憾的是,它不能实现一些非常底层的操控,所以在硬件领域并不起眼.本文引用地址:ht ...

  8. python语言编程入门-Python编程从入门到精通 PDF 下载

    相关截图: 资料简介: 本书循序渐进.由浅入深地详细讲解了Python语言开发技术,并通过具体实例演练了各个知识点的具体使用流程.全书共23章,其中第1-2章是基础知识部分,讲解了Python语言开发 ...

  9. 自学python单片机编程-用Python语言控制单片机-可编程逻辑-与非网

    早年,虽然 Python 是一款比较容易上手的脚本语言,而且有强大的社区支持,一些非计算机专业领域的人都选它作为入门语言.遗憾的是,它不能实现一些非常底层的操控,所以在硬件领域并不起眼. 然而今时不同 ...

最新文章

  1. 二十岁出头的时候上,你一无所有,你拥有一切
  2. matlab的帮助命令是英文的,4 Matlab 帮助系统
  3. 继续昨日计划: 2022-2-16
  4. vc6.0 简易的tcp网络讲解(二)
  5. php如何查找业务bug,一般从php网站找bug怎么开始
  6. (最小生成树)Truck History --POJ -- 1789
  7. 区块链项目-Lisk
  8. java如何把string转化E_java将string转为代码执行
  9. Spring MVC –自定义RequestMappingHandlerMapping
  10. 前端如何查看音频的长度_Android音频可视化
  11. 旋转链表 Java,leetcode 旋转链表 Java
  12. 配置React Native环境
  13. 手把手带你搭建Linux环境(保姆级,包含vivado与petalinux)
  14. pwm控制直流电机转速流程图_直流电机PWM控制原理
  15. android 手机超频降频秘籍
  16. java程序如何解代数方程_基于代数方程库Algebra.js解二元一次方程功能示例
  17. 程序员分级-八个等级
  18. 拼多多Temu如何批量养国外买家账号进行拉新?
  19. 数据线的问题--极度的悲催
  20. LTS = Long Term Support:长期支持版本

热门文章

  1. ### 阅读之痕-2013/11
  2. 普里姆从不同顶点出发_来自三个不同聚类分析的三个不同教训数据科学的顶点...
  3. spring中@Inject和@Autowired的区别?分别在什么条件下使用呢?
  4. 如何修复会话固定漏洞_PHP安全漏洞:会话劫持,跨站点脚本,SQL注入以及如何修复它们...
  5. 了解如何在20分钟内创建您的第一个Angular应用
  6. 编程程序的名称要记住吗_学习编程时要记住的5件事
  7. 基于MVC的网站和在线教育系统
  8. window使用技巧记录
  9. 团队作业3——需求改进系统设计
  10. 微信小程序开发demo-地图定位