python实现操作系统(消费者生产者模型)
发布日期:2021-05-07 07:07:20 浏览次数:21 分类:精选文章

本文共 1884 字,大约阅读时间需要 6 分钟。

直接上代码,解释在注释,不懂评论留言,必回

#项目名称:#项目简介:#作   者:key#开发时间:2020/11/3 15:18import os  # 系统操作import random  # 随机函数import time  # 时间from multiprocessing import Process, JoinableQueue  # 进程管理,进程队列# 消费者函数def consumer(q):    while True:        # JoinableQueue.get()获取并删除第一个元素        res = q.get()        # time.sleep() 推迟调用线程的运行,可通过参数secs指秒数,表示进程挂起的时间。        # random.randint(1,3) 返回一个随机整数1 2 3        time.sleep(random.randint(1, 5))        # '\033[字背景颜色;字体颜色m输出信息\033[0m'        # os.getpid() 获取进程id        print('\033[40;31m{}购买了{}\033[0m'.format(os.getpid(), res))        # Queue.task_done() 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号        q.task_done()# 生产者函数def producer(name, q):    for i in range(10):        time.sleep(random.randint(1, 5))        res = '%s%s' % (name, i)        q.put(res)        print('{}生产了{}'.format(os.getpid(), res))    # Queue.join() 实际上意味着等到队列为空,再执行别的操作    q.join()if __name__ == '__main__':    # 创建仓库    q = JoinableQueue()    # Process初始化    # target 表示调用对象,即子进程要执行的任务    # args args 表示调用对象的位置参数元组,args=('华为手机', q)    # 生产者    p1 = Process(target=producer, args=('华为手机', q))    p2 = Process(target=producer, args=('苹果手机', q))    p3 = Process(target=producer, args=('Vivo手机', q))    p4 = Process(target=producer, args=('中国手机', q))    # 购买者    c1 = Process(target=consumer, args=(q,))    c2 = Process(target=consumer, args=(q,))    c3 = Process(target=consumer, args=(q,))    # Queue.daemon:默认值为False,    #如果设为True,代表p为后台运行的守护进程,当p的父进程终止时,p也随之终止,    #并且设定为True后,p不能创建自己的新进程,必须在p.start()之前设置    c1.daemon = True    c2.daemon = True    c3.daemon = True    # 开始工作    p_list = [p1, p2, p3, p4, c1, c2]    for p in p_list:        # Queue.start():启动进程,并调用该子进程中的Queue.run()        # Queue.run():进程启动时运行的方法,正是它去调用target指定的函数,我们自定义类的类中一定要实现该方法        p.start()    # Queue.join() 实际上意味着等到队列为空,再执行别的操作    p1.join()    p2.join()    p3.join()    p4.join()    print('进程结束')
上一篇:学习随笔——计算机硬件——2020.11.3
下一篇:关于linux特殊含义的转义符\033

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2025年04月21日 18时02分12秒