1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
# Copyright (c) 2017-2025. 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.
"""
Usage: activityset-testany.py platform_file [other parameters]
"""
import sys
from simgrid import Actor, ActivitySet, Engine, Comm, Exec, Io, Host, Mailbox, this_actor
def bob():
mbox = Mailbox.by_name("mbox")
disk = Host.current().get_disks()[0]
this_actor.info("Create my asynchronous activities")
exe = this_actor.exec_async(5e9)
comm = mbox.get_async()
io = disk.read_async(300000000)
pending_activities = ActivitySet([exe, comm])
pending_activities.push(io) # Activities can be pushed after creation, too
this_actor.info("Sleep_for a while")
this_actor.sleep_for(1)
this_actor.info("Test for completed activities")
while not pending_activities.empty():
completed_one = pending_activities.test_any()
if completed_one == None:
this_actor.info("Nothing matches, test again in 0.5s")
this_actor.sleep_for(.5)
elif isinstance(completed_one, Comm):
this_actor.info("Completed a Comm")
elif isinstance(completed_one, Exec):
this_actor.info("Completed an Exec")
elif isinstance(completed_one, Io):
this_actor.info("Completed an I/O")
this_actor.info("Last activity is complete")
def alice():
this_actor.info("Send 'Message'")
Mailbox.by_name("mbox").put("Message", 600000000)
if __name__ == '__main__':
e = Engine(sys.argv)
e.set_log_control("root.fmt:[%4.2r]%e[%5a]%e%m%n")
# Load the platform description
e.load_platform(sys.argv[1])
Host.by_name("bob").add_actor("bob", bob)
Host.by_name("alice").add_actor("alice", alice)
e.run()
|