我有一个带有capacity=2的资源,两个插槽都有一个初始值作为属性。假设两个插槽的初始值都设置为1。现在进程请求资源,进程的值可以是1、2、3或4。这个进程值也类似于属性。现在我要模拟的是,当一个进程请求资源时,它首先将自己的值与两个插槽的值进行比较。它对具有相同值的槽进行优先级排序。如果所有插槽都没有相同的值,则随机选择。在进程释放该插槽之后,该插槽的值被更改为等于进程值。我的想法是使用FilterStore并将资源作为项目放入商店。但是,我如何设置项的属性,以及如何如上所述更改属性?我希望我把我的问题描述得很清楚。感谢您的任何意见。
发布于 2018-09-17 17:57:30
好的,这是我用来解决我的问题的一小段代码。我最初在一个类中定义了我的资源,但后来改变了它,并将资源直接放入FilterStore中。
import simpy
#class Pre_Assem:
# def __init__(self, env, name, value):
# self.nodes = simpy.Resource(env, capacity = 1)
# self.name = name
# self.value = value
class Job:
def __init__(self, env, name, release, value):
self.env = env
self.name = name
self.release = release
self.value = value
def Process(env, job, pre_assem):
print('initial slot values: ', pre_assem.items)
yield env.timeout(job.release)
print('available slots before: ', pre_assem.capacity)
request = yield pre_assem.get(lambda request: request['value'] == job.value) | pre_assem.get()
print('available slots after: ', pre_assem.capacity)
print('slot requested: ' , request)
print('slot is beeing used')
yield env.timeout(10)
print('slots after use: ', pre_assem.items)
yield pre_assem.put({'value': job.value})
print('new slots values: ', pre_assem.items)
env = simpy.Environment()
pre_assem = simpy.FilterStore(env, 2)
#preassem1 = Pre_Assem(env, 1, 1)
#preassem2 = Pre_Assem(env, 2, 1)
#pre_assem.items = [preassem1, preassem2]
pre_assem.put({'name':1, 'value':1})
pre_assem.put({'name':2, 'value':1})
jobs = [Job(env, 1, 0, 1),
Job(env, 2, 0, 2),
Job(env, 3, 60, 3)]
for job in jobs:
env.process(Process(env, job, pre_assem))
env.run()它可以工作,但不能做我想要的事情。
https://stackoverflow.com/questions/52275438
复制相似问题