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
- python 字典按key值排序(Python 按字典dict的键排序,并取出相应的键值放于list中的实例)
- python实现两个变量的交换(在Python 中同一个类两个函数间变量的调用方法)
- python如何对参数长度进行限制(python 多个参数不为空校验方法)
- python的模块与包与库(Python 中包/模块的 `import` 操作代码)
- python设计一个聊天机器人(手把手教你使用Python创建微信机器人)
- python核心编程和python基础教程(从0开始的Python学习014面向对象编程推荐)
- 未来10年python前景(Python应用领域和就业形势分析总结)
- python微信防封(深入学习微信网址链接解封的防封原理visit_type)
- python中的reload(搞清楚 Python traceback的具体使用方法)
- python3有哪些内置模块(Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析)
- python简易版学生管理系统(python3.6实现学生信息管理系统)
- python try高级用法(python try 异常处理史上最全)
- pythonmatplotlib画图流程(python3使用matplotlib绘制条形图)
- python3编程过程(Python3模拟登录操作实例分析)
- python教程列表排序(Python一行代码实现快速排序的方法)
- python函数式编程源码(python仿evething的文件搜索器实例代码)
- 仙女们的私藏鲜法大PK 鲜香切块牛肉(仙女们的私藏鲜法大PK)
- 天热没胃口 这道菜开胃又下饭,2个小技巧新手一学就会(这道菜开胃又下饭)
- 指天椒紫苏爆炒牛肉(指天椒紫苏爆炒牛肉)
- 谷雨前,吃牛羊肉别忘了吃河鲜,除湿还清热,加紫苏一炒特解馋(吃牛羊肉别忘了吃河鲜)
- 紫苏牛肉锅里滚一滚,香的鼻子都要掉了(紫苏牛肉锅里滚一滚)
- 每天都吃水果的好处(每天吃水果的好处与功效)
热门推荐
- dedecms有哪些功能(dedecms 二次开发之审核时间同步更新)
- jquery实现页面滚动时自动加载内容
- docker如何启动springboot(Centos8.3、docker部署springboot项目实战案例分析)
- $(function(){ }) 与window.onload的区别
- ASP.NET生成二维码
- dedecms标签解析(Dedecms网站给图片alt属性自动调用标题的方法)
- css用clearfix清除浮动
- vue动态路由实现权限控制(vue2/vue3路由权限管理的方法实例)
- markdown和python的关系(解决python Markdown模块乱码的问题)
- sql执行原理详解(Sql server中内部函数fn_PhysLocFormatter存在解析错误详解)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9