X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3fb28e990d3e18eef76fa5d21a134f0bd4e2fbaa..039807fd1fb02afb72365fe19a6ad620d1bbf4c7:/examples/python/task-switch-host/task-switch-host.py diff --git a/examples/python/task-switch-host/task-switch-host.py b/examples/python/task-switch-host/task-switch-host.py index 3bd21e66e5..03dce6a7fb 100644 --- a/examples/python/task-switch-host/task-switch-host.py +++ b/examples/python/task-switch-host/task-switch-host.py @@ -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()