zoukankan      html  css  js  c++  java
  • 多线程之生产者和消费者模式

    思路:

    需要定义一个全局变量,供生产者和消费者使用

    1、对于生产者来说:x>0 wait(print) ,否则x+1(使用for循环)

    2、对于消费者来说:x==0 wait(print),否则x-1(使用for循环)

    3、生产者和消费者分别是一个class

     1 __author__ = 'anna'
     2 # coding: utf-8
     3 
     4 import threading
     5 x = 0  # 定义变量x
     6 
     7 
     8 class Producer(threading.Thread):
     9 
    10     def __init__(self, name):
    11         threading.Thread.__init__(self)
    12         self.name = name
    13 
    14     def run(self):
    15         # global语句可以声明一个或多个变量为全局变量,该声明仅仅在当前代码块中有效,除此之外,没有办法访问全局变量
    16         global x
    17         threadLock.acquire()
    18         if x > 0:
    19             print("我已经有东西了,再等等呗!")
    20         else:
    21             for i in range(6):
    22                 x += 1
    23                 print("%s正在生产,第%d个" % (self.name, x))
    24         threadLock.release()
    25 
    26 
    27 class Consumer(threading.Thread):
    28 
    29     def __init__(self, name):
    30         threading.Thread.__init__(self)
    31         self.name = name
    32 
    33     def run(self):
    34         global x
    35         threadLock.acquire()
    36         if x == 0:
    37             print("我没有东西了,我需要生产!")
    38         else:
    39             for i in range(5):
    40                 x -= 1
    41                 print("%s正在消费,第%d个" % (self.name, x))
    42         threadLock.release()
    43 
    44 threadLock = threading.Lock()
    45 p1 = Producer('我的生产者线程')
    46 p1.start()
    47 p1.join()  # 需要加上join方法,因为只有先生产才能消费,加上join方法不会导致错乱
    48 
    49 c1 = Consumer('我的消费者线程')
    50 c1.start()
    51 c1.join()
  • 相关阅读:
    Python运算符
    Python中的变量
    Chapter 4. Working with Key/Value Pairs
    Chapter 3. Programming with RDDs
    python常见的特异点
    18.天知道练习
    17.vue+axios搭配使用
    16.axios基本使用
    15.记事本练习
    14.v-model指令
  • 原文地址:https://www.cnblogs.com/annatest/p/13357107.html
Copyright © 2011-2022 走看看