最近在用multiprocessing.Pool的apply_async方法做多进程,在写示例的时候发现callback居然没有执行,遂记录原因如下。

目录

apply_async的func传入lambda:callback不执行

apply_async的callback为lambda:正常执行


apply_async的func传入lambda:callback不执行

正常能够执行的代码(示例改编自博主aaronthon):

进程池的回调函数callback - aaronthon - 博客园

def func1(n):print(f'in func{n}')def func2(ret):#  ret是func1的返回值,我们用不到print(f'in callback func')if __name__ == "__main__":pool = Pool(5)pool.apply_async(func1, args=(1,), callback=func2)pool.close()pool.join()

小啰嗦一下:注意args在单个参数情况下一定要带上逗号,就像(1,)这样。否则,python解释器不会将args当做元组(1,)传入,而是传入整数1,造成不必要的麻烦。

执行结果:

in func1
in callback func

如果用lambda取代func1,传入apply_async会怎样?

def func2(n):print(f'in callback func{n}')if __name__ == "__main__":pool = Pool(5)pool.apply_async(lambda x: print(f'in func{x}'), args=(1,), callback=func2)pool.close()pool.join()

执行结果:

没有任何输出。

这就说明了,apply_async在传入的func参数是lambda表达式时,回调函数是不会执行的(注意:是直接不执行了,而不是仅仅忽略了lambda表达式的返回值)。

我不清楚这是Python或者multiprocessing的feature还是bug,但是使用lambda作为func参数传入apply_async确实会导致回调函数完全被跳过而不被执行,需要警惕。

apply_async的callback为lambda:正常执行

前面已经说过,func不能为lambda。但是,callback函数本身为lambda的情况下,apply_async是可以正常执行callback函数的。实验如下:

def func1(n):print(f'in func{n}')def func2(ret):print(f'in callback func')if __name__ == "__main__":pool = Pool(5)pool.apply_async(func1, args=(1,), callback=lambda x:print('in callback func'))pool.close()pool.join()

执行结果:

in func1
in callback func

可见callback函数本身为lambda时callback执行不受影响,仅当func为lambda时callback不执行。

Python进程池apply_async的callback函数不执行的解决方案相关推荐

  1. Python进程池之pool.map()函数传入多参数

    一 定义与解释 对于python代码,多线程其实是个假的,因为每次计算的时候,实质上只有一个线程计算.使用多线程时,是几个线程之间切换计算,就像轮班工作一下,适合处理I/O密集型的任务. 对于pyth ...

  2. Python 进程池 multiprocessing.Pool - Python零基础入门教程

    目录 一.Python 进程池 multiprocessing.Pool 介绍 二.Python 进程池 multiprocessing.Pool 使用 三.猜你喜欢 零基础 Python 学习路线推 ...

  3. python 进程池 等待数量_python 进程池multiprocessing.Pool

    44.Python 进程池multiprocessing.Pool 最后更新于:2020-03-21 11:53:37 python进程池Pool 和前面讲解的python线程池 类似,虽然使用多进程 ...

  4. Python进程池及自定义进程

    Python进程池及自定义进程 微信关注公众号:夜寒信息 致力于为每一位用户免费提供更优质技术帮助与资源供给,感谢支持!     这次给大家分享Python的进程池及自定义进程,由于Python基础已 ...

  5. python的用途实例-python进程池作用展示及实例解析

    在以下的文章之中我们来了解一下什么是python中的进程池.了解一下python进程池的相关知识,以及进程池在python编程之中能起到什么样的作用. 进程池 Pool类描述了一个工作进程池,他有几种 ...

  6. python进程池调用实例方法_Python进程池Pool应用实例分析

    本文实例讲述了Python进程池Pool应用.分享给大家供大家参考,具体如下: 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百 ...

  7. python进程池和线程池_python自带的进程池及线程池

    进程池 """ python自带的进程池 """ from multiprocessing import Pool from time im ...

  8. python进程池的使用

    python进程池 import os from multiprocessing import Pool import timea = 1 def task(name):global afor i i ...

  9. Python进程池Pool、进程池通信

    前言 这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题 于是乎,我自己开发了一款面试宝典,希 ...

最新文章

  1. Springboot+mybatisplus搭建新闻管理系统
  2. Java中 break、continue 和 return三者之间的区别
  3. 从Java视角理解CPU上下文切换(Context Switch)
  4. 移动**21*设置无法接通_电话打得出去,但别人打你的电话提示用户无法接通,是怎么回事?...
  5. 【JXOI2018】守卫
  6. hdu-2199 Can you solve this equation?(二分+精度)
  7. 2018集训队日常训练1
  8. 论文总结:Fast and Light Bandwidth Testing for Internet Users(21‘ NSDI)
  9. 基于LAMP实现web日志管理查看
  10. 关于Early-Z Culling(提前Z拣选)
  11. NAS网络存储使用教程之如何新建用户
  12. tomcat日志中文乱码问题
  13. 超简单的jquery 点击文本复制文本
  14. pwm控制直流电机转速流程图_直流电机PWM控制原理
  15. 游戏外挂基本原理及实现
  16. 2022美国科学院院士名单公布:图灵奖得主、龙书作者Alfred V. Aho当选!
  17. 鸿蒙系统怎么安装网易云音乐,网易云音乐鸿蒙版app下载-网易云音乐鸿蒙版最新版下载v1.7.5-IT168下载站...
  18. 360路由器设置网段ip
  19. CRM为何要给贴标签?
  20. 计算机信息管理发展的重要性,从历史情况看,计算机信息管理的发展过程是( )...

热门文章

  1. python创建函数内部静态变量
  2. Android FTP功能开发基于swiftp
  3. 网络电视(IPTV)系统解决方案
  4. MFC控件 --- 进度条【案例】
  5. GoJS v2.2.7 去水印
  6. Qt QImage scaled方法缩放中的问题
  7. mysql的interval()引出的
  8. group_wait、group_interval、repeat_interval对告警的影响
  9. NJU-ICS-linklab 从零开始复习程序的链接与ELF
  10. 利用github进行账号授权登录