X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/aaefeb18b3307df62ee762f3de31decf7ae3d442..c4c82977e0a105cdf7b04010ddd21bbf15dced4d:/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 b2904c3f56..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,12 +44,16 @@ 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() @@ -74,13 +78,16 @@ if __name__ == '__main__': exec1.add_successor(comm1) exec2.add_successor(comm2) - # Add a function to be called when tasks end for log purpose + # Add a callback when tasks end for log purpose Task.on_completion_cb(callback) - # Add a function to be called before each firing of comm0 - # This function modifies the graph of tasks by adding or removing - # successors to comm0 - comm0.on_this_start_cb(lambda t: switch(t, [jupiter, fafard], [exec1,exec2])) + # 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 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 firings for task exec1 comm0.enqueue_firings(4)