队列 计算机打印任务模拟

import os
import random
from collections import deque

class Printer:
    def __init__(self, ppm):
        self.pagerate = ppm#每分钟打印多少页
        self.currentTask = None
        self.timeRemaining = 0

    def tick(self):
        if self.currentTask != None:
            self.timeRemaining = self.timeRemaining - 1
            if self.timeRemaining == 0:
                self.currentTask = None

    def busy(self):
        return self.currentTask != None

    def startNext(self, newtask):
        self.currentTask = newtask
        self.timeRemaining = newtask.getPages()*60/self.pagerate#单位s

class Task:
    def __init__(self, time):
        self.timestamp = time
        self.pages = random.randrange(1, 21)

    def getStamp(self):
        return self.timestamp

    def getPages(self):
        return self.pages

    def waitTime(self, currenttime):
        return currenttime - self.timestamp

def newPrintTask():
    return random.randrange(1,181) == 180

#main def
def simulation(numSeconds, pagesPerMinute):

    labprinter = Printer(pagesPerMinute)
    printQueue = deque()
    waitingtimes = []

    for currentSecond in range(numSeconds):
        if newPrintTask():
            task = Task(currentSecond)
            printQueue.appendleft(task)

        if (not labprinter.busy()) and (len(printQueue) != 0):
            nexttask = printQueue.pop()
            waitingtimes.append( nexttask.waitTime(currentSecond) )
            labprinter.startNext(nexttask)

        labprinter.tick()

    averageWait = sum(waitingtimes)/len(waitingtimes)
    print 'Average Wait %6.2f secs %3d tasks remianing.'%(averageWait,len(printQueue))

for i in range(10):
    simulation(3600, 5)

print '10'
for i in range(10):
    simulation(3600, 10)

输出:

Average Wait 132.00 secs   1 tasks remianing.
Average Wait  80.00 secs   2 tasks remianing.
Average Wait  81.00 secs   2 tasks remianing.
Average Wait 111.00 secs   0 tasks remianing.
Average Wait  78.00 secs   0 tasks remianing.
Average Wait  76.00 secs   2 tasks remianing.
Average Wait  46.00 secs   0 tasks remianing.
Average Wait 149.00 secs   2 tasks remianing.
Average Wait  77.00 secs   3 tasks remianing.
Average Wait 220.00 secs   0 tasks remianing.
10
Average Wait  20.00 secs   0 tasks remianing.
Average Wait  29.00 secs   1 tasks remianing.
Average Wait   1.00 secs   0 tasks remianing.
Average Wait  15.00 secs   0 tasks remianing.
Average Wait  12.00 secs   0 tasks remianing.
Average Wait   8.00 secs   0 tasks remianing.
Average Wait  32.00 secs   0 tasks remianing.
Average Wait   5.00 secs   0 tasks remianing.
Average Wait  18.00 secs   0 tasks remianing.
Average Wait   6.00 secs   0 tasks remianing.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值