python class函数报错_Python multiprocess pool模块报错pickling error问题解决方法分析-程序员宅基地

技术标签: python class函数报错  

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

问题

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

PicklingError: Can't pickle : 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写一个(有点重复造轮子之嫌啊)

参考

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_29164081/article/details/113479322

智能推荐

linux音乐应用程序,适用于节拍,循环,录音的最佳免费Linux音乐制作应用程序 | MOS86...-程序员宅基地

文章浏览阅读374次。有人认为您需要最新的MacBook Pro和一套昂贵的商业软件来制作音乐,但是即使在macOS上,也有很多免费软件可以制作音乐。 金钱不能买人才,有才能的人通常可以充分利用免费工具。当然,在高端合成器引擎或工作站上放上数千美元可能会让生活变得更轻松,但是当您可以使用免费的音乐制作软件时,这并不是前提条件。 Linux是一些功能强大且灵活的音乐制作应用程序的所在地,面向初学者和专业人士。让我们来看看..._音频制作工具linux版本下载

Docker 学习笔记 - 进阶四 Docker网络和 Docker compose_dockercompose refers to undefined network playedu--程序员宅基地

文章浏览阅读1.8k次。docker network笔记记录学习尚硅谷周阳老师的 docker 教程链接地址: https://www.bilibili.com/video/BV1gr4y1U7CY?p=1_dockercompose refers to undefined network playedu-network:

环形进度条-程序员宅基地

文章浏览阅读70次。jQuery + CSS3实现原理原理非常的简单,在这个方案中,最主要使用了CSS3的transform中的rotate和CSS3的clip两个属性。用他们来实现半圆和旋转效果。半环的实现先来看其结构。html<div class="pie_right"> <div class="right"></div> &..._环形进度条 .square{ margin: 20px auto; width: 200

消息同步的实现-程序员宅基地

文章浏览阅读1.7k次。一、背景在编程中通信可以说是使用的最频繁的了,一个好的通信框架可以很大的提高系统的稳定性和编程的简洁性。可能之前我们使用现有的框架可以不考虑消息同步的问题,但是我觉得了解一点这方面的内容还是很有帮助的。今天给大家讲讲一个比较好的消息的同步的策略。二、为什么使用消息同步在通信的时候使用消息同步可以降低代码的复杂度,避免使用回调来处理业务,可以使代码更..._移动端即时消息和pc端即时消息同步时序图

三星服务器链接在哪个文件夹,三星手机无线连接,访问局域网电脑共享目录中的电影照片设置教程...-程序员宅基地

文章浏览阅读1.9k次。原标题:三星手机无线连接,访问局域网电脑共享目录中的电影照片设置教程有时候我们在刷手机的时候需要把手机的资料等传到电脑上,或者把电脑上的资料电影等传到手机上,用软件传又慢,用数据线又麻烦,那么在同局域网下手机有没办直接访问电脑共享文件夹目录呢?方法是有的,通过以下的配置方法就能实现,在配置之前要注意下无线路由器下的电脑和手机是否都在同一个局域网,如果你是多个无线路由器组合起来的,要看下是怎么组合的..._三星手机怎么访问共享文件

类中static变量和成员变量-程序员宅基地

文章浏览阅读7.2k次,点赞6次,收藏19次。类中static变量和普通变量的区别(一便解释了摘要中的内容)​  要理解标题,我们首先来看下static变量本身的特殊之处,即它存储在全局数据区。在类中的static变量也是如此。C++的内存分布代码区 :函数体的二进制代码全局数据区:全局变量和static变量堆 :动态内存分配 -&gt; 通过new栈 ..._类中static变量

随便推点

freemaker if 多个条件_FreeMarker中if标签内的判断条件-程序员宅基地

文章浏览阅读4.9k次。reeMarker中的标签除了里面直接判断 boolean 类型的变量外,也可以进行表达式判断,有几个细节记录一下1. 判断对象是否存在(null)经常会用到,如果对象 != null 则xxxx,在freemarker中表达比较奇怪,例如判断 target 是否为null,如果不为 nll 则做xxx动作xxxx#if>(目标变量后面连续两个??)2. 字符串或数字比较java里标准字符串..._freemarker if多条件

micropython 文档_micropython文档中缺失的说明-程序员宅基地

文章浏览阅读65次。PYB: sync filesystemsPYB: soft rebootMicroPython v1.6-310-g1937953 on 2016-03-28; PYBv1.0 with STM32F405RGType "help()" for more information.>>>import os, sys>>> dir(os)['__name__', 'uname', 'chdir', ..._micropython导入文件dir显示不全

自定义的转场动画实现方式以及原理介绍_转场特效的代码原理-程序员宅基地

文章浏览阅读1.1k次。BreatheView项目地址:arvinljw/BreatheView 简介:自定义的转场动画实现方式以及原理介绍更多:作者 提 Bug 标签:Animation-这是一个自定义的转场动画实现方式,目前支持两种方式:圆形展开 矩形展开效果如下:使用引用:在根目录级的 build.gradle 中添加allprojects { ..._转场特效的代码原理

root认证失败 tera term_解决Ubuntu 18.04使用root账户登录显示“认证失败”-程序员宅基地

文章浏览阅读514次。解决Ubuntu 18.04使用root账户登录显示“认证失败”时间:2020-06-26 11:54:15来源:作者:今天是土土第一次分享自己在学习中的经历,写的不好,请多见谅。最近土土有一个课程设计的任务——linux内核编译。因为Linux内核编译需要root用户权限。但是土土的ubnutu没有root,所以首先就需要建立一个root用户。普通用户登录,打开终端。设定root用户密码..._ubuntu18.04 进入root 鉴定故障

Linux下常用文件解压(包括rpm、deb包)_rpm的文件需要解药吗-程序员宅基地

文章浏览阅读1.5k次。http://www.hao32.com/unix-linux/306.htmlLinux下怎么解后缀名是gzip的文件?1.以.a为扩展名的文件:#tar xv file.a2.以.z为扩展名的文件:#uncompress file.Z3.以.gz为扩展名的文件:#gunzip file.gz4.以.bz2为扩展名的文件:#bunzip2 fi_rpm的文件需要解药吗

html5 密码加密,1、5 写注册的后台并写前台html&密码加密&id 随机-程序员宅基地

文章浏览阅读451次。1 public void save(Student student) {// TODO Auto-generated method stubstudent.setSid(UUID.randomUUID().toString());student.setPwd(MD5Util.md5(student.getPwd()));studentRepository.save(student);}在..._html网页加密随机密码

推荐文章

热门文章

相关标签