zoukankan      html  css  js  c++  java
  • python 线程条件变量锁

    # _*_coding:utf-8_*_
    # author:leo
    # date:
    # email:alplf123@163.com
    import queue, threading
    
    
    class Worker(threading.Thread):
    
        def __init__(self):
            threading.Thread.__init__(self)
            self.lock = threading.Lock()
            self.con1 = threading.Condition(self.lock)
            self.con2 = threading.Condition(self.lock)
            self.event = threading.Event()# 也可以达到类似的效果,但是不够灵活,运用的场景不够丰富,此类也是线程安全
            self.queque = queue.Queue()
            print(self.event.is_set())
        
        def run(self):
    
            threading.Thread(target=self.customer).start()
            threading.Thread(target=self.producter).start()
    
        def producter(self):
            with self.con1:
                for a in range(100):
                    print('productor put:', str(a))
                    self.queque.put(a)
                    self.con2.notify()
                    self.con1.wait() #使用wait 必须保证当前是安全的 必须得到锁
                    print('recevie sigal from con1 producting...')
                self.con2.notify_all()
        def customer(self):
            with self.con2:
                while True:
    
                    self.con2.wait()
                    print('recevie signal from con2 customer....')
                    if self.queque.empty():
                        break
                    result = self.queque.get()
                    if result is not None:
                        print('customer get:', str(result))
                        self.con1.notify()
    
    t = Worker()
    t.start()
    t.join()
  • 相关阅读:
    JSP 学习笔记1
    XML scriptlet 连接数据库
    JSP 定义行列数表单创建表格
    JSP_01
    JS创建表格完整
    04-基本的mysql语句
    03-MySql安装和基本管理
    02-数据库概述
    01-MySql的前戏
    爬虫系列
  • 原文地址:https://www.cnblogs.com/alplf123/p/8542207.html
Copyright © 2011-2022 走看看