
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('进程结束')