相关疑难解决方法(0)

"yield from"语法在asyncio中的作用是什么?它与"await"有什么不同?

从谁写ASYNCIO代码,但正在寻求更好地理解内部工作的人的角度来看,是什么yield from,await以及如何允许异步代码这些有用吗?

有一个高度赞成的问题询问yield from语法的用法和解释异步和等待的问题,但两者都深入讨论了不同的主题,并不是对底层代码及其如何适应asyncio的简明解释.

python generator coroutine async-await python-asyncio

32
推荐指数
1
解决办法
9130
查看次数

asyncio等待对象 - 基本的例子

我试图了解如何制作一个等待的对象.文档中的定义指出:

返回迭代器的__await__方法的对象.

在该定义的指导下,我编写了示例代码:

import asyncio

async def produce_list():
        num = await Customer()
        print(num)

class Customer(object):

    def __await__(self):
        return iter([1, 2, 3, 4])

loop = asyncio.get_event_loop()
loop.run_until_complete(produce_list())
Run Code Online (Sandbox Code Playgroud)

我期望的流程是:

  1. 事件循环控制produce_list().produce_list()放弃执行num = await Customer().
  2. Customer()执行并返回一个迭代器.因为返回迭代器中的第一个值.Q1:我不清楚为什么num不成为迭代器本身.这也在做什么send
  3. 一旦达到迭代器的最后一个值.num = 4协程的执行继续print(num),并打印值4.

我得到了什么:

---------------------------------------------------------------------------
RuntimeError                              Traceback (most recent call last)
~/workspace/dashboard/so_question_await.py in <module>()
     16 
     17 loop = asyncio.get_event_loop()
---> 18 loop.run_until_complete(produce_list())

/usr/lib/python3.5/asyncio/base_events.py in run_until_complete(self, future)
    464             raise RuntimeError('Event …
Run Code Online (Sandbox Code Playgroud)

python asynchronous python-3.x async-await python-asyncio

20
推荐指数
1
解决办法
2216
查看次数