【发布时间】:2019-03-05 13:17:06
【问题描述】:
我正在尝试在异步函数运行完成后调用回调
这是我尝试做的一个例子:
import asyncio
async def asyncfunction():
print('Hello')
await asyncio.sleep(10)
print('World')
return 10
def callback(n):
print(f'The async function returned: {n}')
loop = asyncio.get_event_loop()
# Will block the print until everything is done
callback(loop.run_until_complete(asyncfunction()))
print('Hey')
这是做什么的:
Hello
World
The async function returned: 10
Hey
这就是我想要它做的事情
编辑:“嘿”的位置并不重要,只要它不必等待异步功能完成
Hello
Hey
World
The async function returned: 10
编辑:经过一些测试,我找到了一种可以满足我需求的方法,尽管我不知道它是否是最好的方法
import asyncio
import threading
async def asyncfunction():
print('Hello')
await asyncio.sleep(10)
print('World')
return 10
def callback(n):
print(f'The async function returned: {n}')
def wrapper(loop):
callback(loop.run_until_complete(asyncfunction()))
loop = asyncio.get_event_loop()
thr = threading.Thread(target=wrapper,args=(loop,))
thr.start()
print('Hey')
【问题讨论】:
-
在
print('Hello')之后移动print('Hey')?我知道这是蛮力,但你还没有谈到你想要的输出的逻辑。 -
@mat,为什么你认为你的回调是回调?经典的回调应该作为参数传递给函数,但你的代码完全不同。
标签: python python-asyncio