解决python多线程报错:AttributeError: Can't pickle local object问题


Posted in Python onApril 08, 2020

报错信息:

Traceback (most recent call last):
File “D:/flaskProject/test.py”, line 35, in test
pool.apply(self.out, args=(i,))
File “Python37-32\lib\multiprocessing\pool.py", line 261, in apply
return self.apply_async(func, args, kwds).get()
File "\lib\multiprocessing\pool.py”, line 657, in get
raise self._value
File “\Python37-32\lib\multiprocessing\pool.py", line 431, in _handle_tasks
put(task)
File "\Python37-32\lib\multiprocessing\connection.py”, line 206, in send
self._send_bytes(_ForkingPickler.dumps(obj))
File “*\Python37-32\lib\multiprocessing\reduction.py”, line 51, in dumps
cls(buf, protocol).dump(obj)
TypeError: can't pickle _thread._local objects

原类的构造函数:

class threadtest:

def __init__(self, ipList, user, password):
 self.ipList = ipList
 self.httpAuth = HTTPDigestAuth(user, password)
 return

def out(self, i):
 url = "http://" + i + "/name"
 response = requests.get(url, self.httpAuth)
 print(response.text)
 return

def test(self):
 pool = Pool(processes=2)
 for i in self.ipList:
 pool.apply(self.out, args=(i,))
 pool.close()
 pool.join()
 return
if name == ‘main':
ipList = [‘192.168.2.1', ‘192.168.2.2', ‘192.168.2.3', ‘192.168.2.4', ‘192.168.2.5', ]
a = threadtest(ipList, ‘admin', ‘admin')
a.test()

原因:

在class中对属性进行初始化使用了其它类返回的句柄进行初始化导致,HTTPDigestAuth的返回值不能进行序列化,也就是不能作为cls(buf, protocol).dump(obj)的参数进行序列化。

将self.httpAuth = HTTPDigestAuth(httpUser, httpPassword)修改为:

self.httpUser
self.httpPassword

并将函数HTTPDigestAuth放到类的方法中

修改后:

class threadtest:

def __init__(self, ipList, user, password):
 self.ipList = ipList
 self.user = user
 self.password = password
 return

def out(self, i):
 url = "http://" + i + "/name"
 response = requests.get(url, HTTPDigestAuth(self.user, self.password))
 print(response.text)
 return

def test(self):
 pool = Pool(processes=2)
 for i in self.ipList:
 pool.apply(self.out, args=(i,))
 pool.close()
 pool.join()
 return
if name == ‘main':
ipList = [‘192.168.2.1', ‘192.168.2.2', ‘192.168.2.3', ‘192.168.2.4', ‘192.168.2.5', ]
a = threadtest(ipList, ‘admin', ‘admin')
a.test()

以上这篇解决python多线程报错:AttributeError: Can't pickle local object问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现类似jQuery使用中的链式调用的示例
Jun 16 Python
Python+django实现简单的文件上传
Aug 17 Python
在 Python 应用中使用 MongoDB的方法
Jan 05 Python
使用Python写一个小游戏
Apr 02 Python
在Python中pandas.DataFrame重置索引名称的实例
Nov 06 Python
Python3实现计算两个数组的交集算法示例
Apr 03 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
通过python扫描二维码/条形码并打印数据
Nov 14 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
Tensorflow tensor 数学运算和逻辑运算方式
Jun 30 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 Python
Python制作动态字符画的源码
Aug 04 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
Apr 08 #Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
Apr 08 #Python
解决windows下python3使用multiprocessing.Pool出现的问题
Apr 08 #Python
python操作yaml说明
Apr 08 #Python
python 在右键菜单中加入复制目标文件的有效存放路径(单斜杠或者双反斜杠)
Apr 08 #Python
python将音频进行变速的操作方法
Apr 08 #Python
Python读取配置文件(config.ini)以及写入配置文件
Apr 08 #Python
You might like
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
jquery DOM操作 基于命令改变页面
2010/05/06 Javascript
基于PHP+Jquery制作的可编辑的表格的代码
2011/04/10 Javascript
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
js创建子窗口并且回传值示例代码
2013/07/02 Javascript
用js正确判断用户名cookie是否存在的方法
2014/01/28 Javascript
js中settimeout方法加参数的使用实例
2014/02/27 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
JS上传图片预览插件制作(兼容到IE6)
2016/08/07 Javascript
bootstrap中使用google prettify让代码高亮的方法
2016/10/21 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
jquery网页加载进度条的实现
2017/06/01 jQuery
解决Vue中引入swiper,在数据渲染的时候,发生不滑动的问题
2018/09/27 Javascript
JS module的导出和导入的实现代码
2019/02/25 Javascript
原生js实现瀑布流效果
2020/03/09 Javascript
Jquery cookie插件实现原理代码解析
2020/08/04 jQuery
Vue中inheritAttrs的使用实例详解
2020/12/31 Vue.js
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
python获取文件后缀名及批量更新目录下文件后缀名的方法
2014/11/11 Python
python实现守护进程、守护线程、守护非守护并行
2018/05/05 Python
Python+OpenCV采集本地摄像头的视频
2019/04/25 Python
python 获取等间隔的数组实例
2019/07/04 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
python实现计算器简易版
2020/12/17 Python
超酷炫 CSS3垂直手风琴菜单
2016/06/28 HTML / CSS
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
《黄山奇石》教学反思
2014/04/19 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
幼儿园课题实施方案
2014/05/14 职场文书
2014年校务公开工作总结
2014/12/18 职场文书
2015年班组工作总结
2015/04/20 职场文书
MySQL查询学习之基础查询操作
2021/05/08 MySQL
使用Python脚本对GiteePages进行一键部署的使用说明
2021/05/27 Python
css 边框添加四个角的实现代码
2021/10/16 HTML / CSS
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python