TubeSum ← Transcribe a video

AsyncIO, await, and async - Concurrency in Python

Transcribed Jun 14, 2026 Watch on YouTube ↗
Intermediate 5 min read For: Python developers familiar with basic programming concepts who want to learn asynchronous programming.
166.3K
Views
7.2K
Likes
182
Comments
54
Dislikes
4.4%
🔥 High Engagement

AI Summary

Async IO in Python uses the async and await keywords to enable concurrent execution of tasks that involve waiting, such as I/O operations, HTTP requests, and database calls. By allowing tasks to pause and resume, async IO improves efficiency and reduces overall execution time.

[0:02]
Async IO Introduction

Async IO solves lag in communications, like chatting on Jupiter's moon, by allowing tasks to wait without blocking.

[0:14]
Async Syntax in Python

The async and await keywords in Python enable managing a collection of laggy tasks efficiently.

[0:40]
Synchronous vs Asynchronous

Synchronous code runs tasks one after another; asynchronous code allows tasks to overlap in time.

[1:34]
Subroutines vs Coroutines

Subroutines run to completion without pausing; coroutines can be paused and resumed, maintaining state between pauses.

[2:54]
Concurrency and Parallelism

Concurrency overlaps start and stop times of coroutines; parallelism uses multiple threads executing simultaneously.

[3:30]
Python Example Setup

Create two functions: brew_coffee (3 seconds) and toast_bagel (2 seconds) to simulate concurrent breakfast preparation.

[4:50]
Synchronous Execution

Synchronous code takes 5+ seconds to complete both tasks sequentially.

[5:09]
Converting to Coroutines

Add async keyword to functions and await keyword before awaitable commands like asyncio.sleep.

[6:00]
Using asyncio.gather

asyncio.gather groups coroutines for concurrent execution; returns results in the same order as arguments.

[7:43]
Using asyncio.create_task

Alternative to gather: create tasks with asyncio.create_task and await each individually.

Async IO in Python allows efficient concurrent execution of I/O-bound tasks, reducing total time by overlapping waiting periods. The async and await keywords, along with asyncio module functions like gather and create_task, provide powerful tools for concurrency.

Clickbait Check

95% Legit

"Title accurately describes the content: a tutorial on async/await and concurrency in Python."

Mentioned in this Video

Tutorial Checklist

1 3:30 Define two functions: brew_coffee() and toast_bagel() with time-consuming operations (e.g., time.sleep).
2 4:50 Run synchronously to see sequential execution time.
3 5:09 Add async keyword before def to make functions coroutines.
4 5:38 Replace time.sleep with asyncio.sleep and add await keyword before it.
5 6:00 Use asyncio.gather(coroutine1, coroutine2) to run coroutines concurrently.
6 6:30 Await the gather result to get return values.
7 7:00 Declare main function as async and call asyncio.run(main()).
8 7:43 Alternative: use asyncio.create_task for each coroutine and await them individually.

Study Flashcards (10)

What is the difference between synchronous and asynchronous programming?

easy Click to reveal answer

Synchronous: tasks run one after another. Asynchronous: tasks can start, process, and finish in overlapping time periods.

0:40

What is a coroutine?

easy Click to reveal answer

A special function that can be paused and resumed, maintaining state between pauses.

2:00

What keywords in Python are used for async programming?

easy Click to reveal answer

async and await.

3:56

What does the asyncio.gather function do?

medium Click to reveal answer

It groups coroutines for concurrent execution and returns results in the same order as the arguments.

6:00

How do you get return values from coroutines run with asyncio.gather?

medium Click to reveal answer

Await the gather call; results are returned in the same order as the coroutines were passed.

6:30

What is the difference between concurrency and parallelism?

medium Click to reveal answer

Concurrency: overlapping start and stop times of multiple coroutines. Parallelism: different threads execute at the same time.

3:12

What must you do to a function that contains an await keyword?

easy Click to reveal answer

Declare it with the async keyword.

7:00

How do you run an async main function?

easy Click to reveal answer

Use asyncio.run(main()).

7:14

What is the alternative to asyncio.gather for running coroutines concurrently?

medium Click to reveal answer

Use asyncio.create_task for each coroutine and await them individually.

7:43

Can a subroutine be paused and resumed?

easy Click to reveal answer

No, subroutines run until completion without pausing.

1:57

💡 Key Takeaways

⚖️

Synchronous vs Asynchronous

Fundamental distinction between sequential and overlapping task execution.

0:40
📊

