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获取GY-85九轴模块信息示例
Dec 05 Python
python中的全局变量用法分析
Jun 09 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
Oct 09 Python
Python 模拟员工信息数据库操作的实例
Oct 23 Python
有趣的python小程序分享
Dec 05 Python
python读文件保存到字典,修改字典并写入新文件的实例
Apr 23 Python
使用pandas对两个dataframe进行join的实例
Jun 08 Python
Python对CSV、Excel、txt、dat文件的处理
Sep 18 Python
阿里云ECS服务器部署django的方法
Aug 29 Python
Python爬取破解无线网络wifi密码过程解析
Sep 17 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 Python
python的help函数如何使用
Jun 11 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使用feof()函数读文件的方法
2014/11/07 PHP
php打印输出棋盘的实现方法
2014/12/23 PHP
基于php流程控制语句和循环控制语句(讲解)
2017/10/23 PHP
PHP strripos函数用法总结
2019/02/11 PHP
Laravel框架中队列和工作(Queues、Jobs)操作实例详解
2020/04/06 PHP
js最简单的拖拽效果实现代码
2010/09/24 Javascript
javascript判断chrome浏览器的方法
2014/03/26 Javascript
jquery操作checked属性以及disabled属性的多种方法
2014/06/20 Javascript
基于JavaScript将表单序列化类型的数据转化成对象的处理(允许对象中包含对象)
2015/12/28 Javascript
轻松实现JavaScript图片切换
2016/01/12 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
老生常谈JavaScript数组的用法
2016/06/10 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
webpack 4.0.0-beta.0版本新特性介绍
2018/02/10 Javascript
js判断输入框不能为空格或null值的实现方法
2018/03/02 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
微信小程序wepy框架笔记小结
2018/08/08 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
在pycharm中开发vue的方法步骤
2020/03/04 Javascript
JS中间件设计模式的深入探讨与实例分析
2020/04/11 Javascript
jquery实现点击左右按钮切换图片
2021/01/27 jQuery
Windows系统下使用flup搭建Nginx和Python环境的方法
2015/12/25 Python
Django更新models数据库结构步骤
2020/04/01 Python
Python常用模块函数代码汇总解析
2020/08/31 Python
编写html5时调试发现脚本php等网页js、css等失效
2013/12/31 HTML / CSS
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
C和C++经典笔试题附答案解析
2014/08/18 面试题
基层干部十八大感言
2014/01/19 职场文书
优秀管理者获奖感言
2014/02/17 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
不忘国耻振兴中华演讲稿
2014/05/14 职场文书
大学专科自荐信
2014/06/17 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
民事申诉状范本
2015/05/20 职场文书
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android