zoukankan      html  css  js  c++  java
  • 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/,本站文章会陆续迁移过去
    

      

  • 相关阅读:
    EasyUI combogrid 赋多个值
    EasyUI 打印当前页
    EasyUI 获取行ID,符合条件的添加样式
    JS 调用存储过程传递参数
    彻底解决Request Too Long的问题
    SQL处理XML
    DataTable排序
    EasyUI 动态生成列加分页
    SQL2012 分页(最新)
    计算数据库中各个表的数据量和每行记录所占用空间
  • 原文地址:https://www.cnblogs.com/aniuzaixian/p/8118191.html
Copyright © 2011-2022 走看看