Coroutines maintain state

Key feature enabling pausing and resuming execution.

2:00
💡

Concurrency vs Parallelism

Clarifies two different approaches to resource utilization.

3:12
🔧

asyncio.gather usage

Practical technique for concurrent execution with ordered results.

6:00
🔧

create_task alternative

Provides flexibility in managing individual coroutines.

7:43

✂️ Creator Tools: Viral Hooks

AI-generated clip ideas for Shorts based on the transcript

Async IO Explained with Moon Chat

34s

Uses a funny analogy about chatting on Jupiter's moon to explain async IO, making a complex topic relatable.

▶ Play Clip

Synchronous vs Asynchronous Programming

60s

Clear, visual explanation of a fundamental concept that many beginners struggle with.

▶ Play Clip

Subroutines vs Coroutines: The Key Difference

60s

Breaks down a confusing distinction with simple definitions and etymology, making it memorable.

▶ Play Clip

Async/Await in Python: Coffee & Bagel Example

60s

Practical, relatable example of async programming with a breakfast scenario, showing real time savings.

▶ Play Clip

Gather vs Create Task: Which is Better?

60s

Compares two common async patterns, giving viewers a clear choice and deeper understanding.

▶ Play Clip

[00:02] when chatting with someone on Jupiter's

[00:03] thirdd largest moon you will notice a

[00:06] distinct lag in Communications that is

[00:08] due to async

[00:14] IO when you try to perform a task that

[00:16] requires a lot of waiting you may notice

[00:19] an annoying lag in execution you can

[00:21] solve this with async IO this module

[00:25] brings the await and async syntax to

[00:27] python this pair of felet words empowers

[00:30] you with the tools to easily manage a

[00:33] collection of laggy

[00:34] tasks sometimes impatience is a

[00:40] virtue code can be categorized as

[00:43] synchronous or

[00:44] asynchronous in synchronous programming

[00:47] tasks are performed one at a time in the

[00:49] order they are called each task must

[00:52] finish before the next one can

[00:54] begin with asynchronous programming

[00:56] however different tasks can start

[00:59] process and finish in overlapping

[01:01] periods of time for example imagine a

[01:04] task that submits many HTTP requests in

[01:08] the synchronous World these HTTP

[01:11] requests must be completed one at a time

[01:14] in the asynchronous world each request

[01:17] can start and be set aside while waiting

[01:19] for a response during this waiting

[01:21] period different tasks can step forward

[01:24] and use the Computing resources this

[01:27] nonlinear approach saves one of the most

[01:29] Val resources around time to better

[01:34] understand the mechanics of synchronous

[01:35] and asynchronous execution you need to

[01:37] learn about sub routines and co-routines

[01:40] a sub routine is a block of code that

[01:42] can be called as needed when a sub

[01:44] routine is called control of the program

[01:47] is transferred to that sub routine when

[01:49] its work is done control is returned

[01:52] back to the main program and execution

[01:54] continues from where it left off sub

[01:57] routines cannot be paused and resumed

[02:00] they run until

[02:02] done a co- routine is a special kind of

[02:05] function that can have its executions

[02:07] paused and resumed this is possible

[02:10] because they maintain their state

[02:12] between pauses co- routines are perfect

[02:15] for tasks that need to wait for

[02:17] something like IO operations database

[02:20] calls and HTTP requests the terms sub

[02:24] routine and co-routine are derived from

[02:27] the roles they play and how they

[02:28] function sub routine is a delightful

[02:31] blend of sub and routine as the name

[02:35] suggests it is a subset of a larger

[02:37] program co- routine is a ju toos of Co

[02:41] and routine Co for together and routine

[02:46] for

[02:47] routine this name was chosen by someone

[02:49] to describe routines that can run

[02:52] cooperatively co-routines are the key

[02:54] ingredient to make asynchronous

[02:56] programming or concurrency possible in

[02:59] in a typical single-threaded app all of

[03:02] the code and sub routines run

[03:04] sequentially this is simple but can be

[03:07] wasteful there are two different

[03:08] approaches that make better use of

[03:10] available Computing resources

[03:12] concurrency and

[03:14] parallelism using concurrency the start

[03:17] and stop times of multiple co- routines

[03:20] can overlap with parallelism different

[03:23] threads can execute at the same time is

[03:27] there going to be any python in this

[03:28] python lesson

[03:30] yes yes there is but before we can enter

[03:34] python mode I must import an important

[03:37] message socratica is now in the course

