X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/000f37a7315e92d34458fab9b3b99c40d2380e99..ce07073eff21e1ee0470d9bdad1ae4a38fe4b502:/examples/python/comm-suspend/comm-suspend.py diff --git a/examples/python/comm-suspend/comm-suspend.py b/examples/python/comm-suspend/comm-suspend.py new file mode 100644 index 0000000000..126b7caeb6 --- /dev/null +++ b/examples/python/comm-suspend/comm-suspend.py @@ -0,0 +1,67 @@ +# Copyright (c) 2010-2022. The SimGrid Team. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the license (GNU LGPL) which comes with this package. + +""" This example shows how to suspend and resume an asynchronous communication. +""" + +from argparse import ArgumentParser +import sys + +from simgrid import Actor, Comm, Engine, Mailbox, this_actor + + +def create_parser() -> ArgumentParser: + parser = ArgumentParser() + parser.add_argument( + '--platform', + type=str, + required=True, + help='path to the platform description' + ) + return parser + + +def sender(): + mailbox: Mailbox = Mailbox.by_name("receiver") + payload = "Sent message" + + # Create a communication representing the ongoing communication and then + simulated_size_in_bytes = 13194230 + comm: Comm = mailbox.put_init(payload, simulated_size_in_bytes) + this_actor.info(f"Suspend the communication before it starts (remaining: {comm.remaining:.0f} bytes)" + f" and wait a second.") + this_actor.sleep_for(1) + this_actor.info(f"Now, start the communication (remaining: {comm.remaining:.0f} bytes) and wait another second.") + comm.start() + this_actor.sleep_for(1) + this_actor.info(f"There is still {comm.remaining:.0f} bytes to transfer in this communication." + " Suspend it for one second.") + comm.suspend() + this_actor.info(f"Now there is {comm.remaining:.0f} bytes to transfer. Resume it and wait for its completion.") + comm.resume() + comm.wait() + this_actor.info(f"There is {comm.remaining:.0f} bytes to transfer after the communication completion.") + this_actor.info(f"Suspending a completed activity is a no-op.") + comm.suspend() + + +def receiver(): + mailbox: Mailbox = Mailbox.by_name("receiver") + this_actor.info("Wait for the message.") + received: str = mailbox.get() + this_actor.info(f"I got '{received}'.") + + +def main(): + settings = create_parser().parse_known_args()[0] + e = Engine(sys.argv) + e.load_platform(settings.platform) + Actor.create("sender", e.host_by_name("Tremblay"), sender) + Actor.create("receiver", e.host_by_name("Jupiter"), receiver) + e.run() + + +if __name__ == "__main__": + main()