python的pickle用法(Python multiprocess pool模块报错pickling error问题解决方法分析)
python的pickle用法
Python multiprocess pool模块报错pickling error问题解决方法分析本文实例讲述了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程序设计有所帮助。
原文链接:https://www.cnblogs.com/arkenstone/p/7901129.html
- docker镜像内安装python包(如何使用Docker搭建pypi私有仓库)
- python入门之字符串处理(Python中常用的8种字符串操作方法)
- python中列表操作五种常用方法(Python使用paramiko操作linux的方法讲解)
- 如何用python编写抽奖(详解用python写一个抽奖程序)
- python使用aes加密解密(python实现AES和RSA加解密的方法)
- python随机生成时间戳(python时间序列按频率生成日期的方法)
- java入坑rabbitmq(Python操作rabbitMQ的示例代码)
- python计算1到10的阶乘的和(python计算阶乘和的方法1!+2!+3!+...+n!)
- pythonmatplotlib怎么设置图像(完美解决Python matplotlib绘图时汉字显示不正常的问题)
- python如何读取文件(Python从文件中读取数据的方法讲解)
- python绘折线图数据(python2.7使用plotly绘制本地散点图和折线图)
- python获取网络数据tcp(Python选择网卡发包及接收数据包)
- python3yield使用教程(python中yield的用法详解——最简单,最清晰的解释)
- python编辑redis(python使用pipeline批量读写redis的方法)
- pythonmatplotlib条形图动画(Python Matplotlib实现三维数据的散点图绘制)
- python同步钉钉用户(python 调用钉钉机器人的方法)
- 八一节,说说中国女兵(八一节说说中国女兵)
- 王治郅菜鸟赛季已让八一带入正轨,大郅七大经典语录或是成功秘诀(王治郅菜鸟赛季已让八一带入正轨)
- 庆八一,重读经典红色语录,感悟互联网发展硬道理(重读经典红色语录)
- TVB新剧《黯夜守护者》将播,陈展鹏陈炜首次合作探讨人性(TVB新剧黯夜守护者将播)
- 新晋小花被称女版吴卓羲 将取代滕丽名成为TVB新一代御用女警(新晋小花被称女版吴卓羲)
- 艺人吴卓羲10年警察生涯,演足10年阿Sir,系咩玩法(艺人吴卓羲10年警察生涯)
热门推荐
- vue跨域代理怎么写(解决vue $http的get和post请求跨域问题)
- 怎么用docker搭建测试环境(基于docker 搭建Prometheus+Grafana的过程详解)
- mongodb用户权限
- css中三角标(使用css实现三角符号效果)
- python和mysql实战(由Python编写的MySQL管理工具代码实例)
- 云数据库navicat连不上(Navicat Premium15连接云服务器中的数据库问题及遇到坑)
- nginx 怎么搭建web服务器(Linux+Nginx+Php架设高性能WEB服务器)
- pymongo是否线程安全(pymongo中group by的操作方法教程)
- python无法拒绝的表白代码教程(很酷的python表白工具 你喜欢我吗)
- tomcat运行中找不到路径(Tomcat将配置文件放在外部的解决方法)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9