Repository: kedro-org/kedro

Issue:
Inform users about not using `--async`
## Description
As discussed in https://github.com/kedro-org/kedro/issues/2036#issuecomment-1460425776 there's a possibility that users aren't aware of the `--async` feature. Instead of only logging that the async is enabled when it is, change the logging to mention that async isn't being used by default and offer steps on how to use it. 

## Context
https://github.com/kedro-org/kedro/issues/2036

## Possible Implementation
Message could be: "Asynchronous mode is disabled for loading and saving data. Use the `--async` flag for potential performance gains. https://docs.kedro.org/en/stable/nodes_and_pipelines/run_a_pipeline.html#load-and-save-asynchronously"
(Not sure if a link in logs is good practice though.. )



Discussion:
A link in logs is fine, and rich should even render it nicely and make it clickable 🙂 

Resolving patch:
diff --git a/kedro/runner/parallel_runner.py b/kedro/runner/parallel_runner.py
--- a/kedro/runner/parallel_runner.py
+++ b/kedro/runner/parallel_runner.py
@@ -256,6 +256,11 @@ def _run(  # noqa: too-many-locals,useless-suppression
 
         """
         # noqa: import-outside-toplevel,cyclic-import
+        if not self._is_async:
+            self._logger.info(
+                "Using synchronous mode for loading and saving data. Use the --async flag "
+                "for potential performance gains. https://docs.kedro.org/en/stable/nodes_and_pipelines/run_a_pipeline.html#load-and-save-asynchronously"
+            )
 
         nodes = pipeline.nodes
         self._validate_catalog(catalog, pipeline)
diff --git a/kedro/runner/sequential_runner.py b/kedro/runner/sequential_runner.py
--- a/kedro/runner/sequential_runner.py
+++ b/kedro/runner/sequential_runner.py
@@ -60,6 +60,11 @@ def _run(
         Raises:
             Exception: in case of any downstream node failure.
         """
+        if not self._is_async:
+            self._logger.info(
+                "Using synchronous mode for loading and saving data. Use the --async flag "
+                "for potential performance gains. https://docs.kedro.org/en/stable/nodes_and_pipelines/run_a_pipeline.html#load-and-save-asynchronously"
+            )
         nodes = pipeline.nodes
         done_nodes = set()
 


Test patch:
diff --git a/tests/runner/test_parallel_runner.py b/tests/runner/test_parallel_runner.py
--- a/tests/runner/test_parallel_runner.py
+++ b/tests/runner/test_parallel_runner.py
@@ -73,6 +73,11 @@ def test_memory_dataset_input(self, is_async, fan_out_fan_in):
         assert len(result["Z"]) == 3
         assert result["Z"] == ("42", "42", "42")
 
+    def test_log_not_using_async(self, fan_out_fan_in, catalog, caplog):
+        catalog.add_feed_dict({"A": 42})
+        ParallelRunner().run(fan_out_fan_in, catalog)
+        assert "Using synchronous mode for loading and saving data." in caplog.text
+
 
 class TestMaxWorkers:
     @pytest.mark.parametrize("is_async", [False, True])
diff --git a/tests/runner/test_sequential_runner.py b/tests/runner/test_sequential_runner.py
--- a/tests/runner/test_sequential_runner.py
+++ b/tests/runner/test_sequential_runner.py
@@ -29,6 +29,11 @@ def test_run_without_plugin_manager(self, fan_out_fan_in, catalog):
         assert "Z" in result
         assert result["Z"] == (42, 42, 42)
 
+    def test_log_not_using_async(self, fan_out_fan_in, catalog, caplog):
+        catalog.add_feed_dict({"A": 42})
+        SequentialRunner().run(fan_out_fan_in, catalog)
+        assert "Using synchronous mode for loading and saving data." in caplog.text
+
 
 @pytest.mark.parametrize("is_async", [False, True])
 class TestSeqentialRunnerBranchlessPipeline:
diff --git a/tests/runner/test_thread_runner.py b/tests/runner/test_thread_runner.py
--- a/tests/runner/test_thread_runner.py
+++ b/tests/runner/test_thread_runner.py
@@ -34,6 +34,11 @@ def test_memory_dataset_input(self, fan_out_fan_in):
         assert "Z" in result
         assert result["Z"] == ("42", "42", "42")
 
+    def test_does_not_log_not_using_async(self, fan_out_fan_in, catalog, caplog):
+        catalog.add_feed_dict({"A": 42})
+        ThreadRunner().run(fan_out_fan_in, catalog)
+        assert "Using synchronous mode for loading and saving data." not in caplog.text
+
 
 class TestMaxWorkers:
     @pytest.mark.parametrize(