Asyncio is designed to handle asynchronous processes and concurrent task executions on an event loop. It also provides us with the asyncio.Task()
class for the purpose of wrapping coroutines in a task. Its use is to allow independently running tasks to run concurrently with other tasks on the same event loop. When a coroutine is wrapped in a task, it connects the task to the event loop and then runs automatically when the loop is started, thus providing a mechanism to automatically drive the coroutine.
The Asyncio module provides us with the asyncio.Task(coroutine)
method to handle computations with tasks. It schedules the execution of a coroutine. A task is responsible for the execution of a coroutine object in an event loop. If the wrapped coroutine yields from a future, the task suspends the execution of the wrapped coroutine and waits for the completion of the future.
When the future is complete, the execution of the wrapped coroutine restarts...