如何模拟在Simpy中使用资源组合的并行进程?

时间:2017-11-19 14:23:40

标签: resources shared simpy

我有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

谢谢!

2 个答案:

答案 0 :(得分:0)

SimPy提供的是resource.request()。 这是第一个案例的一个小例子。

resource_free = yield my_resource.request()
if my_resource_request() in resource_free:
   TODO: P1.run()

我们在这里做的是我们要求资源。当资源产生时,它可以自由使用,我们将其带入resource_free

request() docs

答案 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