码迷,mamicode.com
首页 > 其他好文 > 详细

深入Asyncio(十)异步解析式

时间:2018-10-22 11:37:40      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:协程函数   例子   迭代   注意   main   异步   pytho   接下来   问题   

Async Comprehensions

目前已经学会了如何在Python中进行异步迭代,接下来的问题是这是否适用于解析式?答案是OJBK!该支持在PEP 530中提及,建议去读一下。

>>> import asyncio
>>> async def doubler(n):   # 1
...     for i in range(n):
...             yield i, i*2
...             await asyncio.sleep(0.1)    # 2
>>> async def main():
...     result = [x async for x in doubler(3)]  # 3
...     print(result)
...     result = {x: y async for x, y in doubler(3)}
...     print(result)
...     result = {x async for x in doubler(3)}
...     print(result)
>>> asyncio.get_event_loop().run_until_complete(main())
[(0, 0), (1, 2), (2, 4)]
{0: 0, 1: 2, 2: 4}
{(1, 2), (0, 0), (2, 4)}
  1. 这是个简单的异步生成器;

  2. sleep一会,确保这是个异步函数;

  3. 观察如何用async for替代for;


在PEP 530后半段有介绍在解析式中使用await,但要注意的是,await只能在async def函数体中使用。

继续用例子来熟悉异步编程语法。

>>> import asyncio
>>> async def f(x):    # 1
...     await asyncio.sleep(0.1)
...     return x + 100
>>> async def fac(n):   # 2
...     for x in range(n):
...             await asyncio.sleep(0.1)
...             yield f, x  # 3
>>> async def main():
...     results = [await f(x) async for f, x in fac(3)]    # 4
...     print(‘results=‘, results)
>>> asyncio.get_event_loop().run_until_complete(main())
results= [100, 101, 102]
  1. 一个简单的协程函数;

  2. 异步生成器;

  3. 返回一个包含函数和参数的tuple;

  4. fac(3)返回一个异步生成器,必须用异步for调用,返回值是几个tuple,通过参数中的函数调用生成一个coroutine,用await处理coroutine,awaitasync for做的是完全不相关的事。

深入Asyncio(十)异步解析式

标签:协程函数   例子   迭代   注意   main   异步   pytho   接下来   问题   

原文地址:https://www.cnblogs.com/ikct2017/p/9829045.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!