会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132647个问题
Python 全系列/第三阶段:Python 网络与并发编程/并发编程 770楼

from multiprocessing import Process, Semaphore, Lock, Queue
import time

empty = Semaphore(2)
full = Semaphore(0)
lock = Lock()


class Consumer(Process):
    def __init__(self, buffer):
        Process.__init__(self)
        self.buffer = buffer

    def run(self):
        while True:
            full.acquire()
            lock.acquire()
            info = self.buffer.get()
            print('Consumer pop an element',info)
            time.sleep(1)
            lock.release()
            empty.release()


class Producer(Process):
    def __init__(self, buffer):
        Process.__init__(self)
        self.buffer = buffer

    def run(self):
        while True:
            empty.acquire()
            lock.acquire()
            self.buffer.put('bmt')
            print('Producer append an element')
            time.sleep(1)
            lock.release()

            full.release()


if __name__ == '__main__':
    buffer = Queue(10)
    p = Producer(buffer)
    c = Consumer(buffer)
    p.daemon = True
    c.daemon = True
    p.start()
    c.start()
    p.join() 
    c.join()
   

    print('Ended!')

老师,这个代码只输出两个

Producer append an element

Producer append an element

就卡住不执行了,老师帮我分析下,谢谢!

Python 全系列/第三阶段:Python 网络与并发编程/并发编程 775楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637