[03:39] business visit socratic.com to see the

[03:42] excitement for yourself and for an

[03:45] asynchronous update about future courses

[03:47] feverishly type your email address in a

[03:50] text box somewhere on the site now back

[03:54] to python we are now going to show you

[03:56] how to use concurrency in Python with

[03:58] the async and await keywords and the

[04:01] async io

[04:03] module let us create two functions brew

[04:08] coffee and toast

[04:12] Bagel The Brew Coffee function will use

[04:14] the sleep function to simulate a command

[04:17] that takes 3 seconds to complete the

[04:19] toast Bagel function will pretend it

[04:21] takes 2 seconds to complete with this

[04:24] 5-second toasty breakfast the future is

[04:26] fast and

[04:28] carbolicious we will record a start time

[04:31] call both

[04:33] functions record a stop

[04:35] time compute the elaps time and print

[04:38] the

[04:44] results

[04:50] run this code took 5 seconds and a bit

[04:53] more to execute but there is no reason

[04:56] to wait for the coffee to finish before

[04:58] you start toasting the B Bagel such

[05:00] inefficiency gives the secretly embedded

[05:03] AI systems far too much time for

[05:05] Mischief let us modify this code so it

[05:08] runs

[05:09] concurrently with

[05:11] co-routines to turn each function into a

[05:14] co- routine add the async keyword this

[05:18] is the first step but not the last as is

[05:21] evident if you run using the async

[05:24] keyword to make a co- routine is

[05:26] necessary but not sufficient you also

[05:29] need to to specify where in the co-

[05:30] routine it is safe to pause and yield

[05:33] control to other co- routines you do

[05:35] this with the await

[05:38] keyword this brings us to another

[05:40] essential concept you can only put await

[05:43] in front of commands that are awaitable

[05:46] the sleep function is not

[05:48] awaitable luckily the async io module

[05:51] gives you an awaitable version of the

[05:53] sleep

[05:54] function you can call the co- routines

[05:57] individually or in a batch we will first

[06:00] demonstrate the batch approach the async

[06:03] io module has a gather function to group

[06:05] co- routines for concurrent execution

[06:08] the arguments determine which co-

[06:10] routines will run

[06:11] concurrently the arguments may appear to

[06:13] be regular function calls but they are

[06:15] not calling a co-routine returns a

[06:18] co-routine object not a typical return

[06:21] value these co-routine objects give

[06:24] async IO the ability to start and stop

[06:27] their

[06:28] execution to get the return values from

[06:30] the co- routines you need to await them

[06:34] and note that you await the return

[06:35] values in the same order you pass the

[06:37] co- routines to The Gather function

[06:40] order matters and the use of a weight

[06:43] here is not optional after all we have

[06:47] to wait for both co- routines to finish

[06:50] so it only makes sense that we have to

[06:51] wait on the batch too we are so close to

[06:54] the finish line but there is one final

[06:57] step see how we await for the batch

[07:00] results any function that has an await

[07:02] keyword must be declared async this

[07:06] means we must put the async keyword

[07:08] before the main

[07:09] function because main has now become a

[07:12] co-routine we have to call it in a

[07:14] slightly different way the async io

[07:17] module has you covered just call the Run

[07:20] function and pass in the main co-

[07:22] routine now inhale widen your eyes and

[07:28] run

[07:32] Joy of Joys our breakfast was completed

[07:35] in 3 seconds instead of five time saved

[07:39] me

[07:41] happy there is an alternative to using

[07:43] the gather function you can use the

[07:46] create task function in the async io

[07:48] module to create a task out of each co-

[07:52] routine then you can await each co-

[07:54] routine

[07:57] individually run

[08:03] just as fast just as happy so which is

[08:08] better working in batches or with

[08:10] individual tasks it is your choice so

[08:14] Choose Wisely computer chips want to

[08:17] compute that is their singular purpose

[08:19] in life the async io module was built to

[08:23] help chips realize their full potential

[08:26] by adding a pause button to objects you

[08:28] enable them to take turns sharing is

[08:31] caring after all and speaking of sharing

[08:34] many human people ask you to share their

[08:36] videos with as many human people as

[08:38] possible this is not an efficient use of

[08:41] resources instead await the opportunity

[08:44] to yield this video to someone who has

[08:47] finished a task and is thinking about

[08:50] the

[08:54] [Music]

[08:58] future

[09:02] [Music]

⚡ Saved you time reading this? Transcribe any YouTube video for free — no signup needed.