python中基于queue的打印机仿真算法
使用打印机的模型是queue中最经典的应用之一,这里就回顾一下queue在这里的使用方法和
起的重要作用。
为了仿真打印状态,这里需要把真实环境中的三个物理模型要建模出来,分别是:打印者,打印
任务,和处理队列。
首先打印者的实现如下所示:
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 != None:
self.time_remaining = self.time_remaining - 1
if self.time_remaining <= 0:
self.current_task = None def busy(self):
if self.current_task != 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
打印任务的代码实现:
import random class Task:
def __init__(self,time):
self.timestamp = time
self.pages = random.randrange(1,21) def get_stamp(self):
return self.timestamp def get_pages(self):
return self.pages def wait_time(self,current_time):
return current_time - self.timestamp
任务处理:
import random
from queue import *
from Printer import *
from Task import * print random.randrange(0, 101) def simulation(num_seconds,pages_per_minute): lab_printer = Printer(pages_per_minute)
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 secs %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 for i in range(10):
simulation(3600,5)
测试结果:
Average Wait 1874.00 secs 3572 tasks remaining.
Average Wait 1793.00 secs 3568 tasks remaining.
Average Wait 1700.00 secs 3572 tasks remaining.
Average Wait 1554.00 secs 3573 tasks remaining.
Average Wait 1831.00 secs 3570 tasks remaining.
Average Wait 1723.00 secs 3569 tasks remaining.
Average Wait 1745.00 secs 3568 tasks remaining.
Average Wait 1697.00 secs 3572 tasks remaining.
Average Wait 1596.00 secs 3569 tasks remaining.
Average Wait 1729.00 secs 3572 tasks remaining.
python中基于queue的打印机仿真算法的更多相关文章
- python中基于descriptor的一些概念
python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...
- python中基于descriptor的一些概念(上)
@python中基于descriptor的一些概念(上) python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2 ...
- python中基于descriptor的一些概念(下)
@python中基于descriptor的一些概念(下) 3. Descriptor介绍 3.1 Descriptor代码示例 3.2 定义 3.3 Descriptor Protocol(协议) 3 ...
- python中的Queue
一.先说说Queue(队列对象) Queue是python中的标准库,可以直接import 引用,之前学习的时候有听过著名的“先吃先拉”与“后吃先吐”,其实就是这里说的队列,队列的构造的时候可以定义它 ...
- python中的Queue(队列)详解
一.Queue简介 python中的队列分类可分为两种: 1.线程Queue,也就是普通的Queue 2.进程Queue,在多线程与多进程会介绍. Queue的种类: FIFO: Queue.Que ...
- python 中的queue 与多进程--待继续
一.先说说Queue(队列对象) Queue是python中的标准库,可以直接import 引用,之前学习的时候有听过著名的“先吃先拉”与“后吃先吐”,其实就是这里说的队列,队列的构造的时候可以定义它 ...
- python中的Queue模块
queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue.python3直接queue即可 在python中,多个线程之间的数据 ...
- (数据科学学习手札136)Python中基于joblib实现极简并行计算加速
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 我们在日常使用Python进行各种数据计算 ...
- python 中的queue, deque
python3 deque(双向队列) 创建双向队列 import collections d = collections.deque() append(往右边添加一个元素) import colle ...
随机推荐
- Ubuntu16下用virtualbox 安装Windows虚拟机
平时要用Windows系统,但是现在工作都是在Linux下面开发,所以都没装Windows,之前用vm虚拟机比较麻烦, 所以就用virtualbox搞搞: 1.sed -i '$adeb http:/ ...
- Linux - 操作系统的发展史
操作系统的发展史(科普章节) 目标 了解操作系统的发展历史 知道 Linux 内核及发行版的区别 知道 Linux 的应用领域 01. 操作系统的发展历史 1.1 Unix 1965 年之前的时候,电 ...
- Python设计模式 - UML - 部署图(Deployment Diagram)
简介 部署图也称配置图,用来显示系统中硬件和软件的物理架构.从中可以了解到软件和硬件组件之间的物理拓扑.连接关系以及处理节点的分布情况. 部署图建模步骤 - 找出需要进行部署的各类节点,如网络硬件设备 ...
- 你确定你真的懂Nginx与PHP的交互?
Nginx是俄国人最早开发的Webserver,现在已经风靡全球,相信大家并不陌生.PHP也通过二十多年的发展来到了7系列版本,更加关注性能.这对搭档在最近这些年,叱咤风云,基本上LNMP成了当下的标 ...
- js+正则+单双引号问题
在处理用js动态添加表格时,表格中有正则表达式,其单双引号问题导致的添加表格不成功,和正则失效问题 <script type="text/javascript"> va ...
- 560. Subarray Sum Equals K 求和为k的子数组个数
[抄题]: Given an array of integers and an integer k, you need to find the total number of continuous s ...
- 使用jmail发送短信
原文链接 https://blog.csdn.net/sdaujsj1/article/details/79248469 pom <!-- https://mvnrepository.com/a ...
- 拿来主义:treeview插件父子节点问题
鄙人公司没有专门的前端,所以项目开发中都是前后端一起抡.最近用bootstrap用的比较频繁,发现bootstrap除了框架本身的样式组件外,还提供了多种插件供开发者选择.本篇博文讲的就是bootst ...
- Xadmin弹出窗口
Xadmin弹出窗口 需求分析: 1.在添加页面的一对多和多对多字段后面加上+,点击+后,能显示出添加相应字段的窗口 2.提交后窗口关闭,添加的内容显示到当前页面 1.判断出当前字段是否为Foreig ...
- ubuntu,day3,awk, vim的使用
本节内容 : 1,awk 2,vim 1,awk # 命令行调用方式 awk [-F field-separator] 'commands' input-file(s) cat /etc/passw ...