当前位置:   article > 正文

Python 之 异步进程回调函数(callback())_apply_async callback

apply_async callback

摘要:

在公司项目开发过程中遇到multiprocessing,打算进一步了解一下multiprocessing的多线程、多进程和协程方便后续的开发,无意中看到异步进程回调函数(callback()),正好运用在项目中的某个之前想要优化的模块,于是写了这篇博客

需要回调函数的场景:

进程池中任何一个任务一旦处理完了,就立即告知主进程:我好了,你可以处理我的结果了。主进程则调用一个函数去处理该结果,该函数即回调函数。我们可以把耗时间(阻塞)的任务放到进程池中,然后指定回调函数(主进程负责执行),这样主进程在执行回调函数时就省去了I/O的过程,直接拿到的是任务的结果。

代码:

  1. from multiprocessing import Process,Pool
  2. import os
  3. import time
  4. import random
  5. #子进程任务
  6. def download(f):
  7. print('__进程池中的进程——pid=%d,ppid=%d'%(os.getpid(),os.getppid()))
  8. for i in range(3):
  9. print(f,'--文件--%d'%i)
  10. time.sleep(random.randint(1, 9))
  11. # time.sleep(1)
  12. return {"result": 1, "info": '下载完成!'}
  13. #主进程调用回调函数
  14. def alterUser(msg):
  15. print("----callback func --pid=%d"%os.getpid())
  16. print("get result:", msg["info"])
  17. if __name__ == "__main__":
  18. p = Pool(3)
  19. p.apply_async(func=download, args=(1111,), callback=alterUser)
  20. p.apply_async(func=download, args=(2222,), callback=alterUser)
  21. p.apply_async(func=download, args=(3333,), callback=alterUser)
  22. #当func执行完毕后,return的东西会给到回调函数callback
  23. print("---start----")
  24. p.close()#关闭进程池,关闭后,p不再接收新的请求。
  25. p.join()
  26. print("---end-----")

输出:

  1. ---start----
  2. __进程池中的进程——pid=1316,ppid=5880
  3. 1111 --文件--0
  4. __进程池中的进程——pid=11372,ppid=5880
  5. 2222 --文件--0
  6. __进程池中的进程——pid=8156,ppid=5880
  7. 3333 --文件--0
  8. 2222 --文件--1
  9. 3333 --文件--1
  10. 1111 --文件--1
  11. 2222 --文件--2
  12. ----callback func --pid=5880
  13. get result: 下载完成!
  14. 3333 --文件--2
  15. ----callback func --pid=5880
  16. get result: 下载完成!
  17. 1111 --文件--2
  18. ----callback func --pid=5880
  19. get result: 下载完成!
  20. ---end-----

 

参考:https://www.cnblogs.com/surehunter/p/7896298.html

           https://blog.csdn.net/zbrj12345/article/details/79792483

侵告删

本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/102570
推荐阅读
相关标签
  

闽ICP备14008679号