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中map和列表推导效率比较实例分析
Jun 17 Python
Python开发SQLite3数据库相关操作详解【连接,查询,插入,更新,删除,关闭等】
Jul 27 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
Sep 30 Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 Python
Python获取昨天、今天、明天开始、结束时间戳的方法
Jun 01 Python
解决Python print 输出文本显示 gbk 编码错误问题
Jul 13 Python
pandas数据处理进阶详解
Oct 11 Python
关于numpy.where()函数 返回值的解释
Dec 06 Python
Pyspark读取parquet数据过程解析
Mar 27 Python
jupyter notebook 重装教程
Apr 16 Python
基于SpringBoot构造器注入循环依赖及解决方式
Apr 26 Python
python和Appium的移动端多设备自动化测试框架
Apr 26 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实现和c#一致的DES加密解密实例
2017/07/24 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
对YUI扩展的Gird组件 Part-1
2007/03/10 Javascript
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
编写高效jQuery代码的4个原则和5个技巧
2014/04/24 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
Javascript blur与click冲突解决办法
2017/01/09 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
js评分组件使用详解
2017/06/06 Javascript
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
vue添加axios,并且指定baseurl的方法
2018/09/19 Javascript
记一次Vue.js混入mixin的使用(分权限管理页面)
2019/04/17 Javascript
Python常见格式化字符串方法小结【百分号与format方法】
2016/09/18 Python
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
使用python将多个excel文件合并到同一个文件的方法
2019/07/09 Python
python批量修改ssh密码的实现
2019/08/08 Python
关于python中plt.hist参数的使用详解
2019/11/28 Python
python实现矩阵和array数组之间的转换
2019/11/29 Python
Pytorch实现LSTM和GRU示例
2020/01/14 Python
python异常处理、自定义异常、断言原理与用法分析
2020/03/23 Python
Python使用Selenium实现淘宝抢单的流程分析
2020/06/23 Python
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
GIVENCHY纪梵希官方旗舰店:高定彩妆与贵族护肤品
2018/04/16 全球购物
TOWER London官网:鞋子、靴子、运动鞋等
2019/07/14 全球购物
2017寒假社会实践心得体会范文
2016/01/14 职场文书
2016大学生暑期三下乡心得体会
2016/01/23 职场文书
《曹冲称象》教学反思
2016/02/20 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
python字符串常规操作大全
2021/05/02 Python