首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步函数调用异步生成器调用异步函数

异步函数调用异步生成器调用异步函数
EN

Stack Overflow用户
提问于 2020-02-06 16:52:42
回答 1查看 237关注 0票数 1

我该怎么解决鸡和蛋的问题?

一个函数将返回生成器的第一个结果,此生成器必须从调用它的函数中收集数据。这在一般代码中是可行的,但是一旦您在循环中抛出异步(我不想返回coroutine),它就会出错。如何避免从function_one返回coroutine

代码:

代码语言:javascript
复制
import asyncio

async def second_iterator(number):
    for x in range(number):
        yield await function_one(x)

async def function_one(number):
    if number > 2:
        return asyncio.run(second_iterator(number))

    await asyncio.sleep(1)
    return number

def main(number):
    print(asyncio.run(function_one(number)))

main(3)

错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "main.py", line 17, in <module>
    main(3)
  File "main.py", line 15, in main
    print(asyncio.run(function_one(number)))
  File "C:\Users\Owner\Anaconda3\lib\asyncio\runners.py", line 43, in run
    return loop.run_until_complete(main)
  File "C:\Users\Owner\Anaconda3\lib\asyncio\base_events.py", line 579, in run_until_complete
    return future.result()
  File "main.py", line 9, in function_one
    return asyncio.run(second_iterator(number))
  File "C:\Users\Owner\Anaconda3\lib\asyncio\runners.py", line 34, in run
    "asyncio.run() cannot be called from a running event loop")
RuntimeError: asyncio.run() cannot be called from a running event loop
EN

回答 1

Stack Overflow用户

发布于 2020-02-07 08:51:09

脚本中应该只有一个asyncio.run()。它是程序的入口点:

代码语言:javascript
复制
import asyncio


async def main():
    # all your code is here


if __name__ == "__main__":
    asyncio.run(main())

asyncio.run()是启动管理所有协同和任务执行的事件循环的唯一阻塞操作。

请考虑阅读一些关于asyncio的教程,它可以帮助您更快地实现目标:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60099936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档