2014-02-18 3 views
0

Я пытаюсь создать программу, которая имитирует выезд в магазине. Я разрешаю пользователям вводить кучу данных, а затем передаю их в свою функцию, которая запускает симуляцию. Я использую класс Queue, который я создал и работает для того, что мне нужно для (FIFO). Моя проблема возникает, когда я пытаюсь заставить клиента, который входит в очередь на открытый сервер, а затем в конечном итоге удаляется из очереди. Как только они исчезнут, сервер выберет следующего клиента из очереди и так далее.Python Checkout Simulation

Ниже мой код, что я до сих пор ..

from queue_array import Queue 
from customer import Customer 
from server import Server 

import random, copy 

def line_up (total_time, num_servers, max_num_clients_per_min, max_service, min_service, freakout_chance, min_freak, max_freak): 
    q = Queue() 
    s = [] 
    customer_id = 0 
    server_id = 0 
    max_queue_size = 0 
    serving = 0 
    customers_served = 0 
    is_serving = False 


    for _se in range(num_servers): 
     server = Server(server_id, None) 
     s.append(server)  
     server_id += 1 
    #loop through each minute 
    for time in range(0, total_time + 1): 
     print ("Time = {}".format(time)) 

     num_join = random.randint(0, max_num_clients_per_min) 

     #Determine when customer joins the queue 
     for _i in range(0, num_join): 
      print (" Client {} joins the queue.".format(customer_id)) 
      service_length = random.randint(min_service, max_service) 
      f = random.randint(1, freakout_chance) 
      if f == 1: 
       freak = True 
      else: 
       freak = False 

      customer = Customer(customer_id, copy.deepcopy(time), service_length, freak) 
      q.insert(customer) 
      customer_id += 1 

      if len(q) > max_queue_size: 
       max_queue_size = len(q) 

     for serve in s: 
      if serve.client is None: 
       n = serve.number 
       print (" Server {} starting to serve Client {}".format(n, q.peek().number)) 

line_up(5, 3, 2, 5, 1, 1000, 0, 5) 

Так что этот код здесь призывает моего класса Queue Aswell как некоторые другие маленькие классы, которые я сделал. Я не включаю их, потому что я не думаю, что мне нужно включить их для чего мне нужна помощь.

Мой вопрос: как я могу получить серверы, которые я поместил в список, чтобы вытащить клиента из очереди по одному за каждым, а затем, как только они будут выполнены, удалите их из очереди и возьмите следующий.

Надеюсь, что я был чист, прокомментируйте, если вам нужно больше разъяснений.

ответ

1

Поскольку вы не разместили свой код очереди, вам трудно быть уверенным, но вы должны удалить клиента из очереди, как только сервер будет готов к ним, чтобы не допустить назначения нескольких серверов одному клиенту:

for serve in s: 
    if serve.client is None: 
     serve.client = q.remove() # or pop or whatever you have 
     print (" Server {} starting to serve Client {}".format(serve.number, serve.client.number))