有没有办法让asyncio.create_task返回async函数之外的值



我需要从异步函数之外的asyncio.create_task(function(((返回一个值。


import asyncio
async def hello():
return("hello")
response = asyncio.get_event_loop().create_task(hello())
print(response)

这就是输出的内容:

<Task pending coro=<hello() running at C:Users\PycharmProjectsPCWebsitefjdfjd.py:3>>

当我想接收:

"Hello"

注意,我不能使用.run((

RuntimeError: asyncio.run() cannot be called from a running event loop

或者在收到错误时运行_until_complete

RuntimeError: This event loop is already running

根据asyncio.create_task文档,函数返回一个Task对象。

asyncio.create_task(coro,*,name=None(

将协同程序封装到Task中,并安排其执行。回来Task对象。

当结果准备就绪(任务完成(时,您可以使用Task函数通过调用函数task.result()从任务本身提取结果(以及一些其他信息(。

示例:

import asyncio
async def func1():
return 1233
loop = asyncio.get_event_loop()
task = loop.create_task(func1())
# The following line is needed so the loop will run and complete the task in the first place.
loop.run_until_complete(task)

结果:

>>> task.done()
True
>>> task.result()
1233

如果你在jupyter笔记本上运行这个代码,在一个新的单元格中,你可以简单地执行:

await hello()

由于事件循环已经在运行,您不需要担心获取事件循环。如果你在终端上运行它,你应该这样做:

asyncio.run(hello())

最新更新