Simpy:可以用filterstore做优先级请求吗?

时间:2017-03-17 15:21:19

标签: python simpy

我在filtertore中有两个对象之一的get请求,如下所示:

req = yield depot.get(lambda req: req['id'] == 's38' or 's39')

我想将此特定请求设为优先级,以便队列跳转所有其他请求。这可能吗?

2 个答案:

答案 0 :(得分:1)

是的,如果您创建一个类似于PriorityQueue的FilterStore子类,则可以这样做。

答案 1 :(得分:0)

这是一个对我有用的例子

import simpy
import bisect

class PriorityFilterStore(simpy.FilterStore):

    def _do_put(self, event):
        if len(self.items) < self._capacity:
            bisect.insort(self.items, event.item)
            event.succeed()

    def _do_get(self, event):
        for i in range(len(self.items)):
            item = self.items[i]
            if event.filter(item):
                del self.items[i]   
                event.succeed(item)
                break
        return True