Python进程池apply_async的callback函数不执行的解决方案
最近在用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函数不执行的解决方案相关推荐
- Python进程池之pool.map()函数传入多参数
一 定义与解释 对于python代码,多线程其实是个假的,因为每次计算的时候,实质上只有一个线程计算.使用多线程时,是几个线程之间切换计算,就像轮班工作一下,适合处理I/O密集型的任务. 对于pyth ...
- Python 进程池 multiprocessing.Pool - Python零基础入门教程
目录 一.Python 进程池 multiprocessing.Pool 介绍 二.Python 进程池 multiprocessing.Pool 使用 三.猜你喜欢 零基础 Python 学习路线推 ...
- python 进程池 等待数量_python 进程池multiprocessing.Pool
44.Python 进程池multiprocessing.Pool 最后更新于:2020-03-21 11:53:37 python进程池Pool 和前面讲解的python线程池 类似,虽然使用多进程 ...
- Python进程池及自定义进程
Python进程池及自定义进程 微信关注公众号:夜寒信息 致力于为每一位用户免费提供更优质技术帮助与资源供给,感谢支持! 这次给大家分享Python的进程池及自定义进程,由于Python基础已 ...
- python的用途实例-python进程池作用展示及实例解析
在以下的文章之中我们来了解一下什么是python中的进程池.了解一下python进程池的相关知识,以及进程池在python编程之中能起到什么样的作用. 进程池 Pool类描述了一个工作进程池,他有几种 ...
- python进程池调用实例方法_Python进程池Pool应用实例分析
本文实例讲述了Python进程池Pool应用.分享给大家供大家参考,具体如下: 当需要创建的子进程数量不多时,可以直接利用multiprocessing中的Process动态成生多个进程,但如果是上百 ...
- python进程池和线程池_python自带的进程池及线程池
进程池 """ python自带的进程池 """ from multiprocessing import Pool from time im ...
- python进程池的使用
python进程池 import os from multiprocessing import Pool import timea = 1 def task(name):global afor i i ...
- Python进程池Pool、进程池通信
前言 这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题 于是乎,我自己开发了一款面试宝典,希 ...
最新文章
- Springboot+mybatisplus搭建新闻管理系统
- Java中 break、continue 和 return三者之间的区别
- 从Java视角理解CPU上下文切换(Context Switch)
- 移动**21*设置无法接通_电话打得出去,但别人打你的电话提示用户无法接通,是怎么回事?...
- 【JXOI2018】守卫
- hdu-2199 Can you solve this equation?(二分+精度)
- 2018集训队日常训练1
- 论文总结:Fast and Light Bandwidth Testing for Internet Users(21‘ NSDI)
- 基于LAMP实现web日志管理查看
- 关于Early-Z Culling(提前Z拣选)
- NAS网络存储使用教程之如何新建用户
- tomcat日志中文乱码问题
- 超简单的jquery 点击文本复制文本
- pwm控制直流电机转速流程图_直流电机PWM控制原理
- 游戏外挂基本原理及实现
- 2022美国科学院院士名单公布:图灵奖得主、龙书作者Alfred V. Aho当选!
- 鸿蒙系统怎么安装网易云音乐,网易云音乐鸿蒙版app下载-网易云音乐鸿蒙版最新版下载v1.7.5-IT168下载站...
- 360路由器设置网段ip
- CRM为何要给贴标签?
- 计算机信息管理发展的重要性,从历史情况看,计算机信息管理的发展过程是( )...