@@ -163,7 +163,7 @@ asyncio.run(main())
163163
164164## 内置函数
165165
166- ### aiter 函数和 anext 函数
166+ ### aiter函数、anext函数
167167
168168` aiter() ` 和 ` anext() ` 是异步版本的 ` iter() ` 和 ` next() ` ,用于处理异步迭代器。
169169
@@ -306,135 +306,3 @@ async def process_stream():
306306
307307asyncio.run(process_stream())
308308```
309-
310-
311-
312- ## asyncio
313-
314- ### asyncio 常用函数
315-
316- 虽然 asyncio 是标准库,但这里列出一些常用函数:
317-
318- ``` python showLineNumbers
319- import asyncio
320-
321- async def demo_asyncio_functions ():
322- # 1. asyncio.sleep() - 异步睡眠
323- await asyncio.sleep(1 )
324-
325- # 2. asyncio.wait_for() - 设置超时
326- try :
327- result = await asyncio.wait_for(
328- asyncio.sleep(5 ),
329- timeout = 2.0
330- )
331- except asyncio.TimeoutError:
332- print (" 操作超时" )
333-
334- # 3. asyncio.as_completed() - 按完成顺序获取结果
335- tasks = [
336- asyncio.create_task(asyncio.sleep(2 , result = " 慢任务" )),
337- asyncio.create_task(asyncio.sleep(1 , result = " 快任务" ))
338- ]
339- for coro in asyncio.as_completed(tasks):
340- result = await coro
341- print (f " 完成: { result} " )
342- # 输出顺序: 快任务, 慢任务
343-
344- asyncio.run(demo_asyncio_functions())
345- ```
346-
347- ### asyncio.gather()
348-
349- 使用 ` asyncio.gather() ` 或 ` asyncio.create_task() ` 可以并发执行多个协程。
350-
351- 函数签名:
352- - ` asyncio.gather(*coros_or_futures, loop=None, return_exceptions=False) -> List[Any] `
353-
354- 参数说明:
355- - ` *coros_or_futures ` :协程或 future 对象
356- - ` loop=None ` :事件循环,默认使用当前事件循环
357- - ` return_exceptions=False ` :是否返回异常,默认不返回
358-
359- 返回值说明:
360- - 返回结果为列表,列表中包含所有协程或 future 对象的返回结果
361- - 如果` return_exceptions=True ` ,则返回结果为列表,列表中包含所有协程或 future 对象的返回结果,包括异常
362-
363- ``` python showLineNumbers
364- import asyncio
365- import time
366-
367- async def task (name , duration ):
368- """ 模拟一个异步任务"""
369- print (f " 任务 { name} 开始 " )
370- await asyncio.sleep(duration)
371- print (f " 任务 { name} 完成 " )
372- return f " 结果- { name} "
373-
374- async def main ():
375- # 方法1: 使用 gather 并发执行
376- start = time.time()
377- results = await asyncio.gather(
378- task(" A" , 2 ),
379- task(" B" , 1 ),
380- task(" C" , 3 )
381- )
382- print (f " 结果: { results} " )
383- print (f " 总耗时: { time.time() - start:.2f } 秒 " )
384- # 总耗时约3秒(最长任务的时间),而非6秒
385-
386- asyncio.run(main())
387- # 输出:
388- # 任务 A 开始
389- # 任务 B 开始
390- # 任务 C 开始
391- # 任务 B 完成
392- # 任务 A 完成
393- # 任务 C 完成
394- # 结果: ['结果-A', '结果-B', '结果-C']
395- # 总耗时: 3.00秒
396- ```
397- ### asyncio.create_task()
398-
399- 使用 ` asyncio.gather() ` 或 ` asyncio.create_task() ` 可以并发执行多个协程。
400-
401- 函数签名:
402- - ` asyncio.create_task(coro, *, name=None) `
403-
404- 参数说明:
405- - ` coro ` :协程对象
406- - ` name=None ` :任务名称,默认不设置
407-
408- 返回值说明:
409- - 返回结果为任务对象
410-
411-
412- ``` python showLineNumbers
413- import asyncio
414- import time
415-
416- async def task (name , duration ):
417- """ 模拟一个异步任务"""
418- print (f " 任务 { name} 开始 " )
419- await asyncio.sleep(duration)
420- print (f " 任务 { name} 完成 " )
421- return f " 结果- { name} "
422-
423- async def main2 ():
424- start = time.time()
425-
426- # 创建任务,立即开始执行
427- task1 = asyncio.create_task(task(" X" , 2 ))
428- task2 = asyncio.create_task(task(" Y" , 1 ))
429- task3 = asyncio.create_task(task(" Z" , 3 ))
430-
431- # 等待所有任务完成
432- result1 = await task1
433- result2 = await task2
434- result3 = await task3
435-
436- print (f " 结果: { result1} , { result2} , { result3} " )
437- print (f " 总耗时: { time.time() - start:.2f } 秒 " )
438-
439- asyncio.run(main2())
440- ```
0 commit comments