【问题标题】:Simpy: Possible to do priority requests with filterstore?Simpy:可以使用 filterstore 进行优先级请求吗?
【发布时间】:2017-03-17 15:21:19
【问题描述】:

我有一个获取过滤器存储中两个对象之一的请求,如下所示:

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

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

【问题讨论】:

    标签: python simpy


    【解决方案1】:

    是的,如果您创建类似于 PriorityQueue 的 FilterStore 子类,这是可能的。

    【讨论】:

    • 谢谢。我假设这意味着编辑 simpy 库?
    • 不需要直接编辑simpy。只需子类 Store 或 Filter store 以及您在 app/lib 中所需的功能。
    【解决方案2】:

    这是一个对我有用的例子

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-12
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      相关资源
      最近更新 更多