Python2.7 PicklingError: Can't pickle <type 'instancemethod'>: attribute lookup __builtin__.instancemethod failed 问题解决
# 报错信息
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 问题解决的更多相关文章
- PicklingError: Can't pickle <type 'generator'>: it's not found as __builtin_
多进程传递 参数时,需要是python系统已知的,不然不知道怎么序列化
- python2,socket多进程的错误pickle.PicklingError: Can't pickle
python2,socket多进程的错误pickle.PicklingError: Can't pickle 源码: #coding:utf-8 import socket import pickle ...
- pickle模块 no attribute 'dumps'
今天写了一个pickle.py的文件练习pickle模块,代码如下: import pickle dic = {"linga": ('football',)} dic2 = {&q ...
- chrome下input[type=text]的placeholder不垂直居中的问题解决
http://blog.csdn.net/do_it__/article/details/6789699 <input type="text" placeholder=&qu ...
- 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 ...
- Qt深入:不能不知道的Type、Attribute和Flags
Qter高手与新手的区别在于:知道还是不知道 Qt不是开发语言,所以无所谓谁厉害.但使用他的Qter却有着差异,也许是面向对象语言本身的.或者实际经验上的.而对于Qt本身来说,高手与新手最显著的差异在 ...
- python multiprocess pool模块报错pickling error
问题 之前在调用class内的函数用multiprocessing模块的pool函数进行多线程处理的时候报了以下下错误信息: PicklingError: Can't pickle <type ...
- python 多进程使用总结
python中的多进程主要使用到 multiprocessing 这个库.这个库在使用 multiprocessing.Manager().Queue时会出问题,建议大家升级到高版本python,如2 ...
- python多进程并发进程池Pool
简介: python中的多进程主要使用到 multiprocessing 这个库.低版本python这个库在使用 multiprocessing.Manager().Queue时会出问题,建议大家升级 ...
随机推荐
- 深入理解JVM(③)Java模块化系统
前言 JDK9引入的Java模块化系统(Java Platform Module System ,JPMS)是 对Java技术的一次重要升级,除了像之前JAR包哪有充当代码的容器之外,还包括: 依赖其 ...
- C++ 调用Python文件方法传递字典参数并接收返回值
首先本地需要安装有Python环境,然后在c++工程中包含Python的头文件,引用Python的lib库. //python 初始化 Py_Initialize(); if (!Py_IsIniti ...
- 同一WpfApplication下简单的页面转换
别人写的很不错的Dome...分享学习下 源文件地址 : http://pan.baidu.com/share/link?shareid=1698564707&uk=3912660076
- python中lambda匿名函数与函数之间的关系
- Netty系列之源码解析(一)
本文首发于微信公众号[猿灯塔],转载引用请说明出处 接下来的时间灯塔君持续更新Netty系列一共九篇 当前:Netty 源码解析(一)开始 Netty 源码解析(二): Netty 的 Channel ...
- pdf流文件转图片
需求:将后台返回的pdf流文件转换成图片与页面其他内容一起打印pdf流文件不能直接在前台显示,需要借助pdf.js+viewer.js. 一般情况下,如果要打印pdf流文件,可以直接在新打开的view ...
- 浏览器访问 www.baidu.com 的过程
浏览器访问 www.baidu.com 的过程 1 先要解析出www.baidu.com DNS域名解析为服务器 IP 2 得到 IP地址后,客户端会发起TCP请求,以及3次握手建立连接 3 建立连接 ...
- EOS基础全家桶(十五)智能合约进阶2
简介 今天我们继续补充智能合约的进阶使用技巧,这次的主题是交易,合约内我们除了可以发起内联action的调用,很多使用还需要直接调用其他的合约action或者以交易的形式调用自身的action. 发起 ...
- 我们现在的git版本管理
1.git发布正式版都统一用master分支的代码发布2.每次开发下一版本的需求时,将master分支的代码打一个tag,版本号与后台一致3.需要紧急修复线上的bug时,从master分支拉一个分支出 ...
- Python-字符串内容检测
str.isnumeric():检测字符串是否只由数字组成 str.isalpha():检测字符串是否只由字母组成 str.islower():检测字符串中所有的字母是否都为小写 str.isuppe ...