<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/learn-with-mentor-ai-a-guided-journey-through-async-python-a3nfk6zmq" -->

---
title: Learn With Mentor AI: A Guided Journey Through Async Python
description: This tutorial teaches async Python by having you converse with Real Python's Mentor AI chatbot rather than read static explanations. You tell the mentor your...
canonical: https://daily.dev/posts/learn-with-mentor-ai-a-guided-journey-through-async-python-a3nfk6zmq
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Learn With Mentor AI: A Guided Journey Through Async Python | daily.dev
og:description: This tutorial teaches async Python by having you converse with Real Python's Mentor AI chatbot rather than read static explanations. You tell the mentor your...
og:url: https://daily.dev/posts/learn-with-mentor-ai-a-guided-journey-through-async-python-a3nfk6zmq
og:image: https://api.daily.dev/og/posts/a3nFk6zmq.png
og:image:alt: Learn With Mentor AI: A Guided Journey Through Async Python
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Learn With Mentor AI: A Guided Journey Through Async Python

**[Real Python](https://daily.dev/sources/rpython)** · 12 min read · 0 upvotes · 0 comments

## Summary

This tutorial teaches async Python by having you converse with Real Python's Mentor AI chatbot rather than read static explanations. You tell the mentor your background, ask it to shorten or simplify answers, predict code output before running it, and explain concepts back so mistakes get caught. Examples cover coroutines, the event loop, 'await' versus calling a function, and how 'time.sleep()' blocks the event loop versus 'asyncio.sleep()'. Mentor AI requires a Real Python membership, offered with a free 7-day trial, and the post links to a free kit with cheat sheets, a video course, and a quiz.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://realpython.com/learn-with-mentor-ai-async-python>

## Questions this post answers

### What's the difference between calling an async function and awaiting it in Python?

Calling a function defined with 'async def' does not run any of its code; it returns a coroutine object. The code inside only runs when something drives that object, such as awaiting it or passing it to 'asyncio.run()'. So 'coroutine_object = child()' followed by 'result = await coroutine_object' is valid, and result ends up as 42.

_Developers untangling coroutine semantics can work through similar walkthroughs on daily.dev._

### Why does calling time.sleep() inside an async function block other coroutines in asyncio?

Using 'time.sleep()' inside an 'async def' function blocks the entire event loop because it does not yield control, so no other coroutine gets a turn. Running 'asyncio.gather(slow(), ticker())' where 'slow()' calls 'time.sleep(2)' prints 'slow() is done' before any ticks appear. Swapping in 'await asyncio.sleep(2)' lets the ticks print first since it properly yields to the loop.

_Anyone debugging stalled asyncio code can compare blocking versus non-blocking patterns via daily.dev._

## Similar posts on daily.dev

- [Leverage OpenAI's API in Your Python Projects – Real Python](https://daily.dev/posts/leverage-openai-s-api-in-your-python-projects-real-python-jrzhnxxik) · Real Python · 0 upvotes · 0 comments
- [Learn Python and Build Autonomous Agents](https://daily.dev/posts/learn-python-and-build-autonomous-agents-toczlnhiv) · freeCodeCamp · 10 upvotes · 0 comments
- [How I Learn \(2026 Version\) • My Tutor Agent](https://daily.dev/posts/how-i-learn-2026-version-my-tutor-agent-sea4bjusz) · Planet Python · 0 upvotes · 0 comments
- [Teaching Python with AI: A guide for educators](https://daily.dev/posts/teaching-python-with-ai-a-guide-for-educators-ptm0dfsjh) · All Things Open · 0 upvotes · 0 comments

---

Tags: [#python](https://daily.dev/tags/python)

[View this post on daily.dev](https://daily.dev/posts/learn-with-mentor-ai-a-guided-journey-through-async-python-a3nfk6zmq)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Learn With Mentor AI: A Guided Journey Through Async Python","url":"https://daily.dev/posts/learn-with-mentor-ai-a-guided-journey-through-async-python-a3nfk6zmq","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/learn-with-mentor-ai-a-guided-journey-through-async-python-a3nfk6zmq"},"datePublished":"2026-10-29T14:11:51.979Z","dateModified":"2026-10-29T14:16:05.747Z","description":"This tutorial teaches async Python by having you converse with Real Python's Mentor AI chatbot rather than read static explanations. You tell the mentor your...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d6f04ad11e8ceacae54046298f019925?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/d6f04ad11e8ceacae54046298f019925?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Real Python","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Real Python","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/rpython","url":"https://daily.dev/sources/rpython"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/learn-with-mentor-ai-a-guided-journey-through-async-python-a3nfk6zmq","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"python","timeRequired":"PT12M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Real Python","item":"https://daily.dev/sources/rpython"},{"@type":"ListItem","position":3,"name":"Learn With Mentor AI: A Guided Journey Through Async Python"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/learn-with-mentor-ai-a-guided-journey-through-async-python-a3nfk6zmq#faq","mainEntity":[{"@type":"Question","name":"What's the difference between calling an async function and awaiting it in Python?","acceptedAnswer":{"@type":"Answer","text":"Calling a function defined with 'async def' does not run any of its code; it returns a coroutine object. The code inside only runs when something drives that object, such as awaiting it or passing it to 'asyncio.run()'. So 'coroutine_object = child()' followed by 'result = await coroutine_object' is valid, and result ends up as 42. Developers untangling coroutine semantics can work through similar walkthroughs on daily.dev."}},{"@type":"Question","name":"Why does calling time.sleep() inside an async function block other coroutines in asyncio?","acceptedAnswer":{"@type":"Answer","text":"Using 'time.sleep()' inside an 'async def' function blocks the entire event loop because it does not yield control, so no other coroutine gets a turn. Running 'asyncio.gather(slow(), ticker())' where 'slow()' calls 'time.sleep(2)' prints 'slow() is done' before any ticks appear. Swapping in 'await asyncio.sleep(2)' lets the ticks print first since it properly yields to the loop. Anyone debugging stalled asyncio code can compare blocking versus non-blocking patterns via daily.dev."}}]}
```

