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个

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

  • 相关阅读:
    Entity Framework简介
    Java学习笔记-spring-Bean作用于
    Java学习笔记-spring-Bean实例化
    第四章--第二节:类
    为什么越来越少的人用jQuery
    年入50万的方法
    第一节--项目介绍和初始化
    第四章--第一节:函数
    第一节--API爬虫--环境设置与课程简介
    第三章--第六节:元祖
  • 原文地址:https://www.cnblogs.com/R-bear/p/7031722.html
Copyright © 2011-2022 走看看