Python多线程threading模块调用后运行没动静。大神帮忙看看问题在哪吧

新来小小小菜鸟 2020-01-03 06:01:31

import threading
import time

products=[]
condition = threading.Condition()
class Consumer(threading.Thread):
def consume(self):
global condition
global products
condition.acquire()
if len(products)==0:
condition.wait()
print('消费提醒:没有产品去消费了')
products.pop()
print('消费者提醒:消费1个产品')
print('消费者提醒:还能消费的产品数为'+str(len(products)))
condition.notify()
condition.release()
def run(self):
for i in range(0,20):
time.sleep(4)
self.consume()
class Producer(threading.Thread):
def produce(self):
global condition
global products
condition.acquire()
if len(products)==10:
condition.wait()
print('生产者提醒:生成的产品数为'+str(len(products)))
print('生产者提醒:停止生产!')
products.append(1)
print('生产者提醒:产品总数为'+str(len(products)))
condition.notify()
condition.release()
def run(self):
for i in range(0,20):
time.sleep(1)
self.produce()
producer=Producer()
consumer=Consumer()
consumer.start()
producer.start()
producer.join()
consumer.join()

正常运行输出应该是下面的样子:

生产者提醒:产品总数为1
生产者提醒:产品总数为2
生产者提醒:产品总数为3
消费者提醒:消费1个产品
消费者提醒:还能消费的产品数为2
生产者提醒:产品总数为3
生产者提醒:产品总数为4
生产者提醒:产品总数为5
生产者提醒:产品总数为6
消费者提醒:消费1个产品
消费者提醒:还能消费的产品数为5
生产者提醒:产品总数为6
生产者提醒:产品总数为7
生产者提醒:产品总数为8
生产者提醒:产品总数为9
消费者提醒:消费1个产品
消费者提醒:还能消费的产品数为8
生产者提醒:产品总数为9
生产者提醒:产品总数为10
消费者提醒:消费1个产品
消费者提醒:还能消费的产品数为9
生产者提醒:产品总数为9
生产者提醒:停止生产!
生产者提醒:产品总数为10
...


求大神帮忙指出问题帮忙解决下。谢谢了
...全文
481 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
谢谢冰风大神
看来我基础还是要继续多练练
冰风漫天 2020-01-04
  • 打赏
  • 举报
回复
代码做下修改: 1.生产者应该有个else,否则生产者一开始就不会生产 2.消费者最好也有个esle 3.global 那两行是多余的

import threading
import time

products=[]
condition = threading.Condition()
class Consumer(threading.Thread):
    def consume(self):
        # global condition
        # global products
        condition.acquire()
        if len(products)==0:
            condition.wait()
            print('消费提醒:没有产品去消费了')
        else:
            products.pop()
            print('消费者提醒:消费1个产品')
            print('消费者提醒:还能消费的产品数为'+str(len(products)))
        condition.notify()
        condition.release()
    def run(self):
        for i in range(0,20):
            time.sleep(4)
            self.consume()
class Producer(threading.Thread):
    def produce(self):
        # global condition
        # global products
        condition.acquire()
        if len(products)==10:
            condition.wait()
            print('生产者提醒:生成的产品数为'+str(len(products)))
            print('生产者提醒:停止生产!')
        else:
            products.append(1)
            print('生产者提醒:产品总数为'+str(len(products)))
        condition.notify()
        condition.release()
    def run(self):
        for i in range(0,20):
            time.sleep(1)
            self.produce()
producer=Producer()
consumer=Consumer()
consumer.start()
producer.start()
producer.join()
consumer.join()
输出内容 生产者提醒:产品总数为1 生产者提醒:产品总数为2 生产者提醒:产品总数为3 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为2 生产者提醒:产品总数为3 生产者提醒:产品总数为4 生产者提醒:产品总数为5 生产者提醒:产品总数为6 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为5 生产者提醒:产品总数为6 生产者提醒:产品总数为7 生产者提醒:产品总数为8 生产者提醒:产品总数为9 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为8 生产者提醒:产品总数为9 生产者提醒:产品总数为10 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为9 生产者提醒:生成的产品数为9 生产者提醒:停止生产! 生产者提醒:产品总数为10 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为9 生产者提醒:生成的产品数为9 生产者提醒:停止生产! 生产者提醒:产品总数为10 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为9 生产者提醒:生成的产品数为9 生产者提醒:停止生产! 生产者提醒:产品总数为10 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为9 生产者提醒:生成的产品数为9 生产者提醒:停止生产! 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为8 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为7 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为6 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为5 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为4 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为3 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为2 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为1 消费者提醒:消费1个产品 消费者提醒:还能消费的产品数为0

37,726

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