Skip to content

fuyuantan/python-async-basic

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 

Repository files navigation

最近在看 LLM MCP,代码里面有异步编程,所以找了异步编程的东西看看。

掌握 Python 异步编程,了解何时使用 async、async with 和 await。

• 使用 async
1. 定义异步函数时:当你需要创建一个可以挂起执行并让出控制权的函数。
async def my_function():
    # 这是一个异步函数
    pass
2. 定义异步方法时:在类中定义异步方法。 
class MyClass:
    async def async_method(self):
      # 这是一个异步方法
       pass
3. 定义异步生成器时:使用 async for 语句的生成器。
async def async_generator():
        for i in range(10):
                await asyncio.sleep(0.1)
                yield i
 

• 使用 async with
1. 使用异步上下文管理器时:当你需要在异步函数中使用支持异步上下文管理协议的对象。 
async def example():
    async with aiohttp.ClientSession() as session:
      # 在这个块中使用session
    pass

2. 需要自动化异步资源管理时:如异步文件操作、数据库连接等。 
async def example():
        async with AsyncDatabase() as db:
                await db.execute("SELECT * FROM table")


• 使用 await
1. 调用异步函数时:当你需要等待一个协程(异步函数的结果)完成。 
async def main():
        result = await fetch_data()

2. 等待异步操作完成时:如I/O操作、网络请求等。 
async def get_page(url):
        async with aiohttp.ClientSession() as session:
                response = await session.get(url)
                return await response.text()

3. 等待异步任务或Future对象时: 
task = asyncio.create_task(long_running_job())
result = await task
4. 等待其他可等待对象时:包括协程、任务和 Future。 
await asyncio.sleep(1)  # 等待一个内置的异步函数


• 记住的关键点
1. async 修饰函数/方法定义,将其标记为协程函数。
2. await 只能在 async 函数内部使用,用于等待协程、任务或 Future 完成。
3. async with 用于异步上下文管理器,自动调用对象的__aenter__和__aexit__方法。
4. 不能直接调用异步函数,必须使用 await 或将其包装成任务。
5. 在异步函数中应该避免使用阻塞操作,应使用相应的异步版本。

About

Learn the basic usage of async in Python.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages