我有一个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”。

10-06 14:03