zoukankan      html  css  js  c++  java
  • python 多线程编程

    一)线程基础

    1、创建线程:

    thread模块提供了start_new_thread函数,用以创建线程。start_new_thread函数成功创建后还能够对其进行操作。

    其函数原型:

        start_new_thread(function,atgs[,kwargs])

    其參数含义例如以下:

        function: 在线程中运行的函数名

        args:元组形式的參数列表。

        kwargs: 可选參数,以字典的形式指定參数

    方法一:通过使用thread模块中的函数创建新线程。

    方法二:通过继承threading.Thread创建线程

    方法三:使用threading.Thread直接在线程中执行函数。

    二)Thread对象中的经常用法:

    1、isAlive方法:

    2、join方法:

    原型:join([timeout]) 

        timeout: 可选參数,线程执行的最长时间

    3、线程名:

     4、setDaemon方法

    在脚本执行的过程中有一个主线程,假设主线程又创建了一个子线程,那么当主线程退出时,会检验子线程是否完毕。假设子线程未完毕,则主线程会在等待子线程完毕后退出。

    当须要主线程退出时,无论子线程是否完毕都随主线程退出,则能够使用Thread对象的setDaemon方法来设置。

    三)线程同步

    1.简单的线程同步

    使用Thread对象的Lock和RLock能够实现简单的线程同步。对于假设须要每次仅仅有一个线程操作的数据,能够将操作过程放在acquire方法和release方法之间。如:

     

    假设将lock.acquire()和lock.release(),lock = threading.Lock()删除后保存执行脚本,结果将是输出10个30。30是x的终于值,因为x是全局变量,每一个线程对其操作后进入休眠状态,在线程休眠的时候,python解释器就执行了其它的线程而是x的值添加。当全部线程休眠结束后,x的值已被全部线改动为了30,因此输出全部为30。

    2、使用条件变量保持线程同步。

    Python的Condition对象提供了对复制线程同步的支持。使用Condition对象能够在某些事件触发后才处理数据。Condition对象除了具有acquire方法和release的方法外,还有wait方法、notify方法、notifyAll方法等用于条件处理。

    线程间通信:

    Event对象用于线程间的相互通信。他提供了设置信号、清除信宏、等待等用于实现线程间的通信。

    1、设置信号。Event对象使用了set()方法后,isSet()方法返回真。

    2、清除信号。使用Event对象的clear()方法后,isSet()方法返回为假。

    3、等待。当Event对象的内部信号标志为假时,则wait()方法一直等到其为真时才返回。还能够向wait传递參数,设定最长的等待时间。

  • 相关阅读:
    Algorithm Gossip (48) 上三角、下三角、对称矩阵
    .Algorithm Gossip (47) 多维矩阵转一维矩阵
    Algorithm Gossip (46) 稀疏矩阵存储
    Algorithm Gossip (45) 费氏搜寻法
    Algorithm Gossip (44) 插补搜寻法
    Algorithm Gossip (43) 二分搜寻法
    Algorithm Gossip (42) 循序搜寻法(使用卫兵)
    Algorithm Gossip (41) 基数排序法
    Algorithm Gossip (40) 合并排序法
    AlgorithmGossip (39) 快速排序法 ( 三 )
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3994463.html
Copyright © 2011-2022 走看看