Python multiprocess pool模块报错pickling error问题解决方法分析


Posted in Python onMarch 20, 2019

本文实例讲述了Python multiprocess pool模块报错pickling error问题解决方法。分享给大家供大家参考,具体如下:

问题

之前在调用class内的函数用multiprocessing模块的pool函数进行多线程处理的时候报了以下下错误信息:

PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

查了下官方文档发现python默认只能pickle以下的类型:

  • None, True, and False
  • integers, floating point numbers, complex numbers
  • strings, bytes, bytearrays
  • tuples, lists, sets, and dictionaries containing only picklable objects
  • functions defined at the top level of a module (using def, not lambda)
  • built-in functions defined at the top level of a module
  • classes that are defined at the top level of a module
  • instances of such classes whose dict or the result of calling getstate() is picklable (see section -
  • Pickling Class Instances for details).

函数只能pickle在顶层定义的函数,很明显的class内的函数无法被pickle因此会报错。

import multiprocessing
def work():  # top-level 函数
  print "work!"
class Foo():
  def work(self): # 非top-level函数
    print "work"
pool1 = multiprocessing.Pool(processes=4)
foo = Foo()
pool1.apply_async(foo.work)
pool1.close()
pool1.join()
# 此时报错
pool2 = multiprocessing.Pool(processes=4)
pool2.apply_async(work)
pool2.close()
pool2.join()
# 此时工作正常

解决方案

调用pathos包下的multiprocessing模块代替原生的multiprocessing。pathos中multiprocessing是用dill包改写过的,dill包可以将几乎所有python的类型都serialize,因此都可以被pickle。或者也可以自己用dill写一个(有点重复造轮子之嫌啊)

参考

1. https://stackoverflow.com/questions/8804830/python-multiprocessing-picklingerror-cant-pickle-type-function
2. https://docs.python.org/3/library/pickle.html#what-can-be-pickled-and-unpickled
3. https://github.com/uqfoundation/pathos

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python通过90行代码搭建一个音乐搜索工具
Jul 29 Python
使用Python的urllib和urllib2模块制作爬虫的实例教程
Jan 20 Python
python获取指定时间差的时间实例详解
Apr 11 Python
浅谈python 里面的单下划线与双下划线的区别
Dec 01 Python
解决Django migrate No changes detected 不能创建表的问题
May 27 Python
python写日志文件操作类与应用示例
Jul 01 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
python实现QQ邮箱发送邮件
Mar 06 Python
jenkins+python自动化测试持续集成教程
May 12 Python
结束运行python的方法
Jun 16 Python
Python3获取cookie常用三种方案
Oct 05 Python
教你使用Sublime text3搭建Python开发环境及常用插件安装另分享Sublime text3最新激活注册码
Nov 12 Python
python实现对输入的密文加密
Mar 20 #Python
python实现字符串加密成纯数字
Mar 19 #Python
python实现简单加密解密机制
Mar 19 #Python
python使用adbapi实现MySQL数据库的异步存储
Mar 19 #Python
python异步存储数据详解
Mar 19 #Python
利用Python半自动化生成Nessus报告的方法
Mar 19 #Python
python实现手机销售管理系统
Mar 19 #Python
You might like
PHP mcrypt可逆加密算法分析
2011/07/19 PHP
解析PHP中常见的mongodb查询操作
2013/06/20 PHP
简单谈谈PHP vs Node.js
2015/07/17 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
PHP中文字符串截断无乱码解决方法
2016/10/10 PHP
thinkPHP引入类的方法详解
2016/12/08 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
一个判断抢购时间是否到达的简单的js函数
2014/06/23 Javascript
JS 获取鼠标左右键的键值方法
2014/10/11 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
JS+CSS实现自适应选项卡宽度的圆角滑动门效果
2015/09/15 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
js中使用使用原型(prototype)定义方法的好处详解
2016/07/04 Javascript
百度地图JavascriptApi Marker平滑移动及车头指向行径方向
2017/03/13 Javascript
JavaScript数组去重的多种方法(四种)
2017/09/19 Javascript
angular中ui calendar的一些使用心得(推荐)
2017/11/03 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
你可能不知道的CORS跨域资源共享
2019/03/13 Javascript
如何用JS模拟实现数组的map方法
2020/07/30 Javascript
Python实现的金山快盘的签到程序
2013/01/17 Python
深入解析Python中的WSGI接口
2015/05/11 Python
Python 查看list中是否含有某元素的方法
2018/06/27 Python
python中树与树的表示知识点总结
2019/09/14 Python
python保留小数位的三种实现方法
2020/01/07 Python
Pytorch之finetune使用详解
2020/01/18 Python
HTML5 FormData 方法介绍以及实现文件上传示例
2017/09/12 HTML / CSS
武汉高蓝德国际.net机试
2016/06/24 面试题
params有什么用
2016/03/01 面试题
给老婆的婚前保证书
2014/02/01 职场文书
幼儿园小班植树节活动方案
2014/03/04 职场文书
个人合伙协议书范本
2014/10/14 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
用python批量解压带密码的压缩包
2021/05/31 Python
OpenCV-Python实现图像平滑处理操作
2021/06/08 Python