Simpy - model single activity requiring different resource types

Viewed 10

New simpy user. Process 3 requires both resources A and B, and can only start after process 1 (by resource A) and process 2 (by resource B) have been completed. Code below seems to perform as desired, but the if / else statement looks very inelegant. Is there a 'better' way of accomplishing the same behavior?

def orchestration(self):
    # Request resources A and B
    req_resourceA = self.resourceA.request()
    req_resourceB = self.resourceB.request()

    # Wait until first resource is available (will change throughout simulation)
    available_rec = yield.self.env.any_of([req_resourceA, req_resourceB])

    if list(available_rec.keys())[0] == resourceA:
        proc1 = self.env.process(self.process1())
        yield resourceB
        proc2 = self.env.process(self.process2())
    else:
        proc2 = self.env.process(self.process2())
        yield resourceA
        proc1 = self.env.process(self.process1())
  
    # Start process 3 only after processes 1 and 2 have been completed
    yield proc1 & proc2
    yield self.env.timeout(process3_time)

    # Manually release both resource requests
    self.resourceA.release(req_resourceA)
    self.resourceB.release(req_resourceB)
0 Answers
Related