# 报错信息

 PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed

# 问题原因

# 根据网上资料就是说: multiprocessing 会对调用的函数进行序列号,而类函数不支持
# 备注: 具体原因待查

# 解决方法 —— 类函数不带返回值

 # 1. 在类之外定义调用函数
def run_class_fun(class_name, msg):
class_name.test_func(msg) # 2. 修改 apply_async 调用方式
pool.apply_async(run_class_fun, args=(self, x, ))
# 第一个参数为类外调用函数名
# 第二个参数args的第一个参数为 self, 第二个为类函数参数

# 解决方法 —— 类函数带返回值

 # 1. 在类之外定义调用函数
def run_class_fun(class_name, msg):
return class_name.test_func(msg) # 2. 修改 apply_async 调用方式
res.append(pool.apply_async(run_class_fun, args=(self, x, )))
# 第一个参数为类外调用函数名
# 第二个参数args的第一个参数为 self, 第二个为类函数参数

# 全部代码

 # -*- coding: utf-8 -*-

 import multiprocessing
import time class TestClass(object):
def __init__(self):
print('init') def test_func(self, vm_id):
vm_dict = {}
cpu_rate = '22.{}'.format(vm_id)
mem_rate = '33.{}'.format(vm_id)
vm_dict.update({
'vm_id': vm_id,
'cpu_rate': cpu_rate,
'mem_rate': mem_rate
})
return vm_dict def run(self):
res = []
pool = multiprocessing.Pool(processes=10)
for x in range(1, 100):
res.append(pool.apply_async(run_class_fun, args=(self, x, )))
pool.close()
pool.join()
return res def run_class_fun(class_name, msg):
return class_name.test_func(msg) if __name__ == '__main__':
print('----------------START------------------')
t1 = time.time()
# pool = multiprocessing.Pool(processes=10)
# res = []
# for x in range(1, 100):
# res.append(pool.apply_async(run_class_fun, args=(TestClass(), x)))
# pool.close()
# pool.join()
tc = TestClass()
res = tc.run()
print('----------------POOL OVER------------------')
print(time.time()-t1) vm_infos = []
for r in res:
print(r.get())
vm_infos.append(r.get()) print(vm_infos) print('----------------ALL OVER------------------')
print(time.time()-t1)

Python2.7 PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed 问题解决的更多相关文章

  1. PicklingError: Can't pickle <type 'generator'>: it's not found as __builtin_

    多进程传递 参数时,需要是python系统已知的,不然不知道怎么序列化

  2. python2,socket多进程的错误pickle.PicklingError: Can't pickle

    python2,socket多进程的错误pickle.PicklingError: Can't pickle 源码: #coding:utf-8 import socket import pickle ...

  3. pickle模块 no attribute 'dumps'

    今天写了一个pickle.py的文件练习pickle模块,代码如下: import pickle dic = {"linga": ('football',)} dic2 = {&q ...

  4. chrome下input[type=text]的placeholder不垂直居中的问题解决

    http://blog.csdn.net/do_it__/article/details/6789699 <input type="text" placeholder=&qu ...

  5. springboot jpa mongodb 整合mysql Field in required a bean of type that could not be found Failed to load ApplicationContext

    1.完整报错 *************************** APPLICATION FAILED TO START *************************** Descripti ...

  6. Qt深入:不能不知道的Type、Attribute和Flags

    Qter高手与新手的区别在于:知道还是不知道 Qt不是开发语言,所以无所谓谁厉害.但使用他的Qter却有着差异,也许是面向对象语言本身的.或者实际经验上的.而对于Qt本身来说,高手与新手最显著的差异在 ...

  7. python multiprocess pool模块报错pickling error

    问题 之前在调用class内的函数用multiprocessing模块的pool函数进行多线程处理的时候报了以下下错误信息: PicklingError: Can't pickle <type ...

  8. python 多进程使用总结

    python中的多进程主要使用到 multiprocessing 这个库.这个库在使用 multiprocessing.Manager().Queue时会出问题,建议大家升级到高版本python,如2 ...

  9. python多进程并发进程池Pool

    简介: python中的多进程主要使用到 multiprocessing 这个库.低版本python这个库在使用 multiprocessing.Manager().Queue时会出问题,建议大家升级 ...

随机推荐

  1. Kafka 可视化监控和管理 UI工具评估

    以下内容,来自网络资料整理和个人安装使用结果.后续会持续更新

  2. HTML5(一)初识HTML5

    HTML5 简介 HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定. 目的是为了在移动设备上支持多媒体. HTML5 的改进 完全支持 CSS3 Video 和 ...

  3. unity vscode 断点问题

    困扰了很久的vscode老莫名其妙的断到网络通信那里. 后来发现是因为起来了一个线程并且调用的unity API 导致. unity 线程中是禁止调用unity API 的. 删掉用 DateTime ...

  4. mysql修改密码的三种方式

  5. 攻防世界-Web-ics-05

    根据题目提示直接进入设备维护中心 点击云平台设备维护中心发现page=index LFI漏洞的黑盒判断方法: 单纯的从URL判断的话,URL中path.dir.file.pag.page.archiv ...

  6. Django13 /缓存、信号、django的读写分离

    Django13 /缓存.信号.django的读写分离 目录 Django13 /缓存.信号.django的读写分离 1. 缓存 2. 信号 3. django的读写分离 1. 缓存 缓存简述: 缓存 ...

  7. Python面向对象03 /继承

    Python面向对象03 /继承 目录 Python面向对象03 /继承 1. 初识继承 2. 单继承 3. 多继承 4. 总结 1. 初识继承 概念:专业角度:如果B类继承A类,B类就称为子类,派生 ...

  8. redis入门指南(三)—— 事务、过期时间、SORT命令、消息通知与管道

    写在前面 学习<redis入门指南>笔记,结合实践,只记录重要,明确,属于新知的相关内容. 事务 1.redis中的事务由一组命令的集合组成,要么都执行,要么都不执行,同时redis的事务 ...

  9. js获取url并截取相应的字段,js解决url获取中文字段乱码问题

    相信url截取信息是一个很常用的小功能页面跳转传参的时候可以在A页面的url挂一些参数到B页面获取正常的页面传参都是以数字和英文为主正常情况下中文获取的时候是有乱码的所谓上有政策下有对策一个正常的ur ...

  10. HangFire多集群切换及DashBoard登录验证

    项目中是有多个集群的,现在存在一个是:在切换web集群时,如何切换HangFire的周期性任务. 先采取的解决办法是: 每个集群分一个队列,在周期性任务入队时分配当前web集群的集群id单做队列名称. ...