示例#1
0
def simulation(numOfStd, pagePerMinute):
    labPrinter = Printer(pagePerMinute)
    printerQueue = Queue()
    waitingTimes = []
    currentSecond = 0
    taskCnt = numOfStd * 2

    while True:
        if newPrintTask() and taskCnt > 0:
            printerQueue.enqueue(Task(currentSecond))
            taskCnt -= 1

        if not labPrinter.busy() and not printerQueue.isEmpty():
            nextTask = printerQueue.dequeue()
            waitingTimes.append(nextTask.waitTime(currentSecond))
            labPrinter.startNext(nextTask)

        if taskCnt == 0 and not labPrinter.busy() and printerQueue.isEmpty():
            break

        labPrinter.tick()
        currentSecond += 1

    avgWait = sum(waitingTimes) / len(waitingTimes)
    print("Average Wait %6.2f seconds %3d tasks ramaining"%(avgWait, printerQueue.size()))
示例#2
0
def simulation(total_time, pages_per_min, num_of_students):

    lab_printer = Printer(pages_per_min)  # set printer per min
    print_q = PrintQueue()  # set the queue
    waiting_time = []  #

    for current_second in range(total_time):

        # create new print task and put it into the queue.
        if new_print_task(num_of_students):
            # print("CREATE NEW TASK")
            t = Task(current_second)
            print_q.enqueue(t)

        # if the printer is not busy and if the queue is not empty,
        # process the next waiting print task
        # check how long the task was waiting in the queue and add it to the array.
        # when the start_next() gets called, it will check how many seconds it will take to complete.
        # it will set it to busy() = True and current_task = next_task.
        # When the printer time_remaining gets 0, it will change busy() = False.
        if (not lab_printer.busy()) and (not print_q.is_empty()):
            # print("PROCESSSING CURRENT TASK")
            next_task = print_q.dequeue()
            waiting_time.append(t.wait_time(current_second))
            lab_printer.start_next(next_task)

        # If any of the statement doesn't match, process the current_task which
        # is in the printer and sub the time it is taking.
        lab_printer.tick()

    avg_wait = sum(waiting_time) / len(waiting_time)
    print("Average Wait %6.2f secs %3d tasks remaining." %
          (avg_wait, print_q.size()))
def simulation(numSeconds,pagesPerMinute):
    """
    :param numSeconds:
    :param pagesPerMinute: 每分钟打印页数
    """
    labprinter  = Printer(pagesPerMinute)  #
    printQueue = Queue()  #打印队列
    waitingtimes = []

    for currentSecond in range(numSeconds):

        if newPrinterTask():  #
            task = Task(currentSecond)
            printQueue.enqueue(task)

        if (not labprinter.busy()) and (not printQueue.isEmpty()):
            nextTask = printQueue.dequeue()
            waitingtimes.append(nextTask.waitTime(currentSecond))
            labprinter.startNext(nextTask)

        labprinter.tick()

    averageWait = sum(waitingtimes)/len(waitingtimes)

    print('AvarageWait %6.2f seconds %3d tasks remaing.'%(averageWait,printQueue.size()))
示例#4
0
def simulation(seconds, pages):
    """
    打印任务模拟程序

    Args:
        - seconds (int): 允许设置设置的总时间
        - minutes (int): 打印机每分钟打印多少页
    """
    printer = Printer(pages)
    queue = Queue()
    waitingTimes = []

    for i in range(seconds):
        if is_new_task():
            task = Task(i)
            queue.enqueue(task)

        if not printer.busy() and not queue.isEmpty():
            newTask = queue.dequeue()
            waitingTimes.append(newTask.waitingTime(i))
            printer.startNext(newTask)

        printer.work()

    avgWaitingTimes = sum(waitingTimes) / len(waitingTimes)
    print("Average wait %6.2f secs %3d tasks reaming" %
          (avgWaitingTimes, queue.size()))
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 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()))
示例#7
0
def simulation(num_seconds, page_per_minute):
    lab_printer = Printer(page_per_minute)
    print_queue = list()  # Queue
    waiting_times = list()

    for current_second in range(0, num_seconds):
        if new_print_task():
            task = Task(current_second)
            print_queue.append(task)  # enqueue

        if (not lab_printer.busy()) and (len(print_queue) != 0):
            next_task = print_queue.pop(0)  # 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 {0:6.2f} secs {1:3d} tasks remaining.'.format(average_wait, len(print_queue)))
示例#8
0
def simulation(seconds, ppm, students, tasks_per_student):
    # Run the printer simulation
    printer = Printer(ppm)
    queue = Queue()
    waiting_time = []

    for second in range(seconds):
        if new_print_task(students, tasks_per_student):
            task = Task(second)
            queue.enqueue(task)

        if not printer.busy() and not queue.is_empty():
            next_task = queue.dequeue()
            waiting_time.append(next_task.wait_time(second))
            printer.start_next(next_task)

        printer.tick()

    average_wait = sum(waiting_time) / len(waiting_time)
    print('Average wait %5d seconds %2d tasks remaining.' %
          (average_wait, queue.size()))