Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Introduce a Mailbox::get_async() with no payload parameter
[simgrid.git] / examples / python / activityset-waitallfor / activityset-waitallfor.py
1 # Copyright (c) 2017-2023. The SimGrid Team. All rights reserved.
2 #
3 # This program is free software you can redistribute it and/or modify it
4 # under the terms of the license (GNU LGPL) which comes with this package.
5
6 """
7 Usage: activityset-waitallfor.py platform_file [other parameters]
8 """
9
10 import sys
11 from simgrid import Actor, ActivitySet, Engine, Comm, Exec, Io, Host, Mailbox, this_actor, TimeoutException
12
13 def bob():
14   mbox = Mailbox.by_name("mbox")
15   disk = Host.current().get_disks()[0]
16
17   this_actor.info("Create my asynchronous activities")
18   exec = this_actor.exec_async(5e9)
19   comm = mbox.get_async()
20   io   = disk.read_async(300000000)
21
22   pending_activities = ActivitySet([exec, comm])
23   pending_activities.push(io) # Activities can be pushed after creation, too
24  
25   this_actor.info("Wait for asynchronous activities to complete")
26   while not pending_activities.empty():
27     try:
28       pending_activities.wait_all_for(1)
29     except TimeoutException:
30       this_actor.info("Not all activities are terminated yet.")
31
32     completed_one = pending_activities.test_any()
33     while completed_one != None:
34       if isinstance(completed_one, Comm):
35         this_actor.info("Completed a Comm")
36       elif isinstance(completed_one, Exec):
37         this_actor.info("Completed an Exec")
38       elif isinstance(completed_one, Io):
39         this_actor.info("Completed an I/O")
40       completed_one = pending_activities.test_any()
41
42   this_actor.info("Last activity is complete")
43
44 def alice():
45   this_actor.info("Send 'Message'")
46   Mailbox.by_name("mbox").put("Message", 600000000)
47
48 if __name__ == '__main__':
49   e = Engine(sys.argv)
50   e.set_log_control("root.fmt:[%4.6r]%e[%5a]%e%m%n")
51
52   # Load the platform description
53   e.load_platform(sys.argv[1])
54
55   Actor.create("bob",   Host.by_name("bob"), bob)
56   Actor.create("alice", Host.by_name("alice"), alice)
57
58   e.run()