Ejemplo n.º 1
0
def test_absent_tasks():
    # given
    dependencies = {
        'a': {'b', 'c'},
    }

    funcs = {
        'a': a,
        'b': b,
        'c': c,
    }

    # then
    with pytest.raises(ValueError):

        # when
        taskmap.create_graph(funcs, dependencies)
Ejemplo n.º 2
0
def test_tasks_can_be_marked_done():
    # given
    funcs = {'a': a, 'b': b}
    dependencies = {'a': ['b'], 'b': []}

    # when
    graph = taskmap.create_graph(funcs, dependencies, done=['b'])

    # then
    assert taskmap.get_ready_tasks(graph) == ['a']
Ejemplo n.º 3
0
def test_graph_ordered_ready():
    # given
    dependencies = {'a': set(), 'b': set()}
    funcs = {'a': a, 'b': b}
    io_bound = ['a']
    graph = taskmap.create_graph(funcs, dependencies, io_bound=io_bound)

    # when
    results = taskmap.get_ready_tasks(graph)

    # then
    assert results == ['a', 'b']
Ejemplo n.º 4
0
def test_async_parallel_speed():
    # given
    funcs = {'r': r, 't': t, 'w': w, 'p': p}
    dependencies = {'r': [], 't': [], 'w': [], 'p': []}
    graph = taskmap.create_graph(funcs, dependencies, io_bound=['r', 't'])

    # when
    start = time.time()
    taskmap.run_parallel_async(graph, nprocs=2, sleep=.0001)
    end = time.time()

    # then
    assert end - start < .8
Ejemplo n.º 5
0
def test_parallel_speed():
    # given
    funcs = {'x': u, 'y': v}
    dependencies = {'x': [], 'y': []}
    graph = taskmap.create_graph(funcs, dependencies)

    # when
    start = time.time()
    taskmap.run_parallel(graph, nprocs=2, sleep=.001)
    end = time.time()

    # then
    assert end - start < .8
Ejemplo n.º 6
0
def test_async_speed():
    # given
    funcs = {'x': x, 'y': y}
    dependencies = {'x': [], 'y': []}
    graph = taskmap.create_graph(funcs, dependencies)

    # when
    start = time.time()
    taskmap.run_async(graph, sleep=0.001)
    end = time.time()

    # then
    assert end - start < .8
Ejemplo n.º 7
0
def test_async_error_handling():
    # given
    dependencies = {
        'c': ['e'],
        'e': [],
        'control': [],
    }

    funcs = {
        'e': e,
        'c': c,
        'control': control,
    }

    # when
    graph = taskmap.create_graph(funcs.copy(), dependencies.copy())
    graph = taskmap.run_async(graph, sleep=.001)

    graph_parallel = taskmap.create_graph(funcs.copy(), dependencies.copy())
    graph_parallel = taskmap.run_parallel_async(graph_parallel,
                                                nprocs=2,
                                                sleep=.001)

    # then
    expected = {
        'e': error,
        'control': 5,
        'c': 'Ancestor task e failed; task not run',
    }

    assert graph.results['c'] == expected['c']
    assert graph.results['e'].__class__ == expected['e'].__class__
    assert graph.results['e'].args == expected['e'].args
    assert graph.results['control'] == 5

    assert graph_parallel.results['c'] == expected['c']
    assert graph_parallel.results['e'].__class__ == expected['e'].__class__
    assert graph_parallel.results['e'].args == expected['e'].args
    assert graph.results['control'] == 5
Ejemplo n.º 8
0
def test_logging_filename_change():
    # given
    dependencies = {'a': []}
    funcs = {'a': a}
    name = 'test-taskmap-name'
    graph = taskmap.create_graph(funcs, dependencies, name=name,
                                 logging_config={'write': True})

    # when
    graph = taskmap.run(graph)

    # then
    assert any(name in f for f in os.listdir('./'))
Ejemplo n.º 9
0
def test_cached_results_are_used():
    # given
    funcs = {'a': a, 'b': b}
    dependencies = {'b': ['a'], 'a': []}
    results = {'a': 5}

    graph = taskmap.create_graph(
        funcs, dependencies, done=['a'], results=results)

    # when
    graph = taskmap.run(graph)

    # then
    assert graph.results['b'] == 15
Ejemplo n.º 10
0
def test_run_parllel_async():
    # given
    dependencies = {
        'ac': ['along_task', 'ab'],
        'ab': ['along_task'],
        'along_task': [],
    }

    funcs = {
        'along_task': along_task,
        'ab': ab,
        'ac': ac,
    }

    graph = taskmap.create_graph(funcs, dependencies)

    # when
    graph = taskmap.run_parallel_async(graph, nprocs=2, sleep=.001)

    # then
    assert graph.results == {'along_task': 5, 'ab': 15, 'ac': 40}
Ejemplo n.º 11
0
def test_run_parallel():
    # given
    dependencies = {
        'c': ['long_task', 'b'],
        'b': ['long_task'],
        'long_task': [],
    }

    funcs = {
        'long_task': long_task,
        'b': b,
        'c': c,
    }

    graph = taskmap.create_graph(funcs, dependencies)

    # when
    graph = taskmap.run_parallel(graph, nprocs=2, sleep=.001)

    # then
    assert graph.results == {'long_task': 5, 'b': 15, 'c': 40}
Ejemplo n.º 12
0
def test_run_pass_args():
    # given
    dependencies = {
        'c': ['a', 'b'],
        'b': ['a'],
        'a': [],
    }

    funcs = {
        'a': a,
        'b': b,
        'c': c,
    }

    graph = taskmap.create_graph(funcs, dependencies)

    # when
    graph = taskmap.run(graph)

    # then
    assert graph.results == {'a': 5, 'b': 15, 'c': 40}
Ejemplo n.º 13
0
def test_graph_ready():
    # given
    dependencies = {
        'a': {'b', 'c'},
        'b': {'c'},
        'c': set(),
    }

    funcs = {
        'a': a,
        'b': b,
        'c': c,
    }

    graph = taskmap.create_graph(funcs, dependencies)

    # when
    results = taskmap.get_ready_tasks(graph)

    # then
    assert results == ['c']
Ejemplo n.º 14
0
def test_mark_as_done_except():
    # given
    dependencies = {
        'a': {'b', 'c'},
        'b': {'c'},
        'c': set(),
    }

    funcs = {
        'a': a,
        'b': b,
        'c': c,
    }

    graph = taskmap.create_graph(funcs, dependencies)
    graph = taskmap.mark_as_done_except(graph, ['c'])

    results = taskmap.get_ready_tasks(graph)

    # then
    assert results == ['c']
Ejemplo n.º 15
0
def test_rebuilding_graph_from_failure():
    # given
    dependencies = {
        'c': ['e'],
        'e': [],
        'w': [],
    }

    funcs = {
        'e': e,
        'c': c,
        'w': w,
    }

    graph = taskmap.create_graph(funcs.copy(), dependencies.copy())
    graph = taskmap.run_parallel_async(graph, nprocs=2, sleep=.001)

    # when
    new_graph = taskmap.reset_failed_tasks(graph)

    # then
    assert new_graph.done == ['w']