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 ...
随机推荐
- HSV color space
计算机图形学原理的课给我们指定了课题然后自己去研究并且做ppt(顺便吐槽一下晚课下课布置作业第二天早课就要交的辣鸡时间安排) 肝了一个晚上 大概知道了一点 先写下来 HSV其实是hue saturat ...
- Learning Discriminative Features with Class Encoder
近来论文看了许多,但没多少时间总结下来.今天暂时记录一篇比较旧的论文,选择理由是 Discriminative features. 做图像说白了就是希望有足够有判别性的特征,这样在分类或者匹配.检索的 ...
- Faster_RCNN 2.模型准备(上)
总结自论文:Faster_RCNN,与Pytorch代码: 本文主要介绍代码第二部分:model/utils , 首先分析一些主要理论操作,然后在代码分析里详细介绍其具体实现. 一. 主要操作 1. ...
- python用ftplib上传下载中文报错解决
python中的中文编码一直以来都是一个极为头大的问题,经常抛出编码转换的异常,python中的str和unicode到底是一个什么东西呢?在python中提到unicode,一般指的是unicode ...
- 发布自己的类库到NuGet
NuGet是一个为大家所熟知的Visual Studio扩展,通过这个扩展,开发人员可以非常方便地在Visual Studio中安装或更新项目中所需要的第三方组件,同时也可以通过NuGet来安装一些V ...
- 【转】C++拷贝构造函数详解
一.什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: ; int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量. 下面看一个类对象拷贝 ...
- 漏洞扫描工具Nessu的安装和简单使用
一.软件介绍Nessus号称是世界上最流行的漏洞扫描程序,全世界有超过75000个组织在使用它.该工具提供完整的电脑漏洞扫描服务,并随时更新其漏洞数据库.Nessus不同于传统的漏洞扫描软件,Ness ...
- druid:java代码创建连接池
PropertiesDB 是一个读取配置文件的类,也可以不用,每个参数直接用String代替. public DataSource dataSource(PropertiesDB properties ...
- 51nod--1256 乘法逆元 (扩展欧几里得)
题目: 1256 乘法逆元 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出2个数M和N(M < N),且M与N互质,找出一个数K满足0 < ...
- java结合testng,利用yaml做数据源的数据驱动实例
testng的功能很强大,利用@DataProvider可以做数据驱动,数据源文件可以是EXCEL,XML,YAML,甚至可以是TXT文本.在这以yaml为例: 备注:@DataProvider的返回 ...