gpt4 book ai didi

python - 请求 Simpy 资源永远不会成功

转载 作者:太空宇宙 更新时间:2023-11-03 21:07:29 25 4
gpt4 key购买 nike

我目前正在尝试使用 SimPy 为服务计数器建模,但在使用 Yield 来保存资源时遇到了困难。在 Counter.arrive() 函数下,如果存在“yield req”行,则整个函数将跳过执行(至少我认为这就是发生的情况,因为我没有得到任何打印输出)。但是,如果我注释掉该行,代码就会像什么都没发生一样执行。这是一个问题,因为如果没有产量,代码不会被阻止,直到请求被批准并且整个模拟失败,因为每个人都可以使用该资源。

代码片段如下:

import simpy
class Counter:
def __init__(self, env, name, staff):
self.env = env
self.staff = simpy.Resource(env, staff)
self.name = name
self.dreq = []
def arrive(self, name):
...
req = self.staff.request()
yield req
output = "Req: %s\n" % req
self.dreq.append(req)
...
print(output)
...
def customer(env, counter, name):
print("Customer %s arrived at %s" %(name,env.now))
counter.arrive(name)
yield env.timeout(5)
print("Customer %s left at %s" %(name,env.now))
...
env = simpy.Environment()
counter = Counter(env, "A", 1)
def setup(env, counter, MAX_CUST):
for i in range(MAX_CUST):
env.process(customer(env,counter, 1))
yield env.timeout(1)
env.process(setup(env,counter,5))
env.run(until=100)

编辑:我知道使用 yield 应该暂停该函数,直到请求获得批准,但第一个请求也没有通过,这没有意义,因为有 1 个单位的资源一开始就可用。

为方便起见,文档:https://simpy.readthedocs.io/en/3.0.6/topical_guides/resources.html

最佳答案

请求(以及超时和您需要yield的所有内容)由 simpy 处理,因此它需要到达 simpy 才能得到处理。您告诉 simpy 使用 env.process 处理 customer:

    env.process(customer(env,counter, 1))

customer中,您调用counter.arrive(name)。因为 arrive 是一个生成器(因为yield),所以在调用 next 之前它不会执行任何操作。 Simpy 需要知道它才能正确处理它。您应该能够通过以下方式执行此操作:

env.process(counter.arrive(name))

这应该可以解决您的问题。

请注意,在此代码中您也永远不会释放资源,因此实际上只有一个客户可以到达。

关于python - 请求 Simpy 资源永远不会成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55306821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com