Simpy:可以用 filterstore 做优先请求吗?
Simpy: Possible to do priority requests with filterstore?
我有一个获取过滤器存储区内两个对象之一的请求,如下所示:
req = yield depot.get(lambda req: req['id'] == 's38' or 's39')
我想将此特定请求设置为优先级,以便它排队跳过所有其他请求。这可能吗?
是的,如果您创建类似于 PriorityQueue 的 FilterStore 的子class,这是可能的。
这是一个对我有用的例子
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
我有一个获取过滤器存储区内两个对象之一的请求,如下所示:
req = yield depot.get(lambda req: req['id'] == 's38' or 's39')
我想将此特定请求设置为优先级,以便它排队跳过所有其他请求。这可能吗?
是的,如果您创建类似于 PriorityQueue 的 FilterStore 的子class,这是可能的。
这是一个对我有用的例子
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