当前位置:   article > 正文

python实现异步回调函数_python 异步回调

python 异步回调

回调函数故名思义,是指用主函数调用库函数时,将回调函数传进去,让库函数完成本身的功能后继续执行主函数安排的任务。
按照同步与异步可以分为同步回调和异步回调,在此只写明一种基于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')
    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

第一次执行结果为

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

第二次执行的结果为:

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

可见,三个进程异步执行,并没有严格的按照先后顺序来,但回调函数都是在主函数执行结束后才执行,说明了回调是成功的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/102567?site
推荐阅读
相关标签
  

闽ICP备14008679号