• Python 多线程 Condition 的使用


    Condition

    Condition(条件变量)通常与一个锁关联。需要在多个Contidion中共享一个锁时,可以传递一个Lock/RLock实例给构造方法,否则它将自己生成一个RLock实例。

    可以认为,除了Lock带有的锁定池外,Condition还包含一个等待池,池中的线程处于状态图中的等待阻塞状态,直到另一个线程调用notify()/notifyAll()通知;得到通知后线程进入锁定池等待锁定。

    构造方法: 
    Condition([lock/rlock])

    实例方法: 
    acquire([timeout])/release(): 调用关联的锁的相应方法。 
    wait([timeout]): 调用这个方法将使线程进入Condition的等待池等待通知,并释放锁。使用前线程必须已获得锁定,否则将抛出异常。 
    notify(): 调用这个方法将从等待池挑选一个线程并通知,收到通知的线程将自动调用acquire()尝试获得锁定(进入锁定池);其他线程仍然在等待池中。调用这个方法不会释放锁定。使用前线程必须已获得锁定,否则将抛出异常。 
    notifyAll(): 调用这个方法将通知等待池中所有的线程,这些线程都将进入锁定池尝试获得锁定。调用这个方法不会释放锁定。使用前线程必须已获得锁定,否则将抛出异常。

    常见使用:

     1 #coding=utf-8
     2 __author__ = 'Bruce_Zhou'
     3 import threading
     4 import time
     5 import datetime
     6 num = 0
     7 con = threading.Condition()
     8 
     9 class Gov(threading.Thread):
    10     def __init__(self):
    11         super(Gov, self).__init__()
    12 
    13     def run(self):
    14         global num
    15         con.acquire()
    16         while True:
    17             print "开始拉升股市"
    18             num += 1
    19             print "拉升了" + str(num) + "个点"
    20             time.sleep(2)
    21             if num == 5:
    22                 print "暂时安全!"
    23                 con.notify()
    24                 con.wait()
    25         con.release()
    26 
    27 
    28 class Consumers(threading.Thread):
    29     def __init__(self):
    30         super(Consumers, self).__init__()
    31 
    32     def run(self):
    33         global num
    34         con.acquire()
    35         while True:
    36             if num > 0:
    37                 print "开始打压股市"
    38                 num -= 1
    39                 print "打压了" + str(num) + "个点"
    40                 time.sleep(2)
    41                 if num == 0:
    42                     print "你妹的!天台在哪里!"
    43                     con.notify()
    44                     con.wait()
    45         con.release()
    46 
    47 if __name__ == '__main__':
    48     p = Gov()
    49     c = Consumers()
    50     p.start()
    51     c.start()
  • 相关阅读:
    下拉复选框
    tp mysql 去重
    前端面试准备2----Javascript中的Undefined和null小结
    前端面试准备1----JS中eval()解析和为什么不要使用eval
    点击一个按钮触发文件选择
    解决JS在url中传递参数时参数包含中文乱码的问题
    asp.net文件/大文件上传需要配置的项目整理
    网页元素位置、鼠标事件位置信息小结
    DOM事件总结
    学习require.js中的一些总结
  • 原文地址:https://www.cnblogs.com/zj1111184556/p/4612470.html
Copyright © 2020-2023  润新知