zoukankan      html  css  js  c++  java
  • python-多线程3-生产者消费者

    '''生产者和消费者'''
    '''
    用python写一个多线程的生产者和消费者
    生产者x x>0,有东西,print(不生产) x=0,没东西,print(生产) for循环
    消费者x x=0,没东西,print(不消费) x>0,有东西,print(消费) for循环
    分别封装成class
    '''
    
    import threading
    
    class Producer(threading.Thread):
        def __init__(self,name):
            threading.Thread.__init__(self)
            self.name = name
        
        def run(self):
            global x
            
            tt.acquire()
            
            if x>0:
                #print("我已经生产完毕了,你随意去吧")
                tt.wait()
            else:
                for i in range(5):
                    x=x+1
                    print("%s在生产中,第%d个"%(self.name,x))#线程的名字
            tt.release()
        
    
    
    
    class Consumer(threading.Thread):
        def __init__(self,name):
            threading.Thread.__init__(self)
            self.name = name
            
        def run(self):
            global x
            
            tt.acquire()
            
            if x==0:
                #print("没东西了")
                tt.wait()
            else:
                for i in range(5):
                    x=x-1
                    print("%s在消费中,第%d个"%(self.name,x+1))
            tt.release()
    
    x = 0
    
    #tt = threading.Lock()
    tt = threading.Condition()
    
    p = Producer("producer")
    
    
    c = Consumer("consumer")
    
    
    p.start()
    c.start()
    
    p.join()
    c.join()

    结果:

    producer在生产中,第1个
    producer在生产中,第2个
    producer在生产中,第3个
    producer在生产中,第4个
    producer在生产中,第5个
    consumer在消费中,第5个
    consumer在消费中,第4个
    consumer在消费中,第3个
    consumer在消费中,第2个
    consumer在消费中,第1个

    好难........搞晕了

  • 相关阅读:
    Mac 安装 Python3
    在push的时候发生崩溃信息
    Swift3.0 和 Swift3.0.2的区别
    01- 简单值
    @objc || private || 按钮的点击事件
    extension的作用
    swift3.0中使用代码添加选中图片
    OC-创建瀑布流
    springboot项目控制台日志不是彩色的原因
    更改docker里mysql的字符编码
  • 原文地址:https://www.cnblogs.com/R-bear/p/7031722.html
Copyright © 2011-2022 走看看