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)