FilterStore queue - PullRequest
       33

FilterStore queue

0 голосов
/ 23 октября 2018

У меня есть FilterStore, и во время симуляции иногда возникает очередь на событие FilterStore.Get.Теперь у меня есть два вопроса:

  1. Есть ли способ увидеть фактические элементы в очереди, а не только номер объекта?С FilterStore.get_queue я получаю этот вывод: [FilterStoreGet () объект в 0x221a47c6080, FilterStoreGet () объект в 0x221a47c6eb8].Но я хотел бы список с фактическими именами, например [1,2,3].

  2. Есть ли способ манипулировать очередью?Я знаю, что элементы в очереди обрабатываются с помощью FIFO, но я бы хотел использовать LIFO или SIRO.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Я получил ответ на свой вопрос на другом форуме.Я также опубликую это здесь, потому что я уверен, что у кого-то еще будет та же самая проблема.

Таким образом, невозможно напрямую манипулировать FilterStore.get_queue, но, записав подкласс Store, вы получите очередь, которая ведет себя по-другому (например, LIFO).

class PrependList(list):
def append(self, item):
    self.insert(0, item)

class LCFSStore(Store):
    put = BoundClass(StorePut)
    get = BoundClass(FilterStoreGet) 
    GetQueue = PrependList
0 голосов
/ 29 октября 2018
  1. Когда вы получаете элемент очереди (с yield), FilterStore возвращает элемент.Кроме того, вы можете использовать dict для именования элементов.

Давайте создадим 3 парикмахера:

barberNames = ['Baber A', 'Baber B', 'Baber C']
barberList = [simpy.Resource(env, capacity=1) for i in range(3)]
barberDict = dict(zip(barberNames , barberList))

Теперь создайте FilterStore для BarberShop:

barberStore = simpy.FilterStore(env, capacity=3)
barberStore.items = barberNames

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

clientBarber = yield barbeariaStore.get()

Если вы напечатаете clientBarber, вы увидите егоимя (как в barberNames)

В этом случае наш клиент хочет определенного парикмахера.

Предположим, что ему нужен «Парикмахер А»:

preferBarber = yield barbeariaStore.get(lambda barber : barber == 'Barber A')

Теперь предпочитаем, чтобы Барбер хранил «Парикмахера А».

...