我有2个过程的模拟,P1和P2。有两个资源,R1和R2。
P1使用R1表示20',R2表示10' P2使用R2表示10'
我想使用SimPy实现以下逻辑并需要一些指导:
If R2 is free:
run P2
If R1 and R2 are free:
run P1
谢谢!
答案 0 :(得分:0)
SimPy提供的是resource.request()
。
这是第一个案例的一个小例子。
resource_free = yield my_resource.request()
if my_resource_request() in resource_free:
TODO: P1.run()
我们在这里做的是我们要求资源。当资源产生时,它可以自由使用,我们将其带入resource_free
。
答案 1 :(得分:0)
您需要查询资源的内容。
让我们将您的资源定义为:
# Number of users currently using the resources.
num_users_R1 = R1.count()
num_users_R2 = R2.count()
您可以询问有关这些资源的可用性的问题:
# if both are free do process 1
if num_users_R2 + num_users_R2 == 2:
process_1()
# otherwise do process 2
else:
process_2()
现在您知道这一点,您可以使用if语句告诉sim要遵循哪些流程。
import time
import threading
import pytest
class A(object):
def __init__(self):
self._thread_a = threading.Thread(target=self.do_a)
self._thread_a.start()
pytest.main()
def do_a(self):
print "a"
time.sleep(2)
self.do_a()
if __name__ == "__main__":
a = A()
您可以在官方文档中阅读有关资源命令的更多信息:http://simpy.readthedocs.io/en/latest/api_reference/simpy.resources.html