Python 线程池并发问题 全局变量操作导致数据混乱
获取数据想要用一个全局的DataFrame将方法返回的多个DataFrame进行拼接,使用线程池多线程操作全局变量导致数据混乱,每次运行出来的数据量都不一样。多个线程同时修改一个变量,导致数据混乱。
第一次运行:5765条数据
第二次运行:5122条数据
第三次运行:5128条数据
解决方法:
在程序中自己手动加同步锁Lock。用Lock.acquire()锁住要访问的资源,等访问资源后,用Lock.release()释放资源,确保每次只有一个线程访问该资源。
注意:不需要整个方法上锁,只需要在会造成数据出错的地方上锁,比如修改全局变量时。
datas = pd.DataFrame()
lock = threading.Lock() # Lock同步锁def get_datas(province):global datas # 全局变量df = get_data(province)lock.acquire() # 锁住资源try: # 只需要锁住修改全局变量的部分datas = pd.concat([df, datas], ignore_index=True)finally:lock.release() # 释放资源
比较普通方式和使用多线程+锁后的运行时间,明显使用多线程+锁后的程序运行快了许多。
Python 线程池并发问题 全局变量操作导致数据混乱相关推荐
- python线程池并发爬虫_python 并发专题(二):python线程以及线程池相关以及实现...
一 多线程实现 线程模块 - 多线程主要的内容:直接进行多线程操作,线程同步,带队列的多线程: Python3 通过两个标准库 _thread 和 threading 提供对线程的支持. _threa ...
- python线程池并发_python 并发编程多线程之进程池/线程池
一.验证GIL锁的存在 Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行.虽然 Python 解释器中可以"运行"多个线程,但在任意时刻只有一个线程在解释器中运行 ...
- python线程池原理及使用
python线程池及其原理和使用 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑 ...
- Python线程池与进程池
Python线程池与进程池 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识 ...
- Python 线程池 ThreadPoolExecutor(二) - Python零基础入门教程
目录 一.Python 线程池前言 二.Python 线程池 ThreadPoolExecutor 常用函数 1.线程池 as_completed 函数使用 2.线程池 map 函数使用 3.线程池 ...
- Python 线程池 ThreadPoolExecutor(一) - Python零基础入门教程
目录 一.Python 线程池前言 二.Python 线程池原理 三.Python 线程池 ThreadPoolExecutor 函数介绍 四.Python 线程池 ThreadPoolExecuto ...
- 深入理解-CPU核心数与线程池并发线程数关系
那是一个风和日丽的下午! 面试官微微一笑,对我说:"小伙子,合理配置线程池你是如何考虑的?" 我微微一笑,说出了我的答案: 首先确认业务是CPU密集型还是IO密集型的, 如果是CP ...
- python线程池使用和问题记录
记录一次使用多线程的问题 背景 最近工作有个需求根据文件中的数据请求中台服务,然后解析返回值.文件中每行代表一个参数,使用post方式携带参数请求中台接口. 分析:需要处理的数据量非常大(近200w行 ...
- 浅谈python线程池
python线程池的使用 python的多线程管理一直很麻烦,可能是我基础不够好,这里记录并分享以下python的线程池管理 在网上查了一个线程池的使用资料,个人感觉不是很清晰 但是重点很到位, 原文 ...
最新文章
- 七大排序的个人总结(一)
- All in one:如何搭建端到端可观测体系
- 一个SAP UI5 TreeTable控件的错误分析
- 关于工作的选择之软件开发还是软件维护的建议
- 南航计算机学院岳涛,自动化学院 - 南京航空航天大学
- java+mysql学生学籍后台管理系统源码
- “我觉得,这个项目只需要 2 个小时”
- 开零食店能赚钱吗?有何经营技巧?
- iso 9000下载_ISO 9000 | 软件工程
- 【信息系统项目管理师】2018下半年系统集成项目管理工程师案例分析
- SQLServer中如何高效解析JSON格式数据
- 大学计算机基础教程第11章计算机网络与应用总结
- 链家网页爬虫_爬虫-链家网租金数据
- 《百年孤独》读书笔记
- 村长选举c语言程序,大村长-第一章 选举-爱阅小说网
- 图像的二维频谱图的理解 20170622
- linux怎样配置文件,Linux常见的配置文件
- [学习C++ ]C++ STL 全排列函数详解(排列组合与匹配算法)--1
- 如何打开安卓模拟器里的开发者选项
- ARM中大小端转换和按字节反转