MCPcopy Create free account
hub / github.com/dask/dask / diagnostics

Function diagnostics

dask/order.py:767–824  ·  view source on GitHub ↗

Simulate runtime metrics as though running tasks one at a time in order. These diagnostics can help reveal behaviors of and issues with ``order``. Returns a dict of `namedtuple("OrderInfo")` and a list of the number of outputs held over time. OrderInfo fields: - order : the order

(
    dsk: MutableMapping[Key, Any],
    o: Mapping[Key, int] | None = None,
    dependencies: MutableMapping[Key, set[Key]] | None = None,
)

Source from the content-addressed store, hash-verified

765
766
767def diagnostics(
768 dsk: MutableMapping[Key, Any],
769 o: Mapping[Key, int] | None = None,
770 dependencies: MutableMapping[Key, set[Key]] | None = None,
771) -> tuple[dict[Key, OrderInfo], list[int]]:
772 """Simulate runtime metrics as though running tasks one at a time in order.
773
774 These diagnostics can help reveal behaviors of and issues with ``order``.
775
776 Returns a dict of `namedtuple("OrderInfo")` and a list of the number of outputs held over time.
777
778 OrderInfo fields:
779 - order : the order in which the node is run.
780 - age : how long the output of a node is held.
781 - num_data_when_run : the number of outputs held in memory when a node is run.
782 - num_data_when_released : the number of outputs held in memory when the output is released.
783 - num_dependencies_freed : the number of dependencies freed by running the node.
784 """
785 if dependencies is None:
786 dependencies, dependents = get_deps(dsk)
787 else:
788 dependents = reverse_dict(dependencies)
789 assert dependencies is not None
790 if o is None:
791 o = order(dsk, dependencies=dependencies, return_stats=False)
792
793 pressure = []
794 num_in_memory = 0
795 age = {}
796 runpressure = {}
797 releasepressure = {}
798 freed = {}
799 num_needed = {key: len(val) for key, val in dependents.items()}
800 for i, key in enumerate(sorted(dsk, key=o.__getitem__)):
801 pressure.append(num_in_memory)
802 runpressure[key] = num_in_memory
803 released = 0
804 for dep in dependencies[key]:
805 num_needed[dep] -= 1
806 if num_needed[dep] == 0:
807 age[dep] = i - o[dep]
808 releasepressure[dep] = num_in_memory
809 released += 1
810 freed[key] = released
811 if dependents[key]:
812 num_in_memory -= released - 1
813 else:
814 age[key] = 0
815 releasepressure[key] = num_in_memory
816 num_in_memory -= released
817
818 rv = {
819 key: OrderInfo(
820 val, age[key], runpressure[key], releasepressure[key], freed[key]
821 )
822 for key, val in o.items()
823 }
824 return rv, pressure

Callers 15

visualize_dskFunction · 0.90
test_gh_3055Function · 0.90
test_diagnosticsFunction · 0.90
test_array_vs_dataframeFunction · 0.90
test_anom_meanFunction · 0.90

Calls 4

get_depsFunction · 0.90
reverse_dictFunction · 0.90
orderFunction · 0.85
itemsMethod · 0.45

Tested by 15

test_gh_3055Function · 0.72
test_diagnosticsFunction · 0.72
test_array_vs_dataframeFunction · 0.72
test_anom_meanFunction · 0.72
test_doublediffFunction · 0.72