技术标签: 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程序设计有所帮助。
文章浏览阅读374次。有人认为您需要最新的MacBook Pro和一套昂贵的商业软件来制作音乐,但是即使在macOS上,也有很多免费软件可以制作音乐。 金钱不能买人才,有才能的人通常可以充分利用免费工具。当然,在高端合成器引擎或工作站上放上数千美元可能会让生活变得更轻松,但是当您可以使用免费的音乐制作软件时,这并不是前提条件。 Linux是一些功能强大且灵活的音乐制作应用程序的所在地,面向初学者和专业人士。让我们来看看..._音频制作工具linux版本下载
文章浏览阅读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次。原标题:三星手机无线连接,访问局域网电脑共享目录中的电影照片设置教程有时候我们在刷手机的时候需要把手机的资料等传到电脑上,或者把电脑上的资料电影等传到手机上,用软件传又慢,用数据线又麻烦,那么在同局域网下手机有没办直接访问电脑共享文件夹目录呢?方法是有的,通过以下的配置方法就能实现,在配置之前要注意下无线路由器下的电脑和手机是否都在同一个局域网,如果你是多个无线路由器组合起来的,要看下是怎么组合的..._三星手机怎么访问共享文件
文章浏览阅读7.2k次,点赞6次,收藏19次。类中static变量和普通变量的区别(一便解释了摘要中的内容) 要理解标题,我们首先来看下static变量本身的特殊之处,即它存储在全局数据区。在类中的static变量也是如此。C++的内存分布代码区 :函数体的二进制代码全局数据区:全局变量和static变量堆 :动态内存分配 -> 通过new栈 ..._类中static变量
文章浏览阅读4.9k次。reeMarker中的标签除了里面直接判断 boolean 类型的变量外,也可以进行表达式判断,有几个细节记录一下1. 判断对象是否存在(null)经常会用到,如果对象 != null 则xxxx,在freemarker中表达比较奇怪,例如判断 target 是否为null,如果不为 nll 则做xxx动作xxxx#if>(目标变量后面连续两个??)2. 字符串或数字比较java里标准字符串..._freemarker if多条件
文章浏览阅读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 { ..._转场特效的代码原理
文章浏览阅读514次。解决Ubuntu 18.04使用root账户登录显示“认证失败”时间:2020-06-26 11:54:15来源:作者:今天是土土第一次分享自己在学习中的经历,写的不好,请多见谅。最近土土有一个课程设计的任务——linux内核编译。因为Linux内核编译需要root用户权限。但是土土的ubnutu没有root,所以首先就需要建立一个root用户。普通用户登录,打开终端。设定root用户密码..._ubuntu18.04 进入root 鉴定故障
文章浏览阅读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的文件需要解药吗
文章浏览阅读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网页加密随机密码