Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
smpi: fix issue with message IDs. In case of persistent request reused multiple times...
[simgrid.git] / examples / python / task-switch-host / task-switch-host.py
index 3bd21e66e5dfcef813456297ed0b79cae93561b8..03dce6a7fbcddeef2700891a4410f00dcc511a67 100644 (file)
@@ -4,12 +4,12 @@
 # under the terms of the license (GNU LGPL) which comes with this package.
 
 """
-/* This example demonstrates how to dynamically modify a graph of tasks.
- *
- * Assuming we have two instances of a service placed on different hosts,
- * we want to send data alternatively to thoses instances.
- *
- * We consider the following graph:
+This example demonstrates how to dynamically modify a graph of tasks.
+
+Assuming we have two instances of a service placed on different hosts,
+we want to send data alternatively to thoses instances.
+
+We consider the following graph:
 
            comm1
      ┌────────────────────────┐
@@ -26,8 +26,8 @@
      │                        │
      └────────────────────────┘
            comm2
- */
- """
+
+"""
 
 from argparse import ArgumentParser
 import sys
@@ -44,18 +44,21 @@ def parse():
     return parser.parse_args()
 
 def callback(t):
-    print(f'[{Engine.clock}] {t} finished ({t.count})')
+    print(f'[{Engine.clock}] {t} finished ({t.get_count()})')
+
+def switch_destination(t, hosts):
+    t.destination = hosts[switch_destination.count % 2]
+    switch_destination.count += 1
+switch_destination.count = 0
 
-def switch(t, hosts, execs):
-    comm0.destination = hosts[t.count % 2]
-    comm0.remove_successor(execs[t.count % 2 - 1])
-    comm0.add_successor(execs[t.count % 2])
+def switch_successor(t, execs):
+    t.remove_successor(execs[t.get_count() % 2])
+    t.add_successor(execs[t.get_count() % 2 - 1])
 
 if __name__ == '__main__':
     args = parse()
     e = Engine(sys.argv)
     e.load_platform(args.platform)
-    Task.init()
 
     # Retrieve hosts
     tremblay = e.host_by_name('Tremblay')
@@ -75,16 +78,19 @@ if __name__ == '__main__':
     exec1.add_successor(comm1)
     exec2.add_successor(comm2)
 
-    # Add a function to be called when tasks end for log purpose
-    Task.on_end_cb(callback)
+    # Add a callback when tasks end for log purpose
+    Task.on_completion_cb(callback)
+
+    # Add a callback before each firing of comm0
+    # It switches the destination of comm0
+    comm0.on_this_start_cb(lambda t: switch_destination(t, [jupiter, fafard]))
 
-    # Add a function to be called before each executions of comm0
-    # This function modifies the graph of tasks by adding or removing
-    # successors to comm0
-    comm0.on_this_start(lambda t: switch(t, [jupiter, fafard], [exec1,exec2]))
+    # Add a callback before comm0 send tokens to successors
+    # It switches the successor of comm0
+    comm0.on_this_completion_cb(lambda t: switch_successor(t, [exec1,exec2]))
 
-    # Enqueue two executions for task exec1
-    comm0.enqueue_execs(4)
+    # Enqueue two firings for task exec1
+    comm0.enqueue_firings(4)
 
     # runs the simulation
     e.run()