simpy - 如果当时所有资源都在使用,如何忘记客户
问题描述
我有一台服务器,一次最多可以为 3 个客户提供服务。我已将其建模为 SimPy Resource
,capacity=3
如下所示。我如何更新我的代码,以便每当有新客户到达时,如果正在使用服务器的所有容量,新客户就会被遗忘?
我已阅读文档,但找不到适合这种情况的示例。
SERVERS= 3
class Servers:
def __init__(self, env):
self.cashier = simpy.Resource(env, capacity= SERVERS)
def Customer(name, env, servers):
print('Customer %s arriving at %s' % (name, env.now))
with servers.cashier.request() as req:
yield req
print('Customer %s starts being served at %s' % (name, env.now))
yield env.timeout(35)
print('Customer %s done served at %s' % (name, env.now))
def customer_generator(env, servers):
for i in range(100):
env.process(Customer(i, env, servers))
yield env.timeout(5)
env = simpy.Environment()
servers = Servers(env)
cus_generator = env.process(customer_generator(env, servers))
env.run(1000)
解决方案
SimPy 提供了一种简单的方法来检查当前正在使用的资源容量。这可以使用<resource>.count
(链接到 API)来完成。
您的示例可以修改如下:
SERVERS= 3
class Servers:
def __init__(self, env):
self.cashier = simpy.Resource(env, capacity= SERVERS)
def Customer(name, env, servers):
print('Customer %s arriving at %s' % (name, env.now))
# check if any of the cashiers are free:
if servers.cashier.count < servers.cashier.capacity:
with servers.cashier.request() as req:
yield req
print('Customer %s starts being served at %s' % (name, env.now))
yield env.timeout(35)
print('Customer %s done served at %s' % (name, env.now))
else:
print('Customer %s leaving as there was no cashier free to serve them' % (name))
def customer_generator(env, servers):
for i in range(100):
env.process(Customer(i, env, servers))
yield env.timeout(5)
env = simpy.Environment()
servers = Servers(env)
cus_generator = env.process(customer_generator(env, servers))
env.run(1000)
请注意,else
当函数结束时,客户进程会在分支中自动销毁(忘记),而不会碰到另一个yield
.
推荐阅读
- sql - Try to make a view but have a problem ORA-00979: not a GROUP BY expression
- java - Flutter doctor --android-licenses problem
- python - xpath for scraping critic's reviews from rotten tomatoes
- python - how to verify a coupon using django framework and sqlite?
- flutter - Flutter load list with id
- pandas - My bokeh could runs fine, but outputs a blank chart. What am I doing wrong?
- javascript - How do I remove the second handle from this ui-slider?
- r - delay scrape for few minutes in R for loop
- c - 在 C 中赋值后结构不保持值。尝试打印时不显示任何值
- scala - Spark 与内核的并行性