我不明白python回调函数

时间:2017-06-09 02:41:39

标签: python callback

这是我的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

我认为回调函数假设用于需要花费大量时间的函数的情况。因此,对我来说,它会在后台运行,主函数中的下一行将继续执行。

1 个答案:

答案 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)