赞
踩
回调函数故名思义,是指用主函数调用库函数时,将回调函数传进去,让库函数完成本身的功能后继续执行主函数安排的任务。
按照同步与异步可以分为同步回调和异步回调,在此只写明一种基于python的多进程multiprocessing库实现异步回调函数的方法。
import time from multiprocessing import Process,Pool # call1,call2,call3分别为3个主函数 def call1(n): time.sleep(n) print("call:", 1) return 1 def call2(n): time.sleep(n) print("call:", 2) return 2 def call3(n): time.sleep(n) print("call:", 3) return 3 def fun(n): # 回调函数,表示执行完主函数后要完成的工作 print("i'm done!, n={}".format(n)) if __name__ == "__main__": print('start') p = Pool(3) # 建立进程池 # 分别用异步的方式执行主函数call,主函数参数n,以及回调函数fun p.apply_async(func=call1, args=(1, ), callback=fun) p.apply_async(func=call2, args=(1, ), callback=fun) p.apply_async(func=call3, args=(1, ), callback=fun) p.close() p.join() print('end')
第一次执行结果为
sky@skyMac test % /usr/bin/python3 /Users/sky/pythonProj/test/callback.py
start
call: 1
i'm done!, n=1
call: 2
i'm done!, n=2
call: 3
i'm done!, n=3
end
第二次执行的结果为:
sky@skyMac test % /usr/bin/python3 /Users/sky/pythonProj/test/callback.py
start
call: 2
call: 1
i'm done!, n=2
call: 3
i'm done!, n=1
i'm done!, n=3
end
可见,三个进程异步执行,并没有严格的按照先后顺序来,但回调函数都是在主函数执行结束后才执行,说明了回调是成功的。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。