我该怎么解决鸡和蛋的问题?
一个函数将返回生成器的第一个结果,此生成器必须从调用它的函数中收集数据。这在一般代码中是可行的,但是一旦您在循环中抛出异步(我不想返回coroutine),它就会出错。如何避免从function_one返回coroutine
代码:
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)错误:
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发布于 2020-02-07 08:51:09
脚本中应该只有一个asyncio.run()。它是程序的入口点:
import asyncio
async def main():
# all your code is here
if __name__ == "__main__":
asyncio.run(main())asyncio.run()是启动管理所有协同和任务执行的事件循环的唯一阻塞操作。
请考虑阅读一些关于asyncio的教程,它可以帮助您更快地实现目标:
https://stackoverflow.com/questions/60099936
复制相似问题