python实现队列的代码回顾
class Queue():
# Queue() 创建一个空的新队列。 它不需要参数,并返回一个空队列。
def __init__(self):
self.items = []
# enqueue(item) 将新项添加到队尾。 它需要 item 作为参数,并不返回任何内容。
def enqueue(self, item):
self.items.insert(0, item)
# dequeue() 从队首移除项。它不需要参数并返回 item。 队列被修改。
def dequeue(self):
item = self.items.pop()
return item
# isEmpty() 查看队列是否为空。它不需要参数,并返回布尔值。
def isEmpty(self):
return 0 == len(self.items)
# size() 返回队列中的项数。它不需要参数,并返回一个整数。
def size(self):
length = len(self.items)
return length
问题描述
假设实验室里有一台打印机供学生共性。当学生向共享打印机发送打印任务时,任务被放置在队列中以便以先来先服务的方式被处理。如何才能通过python程序模拟的方式得到每次提交任务的平均等待时间呢?(平均等待时间不包括打印本身的时间,仅指在队列中排队的时间。)
我们假定:
学生们每次打印的页数在1到20页之间。
打印机平均每小时会收到20个打印请求,即平均每180秒1个请求。
每秒新增任务的可能性相等,即任务的产生为独立同分布
打印机的打印速度恒定。
总体模拟思路
当学生提交打印任务时,我们将把他们添加到打印任务的等待队列。当打印机完成任务时,它将检查队列,将剩余的任务中队首的那一个弹出并处理。学生等待他们的任务打印的平均时间也等于任务在队列中等待的平均时间。
我们将对每个任务入队和出队的时间戳进行记录,由此得到该任务在队列中的等待时间。
对任务的模拟
任务类应包括以下几个功能:随机生成页数、记录入队时间戳、返回需要打印的页数、根据当前时间戳返回等待的时间。
class Task:
#任务初始化
def __init__(self, time):
# time 为传入的任务创建时间,也就是入队时间
self.in_time = time
self.pages = random.randrange(1,21) # 随机生成1到20页之间的页数
#返回任务需要打印的页数
def getPage(self):
return self.pages
def waitTime(self, out_time):
# out_time为当前时间戳
return out_time - self.in_time
对打印机的模拟
打印机类应包括以下几个功能:设定打印速度(多少秒每页)、载入新任务并计算新任务剩余打印时间、记录当前任务的剩余打印时间、打