我有一个FilterStore,在模拟过程中,有时会有一个FilterStore.Get事件的队列。现在我有两个问题:
有没有一种方法可以查看队列中的实际元素,而不仅仅是对象号?使用FilterStore.get_queue,我得到以下输出:
[位于0x221a47c6080的FilterStoreGet()对象,位于0x221a47c6eb8的FilterStoreGet()对象]。但是我想要一个带有实际名称的列表,例如[1,2,3]。
有没有办法操纵队列?我知道队列中的元素正在使用FIFO处理,但是我想使用LIFO或SIRO。
最佳答案
当您获得队列元素(带有yield
)时,FilterStore返回该元素。另外,您可以使用字典来命名元素。
让我们创建3个理发师:
barberNames = ['Baber A', 'Baber B', 'Baber C']
barberList = [simpy.Resource(env, capacity=1) for i in range(3)]
barberDict = dict(zip(barberNames , barberList))
现在,创建一个到BarberShop的FilterStore:
barberStore = simpy.FilterStore(env, capacity=3)
barberStore.items = barberNames
如果我们的BarberShop的一个客户不想要特定的理发师,我们可以从创建的商店中选择一个理发师:
clientBarber = yield barbeariaStore.get()
如果打印
clientBarber
,您将看到他的名字(如在barberNames中一样)在这种情况下,我们的客户需要特定的理发师。
假设他想要“理发师A”:
preferBarber = yield barbeariaStore.get(lambda barber : barber == 'Barber A')
现在,preferredBarber会存储“ Barber A”。