1. 首页
  2. 数据分析

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

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

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

转自:http://www.cnblogs.com/holbrook/archive/2012/03/01/2376408.html

关于python您还知道:

【学习】在Python中对MySQL中的数据进行可视化

【工具】Python正则表达式的七个使用范例

【翻译】数据科学的多语言协作编程方式:Python + R + SQL

原文始发于微信公众号(PPV课数据科学社区):python多线程编程(1): python对多线程的支持

原创文章,作者:ppvke,如若转载,请注明出处:http://www.ppvke.com/archives/11980

联系我们

4000-51-9191

在线咨询:点击这里给我发消息

工作时间:周一至周五,9:30-18:30,节假日休息