这是我的python回调函数:
from time import sleep
def callback(sum):
sleep(5)
print("Sum = {}".format(sum))
def main(a, b, callback = None):
print("adding {} + {}".format(a, b))
if callback:
callback(a+b)
print('leaving u')
main(1, 2, callback)
这是输出:
adding 1 + 2
Sum = 3
leaving u
但我希望它是:
adding 1 + 2
leaving u
Sum = 3
我认为回调函数假设用于需要花费大量时间的函数的情况。因此,对我来说,它会在后台运行,主函数中的下一行将继续执行。
答案 0 :(得分:2)
sleep
是同步的(意思是,在完成之前,没有其他任何内容正在执行)。对于异步任务,请考虑使用线程:
from multiprocessing.pool import ThreadPool
def callback (sum):
print("Sum = {}".format(sum))
def main (a, b, callback = None):
print("adding {} + {}".format(a, b))
if callback:
calling = ThreadPool(processes=1)
registered_async = calling.apply_async(callback, args=(a+b,))
print('leaving u')
while not registered_async.ready(): pass
main(1, 2, callback=callback)