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()))
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()))
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()))
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)))
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()))