class Receiver: def __init__(self, *args): if len(args) != 1: # Receiver actor expects 1 argument: its ID raise AssertionError( "Actor receiver requires 1 parameter, but got {:d}".format(len(args))) self.mbox = Mailbox.by_name("receiver-{:s}".format(args[0])) def __call__(self): this_actor.info("Wait for my first message") while True: received = self.mbox.get() this_actor.info("I got a '{:s}'.".format(received)) if received == "finalize": break # If it's a finalize message, we're done. if __name__ == '__main__': e = Engine(sys.argv) # Load the platform description e.load_platform(sys.argv[1]) # Register the classes representing the actors e.register_actor("sender", Sender) e.register_actor("receiver", Receiver) e.load_deployment(sys.argv[2]) e.run()
# This serves as an example for the simgrid.yield() function, with which an actor can request # to be rescheduled after the other actor that are ready at the current timestamp. # # It can also be used to benchmark our context-switching mechanism. class Yielder: """Main function of the Yielder process""" number_of_yields = 0 def __init__(self, *args): self.number_of_yields = int(args[0]) def __call__(self): for _ in range(self.number_of_yields): this_actor.yield_() this_actor.info("I yielded {:d} times. Goodbye now!".format( self.number_of_yields)) if __name__ == '__main__': e = Engine(sys.argv) e.load_platform(sys.argv[1]) # Load the platform description # Register the class representing the actors e.register_actor("yielder", Yielder) e.load_deployment(sys.argv[2]) e.run() # - Run the simulation