我需要从异步函数外部的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\\PycharmProjects\PCWebsite\fjdfjd.py:3>>
当我想接收时:
"Hello"
请注意,我不能使用.run()
RuntimeError: asyncio.run() cannot be called from a running event loop
或者在我收到错误消息时run_until_complete
RuntimeError: This event loop is already running
答案 0 :(得分:0)
根据asyncio.create_task文档,该函数返回一个Task
对象。
asyncio.create_task(coro,*,name = None)
将coro协程包装到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
答案 1 :(得分:0)
如果您是从jupyter笔记本运行此代码,则可以在新单元格中执行以下操作:
await hello()
由于事件循环已在运行,因此您无需担心会发生事件循环。 如果要在终端上运行它,则应该执行以下操作:
asyncio.run(hello())