使用打印机的模型是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.
作者:虚生 出处:https://www.cnblogs.com/dylancao/ 以音频和传感器算法为核心的智能可穿戴产品解决方案提供商 ,提供可穿戴智能软硬件解决方案的设计,开发和咨询服务。 勾搭热线:邮箱:1173496664@qq.com weixin:18019245820 市场技术对接群:347609188 |
![]() |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战