python--使用队列结构来模拟共享打印机等候时间
按书里的样例抄的。
可以看到,将打印速度由第分钟5页提高到10页之后,
每个学生提交打印任务到打印完成的时间明显缩短。
===========================
在计算机科学实验室里考虑下面的情况。
平均每天大约10名学生在实验室工作,每人每小时打印2次。
这些打印任务的长度范围从1到20页。
实验室中的打印机较旧,每分钟以草稿质量可以处理10页。
打印机可以切换以提供更好的质量,但是它将每分钟只能处理5页。
较慢的打印速度可能会使学生等待太久。应使用什么页面速率?
===========================
# coding = utf-8 import random class Printer: def __init__(self, ppm): self.page_rate = ppm self.current_task = None self.time_remaining = 0 def tick(self): if self.current_task is not None: self.time_remaining = self.time_remaining - 1 if self.time_remaining <= 0: self.current_task = None def busy(self): if self.current_task is not None: return True else: return False def start_next(self, new_task): self.current_task = new_task self.time_remaining = new_task.get_pages() * 60/self.page_rate class Task: def __init__(self, time): self.time_stamp = time self.pages = random.randrange(1, 21) def get_stamp(self): return self.time_stamp def get_pages(self): return self.pages def wait_time(self, current_time): return current_time - self.time_stamp class Queue: def __init__(self): self.items = [] def is_empty(self): return self.items == [] # 入队列,加在首部 def enqueue(self, item): self.items.insert(0, item) # 出队列,最后一个 def dequeue(self): return self.items.pop() def size(self): return len(self.items) def simulation(num_seconds, pages_per_minutes): lab_printer = Printer(pages_per_minutes) print_queue = Queue() waiting_times = [] for current_second in range(num_seconds): if new_print_task(): task = Task(current_second) print_queue.enqueue(task) if (not lab_printer.busy()) and (not print_queue.is_empty()): next_task = print_queue.dequeue() waiting_times.append(next_task.wait_time(current_second)) lab_printer.start_next(next_task) lab_printer.tick() average_wait = sum(waiting_times)/len(waiting_times) print('Average Wait %6.2f seconds %3d tasks remaining.'% (average_wait, print_queue.size())) def new_print_task(): num = random.randrange(1, 181) if num == 180: return True else: return False print('=============printer 5ppm===============') for i in range(10): simulation(3600, 5) print('=============printer 10ppm===============') for i in range(10): simulation(3600, 10)
C:\Users\Sahara\.virtualenvs\untitled\Scripts\python.exe D:/test/python_queue.py =============printer 5ppm=============== Average Wait 299.63 seconds 3 tasks remaining. Average Wait 219.16 seconds 1 tasks remaining. Average Wait 67.89 seconds 0 tasks remaining. Average Wait 28.47 seconds 0 tasks remaining. Average Wait 88.47 seconds 0 tasks remaining. Average Wait 274.36 seconds 1 tasks remaining. Average Wait 71.88 seconds 0 tasks remaining. Average Wait 58.25 seconds 0 tasks remaining. Average Wait 92.94 seconds 0 tasks remaining. Average Wait 78.45 seconds 0 tasks remaining. =============printer 10ppm=============== Average Wait 12.36 seconds 0 tasks remaining. Average Wait 5.55 seconds 0 tasks remaining. Average Wait 10.00 seconds 0 tasks remaining. Average Wait 16.12 seconds 0 tasks remaining. Average Wait 49.08 seconds 0 tasks remaining. Average Wait 15.68 seconds 0 tasks remaining. Average Wait 12.71 seconds 0 tasks remaining. Average Wait 34.44 seconds 0 tasks remaining. Average Wait 10.07 seconds 0 tasks remaining. Average Wait 21.60 seconds 0 tasks remaining.
python--使用队列结构来模拟共享打印机等候时间的更多相关文章
- python--使用队列结构来模拟烫手山芋的游戏
基本功,磨起来. # coding = utf-8 class Queue: def __init__(self): self.items = [] def is_empty(self): retur ...
- python实现队列结构
# -*- coding:utf-8 -*- # __author__ :kusy # __content__:文件说明 # __date__:2018/10/8 13:49 class MyQueu ...
- 刚开始学python——数据结构——“自定义队列结构“
自定义队列结构 (学习队列后,自己的码) 主要功能:用列表模拟队列结构,考虑了入队,出队,判断队列是否为空,是否已满以及改变队列大小等基本操作. 下面是封装的一个类,把代码保存在myQueue.py ...
- 【windows 操作系统】进程间通信(IPC)简述|无名管道和命名管道 消息队列、信号量、共享存储、Socket、Streams等
一.进程间通信简述 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进 ...
- Python 实现队列
操作 Queue() 创建一个空的队列 enqueue(item) 往队列中添加一个item元素 dequeue() 从队列头部删除一个元素 is_empty() 判断一个队列是否为空 size() ...
- python 操作mysql数据库之模拟购物系统登录及购物
python 操作mysql数据库之模拟购物系统登录及购物,功能包含普通用户.管理员登录,查看商品.购买商品.添加商品,用户充值等. mysql 数据库shop 表结构创建如下: create TAB ...
- Python消息队列工具 Python-rq 中文教程
原创文章,作者:Damon付,如若转载,请注明出处:<Python消息队列工具 Python-rq 中文教程>http://www.tiangr.com/python-xiao-xi-du ...
- Linux 进程间通信(一)(经典IPC:消息队列、信号量、共享存储)
有3种称作XSI IPC的IPC:消息队列.信号量.共享存储.这种类型的IPC有如下共同的特性. 每个内核中的IPC都用一个非负整数标志.标识符是IPC对象的内部名称,为了使多个合作进程能够在同一IP ...
- Python之目录结构
Python之目录结构 项目名project_name project_name -|--bin (可执行文件) --|--start.py import os,sys #设置环境变量 BASE_DI ...
随机推荐
- 如何解决错误0×80071AC3
前几天我在机房敲百例的时候,敲完了想把文件夹移动到我的U盘里去,结果出现了这种情况 上面说运行chkdsk并重试,我运行了一下,没什么反应,我就想既然不能移动文件夹 ...
- 2. Spring Boot项目启动原理初探
SpringBoot从宏观上说,就是对spring容器进行了一层包装.它内部的入口是利用 SpringApplication类的static的 run 方法进行启动的,调用的图: 上图中的这些方法都位 ...
- NandFlash和iNand【转】
转自:https://www.cnblogs.com/PengfeiSong/p/6380447.html nand 1.nand的单元组织:block与page(大页Nand与小页Nand)(1)N ...
- Python运维开发基础07-文件基础【转】
一,文件的基础操作 对文件操作的流程 [x] :打开文件,得到文件句柄并赋值给一个变量 [x] :通过句柄对文件进行操作 [x] :关闭文件 创建初始操作模板文件 [root@localhost sc ...
- asyncio Queue的使用例子
import aiohttp import asyncio import async_timeout from urllib.parse import urljoin, urldefrag root_ ...
- weblogic和was的巡检报告模板
weblogic巡检报告模板 https://max.book118.com/html/2017/0710/121553357.shtm 用jrockit How to tell Our WebLo ...
- wtforms-表单生成及验证
介绍 wtforms是一个支持多个web框架的form组件,主要用来做表单的验证以及生成的, 安装 pip install wtforms 使用 自定义一个类,继承wtforms.Form类,定义字段 ...
- HDU contest808 ACM多校第7场 Problem - 1008: Traffic Network in Numazu
首先嘚瑟一下这场比赛的排名:59 (第一次看到这么多 √ emmmm) 好了进入正文QAQ ...这道题啊,思路很清晰啊. 首先你看到树上路径边权和,然后还带修改,不是显然可以想到 树剖+线段树 维护 ...
- GigE IP地址配置
目前有三种配置Gige地址的方法: 1)动态获取DHCP 连接的PC上有DHCP server,可以分配给摄像头IP地址 2)静态IP 通过 设备自身的配置命令,来修改摄像头的IP地址,例如DALSA ...
- springboot 文件上传大小配置
转自:https://blog.csdn.net/shi0299/article/details/69525848 springboot上传文件大小的配置有两种,一种是设置在配置文件里只有两行代码,一 ...