解决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脚本生成Android SALT扰码的方法
Sep 18 Python
简单的通用表达式求10乘阶示例
Mar 03 Python
Python使用代理抓取网站图片(多线程)
Mar 14 Python
pygame学习笔记(5):游戏精灵
Apr 15 Python
python清除字符串里非字母字符的方法
Jul 02 Python
解决Python字典写入文件出行首行有空格的问题
Sep 27 Python
基于Python实现的微信好友数据分析
Feb 26 Python
使用python进行广告点击率的预测的实现
Jul 04 Python
python如何使用Redis构建分布式锁
Jan 16 Python
python可以用哪些数据库
Jun 22 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 Python
Python爬虫框架之Scrapy中Spider的用法
Jun 28 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
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
jQuery Ajax 实例全解析
2011/04/20 Javascript
js substr支持中文截取函数代码(中文是双字节)
2013/04/17 Javascript
Javascript数组操作函数总结
2015/02/05 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
简单对比分析JavaScript中的apply,call与this的使用
2015/12/04 Javascript
简要了解jQuery移动web开发的响应式布局设计
2015/12/04 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
2017/12/27 Javascript
11行JS代码制作二维码生成功能
2018/03/09 Javascript
vue项目刷新当前页面的三种方法
2018/12/04 Javascript
js中位运算的运用实例分析
2018/12/11 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
Python中的localtime()方法使用详解
2015/05/22 Python
windows下python安装小白入门教程
2018/09/18 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
浅析Django中关于session的使用
2019/12/30 Python
聊聊python中的循环遍历
2020/09/07 Python
python日志通过不同的等级打印不同的颜色(示例代码)
2021/01/13 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
HTML5实现移动端弹幕动画效果
2019/08/01 HTML / CSS
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
公务员培训自我鉴定
2013/09/19 职场文书
毕业生自荐信的主要内容
2013/10/29 职场文书
妈妈的账单教学反思
2014/02/06 职场文书
年度考核自我鉴定
2014/03/19 职场文书
安全月活动总结
2014/05/05 职场文书
和谐家庭演讲稿
2014/05/24 职场文书
行政专员岗位职责范本
2014/08/26 职场文书
运动会闭幕式致辞
2015/07/29 职场文书
2016学校先进党组织事迹材料
2016/02/29 职场文书
小学2016年“我们的节日·重阳节”活动总结
2016/04/01 职场文书
python tqdm用法及实例详解
2021/06/16 Python
浅谈mysql增加索引不生效的几种情况
2021/06/23 MySQL
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技