python3 协程 async await用法
Python 3 中的协程是异步编程的一种形式,它允许您在代码中创建可暂停的函数,以便其他任务可以运行,而不会阻塞程序的执行。async/await 是 Python 3.5 之后引入的语法,用于编写协程。
下面是一些协程和 async/await 的用法示例:
- 使用 async 关键字定义协程函数
import asyncio async def my_coroutine(): print('Coroutine started') await asyncio.sleep(1) print('Coroutine ended') loop = asyncio.get_event_loop() loop.run_until_complete(my_coroutine())
上面的代码定义了一个协程函数 my_coroutine()
,它在开始时打印一条消息,等待 1 秒钟,然后打印另一条消息。我们使用 asyncio.sleep()
函数来模拟延迟。
- 使用 asyncio.gather() 并行运行多个协程
import asyncio async def coroutine_one(): print('Coroutine one started') await asyncio.sleep(1) print('Coroutine one ended') async def coroutine_two(): print('Coroutine two started') await asyncio.sleep(2) print('Coroutine two ended') async def main(): tasks = [coroutine_one(), coroutine_two()] await asyncio.gather(*tasks) loop = asyncio.get_event_loop() loop.run_until_complete(main())
上面的代码定义了三个协程函数:coroutine_one()
、coroutine_two()
和 main()
。main()
函数并行运行 coroutine_one()
和 coroutine_two()
协程函数,我们使用 asyncio.gather()
函数来等待所有协程完成。
- 使用 asyncio.Queue() 传递消息
import asyncio async def producer(queue): print('Producer started') for i in range(5): await asyncio.sleep(1) await queue.put(i) await queue.put(None) print('Producer ended') async def consumer(queue): print('Consumer started') while True: item = await queue.get() if item is None: queue.task_done() break print(f'Consumed {item}') await asyncio.sleep(0.5) queue.task_done() print('Consumer ended') async def main(): queue = asyncio.Queue() producer_task = asyncio.create_task(producer(queue)) consumer_task = asyncio.create_task(consumer(queue)) await asyncio.gather(producer_task) await queue.join() await consumer_task loop = asyncio.get_event_loop() loop.run_until_complete(main())
上面的代码定义了三个协程函数:producer()
、consumer()
和 main()
。producer()
协程函数将数字放入队列中,并在最后放置一个 None,以表示它已经完成了它的工作。consumer()
协程函数从队列中获取项目并打印它们,直到它遇到 None。main()
函数创建了一个队列,运行了 producer()
和 consumer()
协程函数,并使用 asyncio.gather()
函数等待 producer()
完成。当队列为空时,我们使用 await queue.join()
等待所有项目被处理。最后,我们等待 consumer()
协程函数完成。
这些示例只是一些使用 async/await 实现协程的简单示例,您可以根据需要修改和扩展它们。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
2020-04-17 Python 字典递归合并
2018-04-17 python 发送邮件 带附件