获取数据想要用一个全局的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 线程池并发问题 全局变量操作导致数据混乱相关推荐

  1. python线程池并发爬虫_python 并发专题(二):python线程以及线程池相关以及实现...

    一 多线程实现 线程模块 - 多线程主要的内容:直接进行多线程操作,线程同步,带队列的多线程: Python3 通过两个标准库 _thread 和 threading 提供对线程的支持. _threa ...

  2. python线程池并发_python 并发编程多线程之进程池/线程池

    一.验证GIL锁的存在 Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行.虽然 Python 解释器中可以"运行"多个线程,但在任意时刻只有一个线程在解释器中运行 ...

  3. python线程池原理及使用

    python线程池及其原理和使用 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑 ...

  4. Python线程池与进程池

    Python线程池与进程池 前言 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识 ...

  5. Python 线程池 ThreadPoolExecutor(二) - Python零基础入门教程

    目录 一.Python 线程池前言 二.Python 线程池 ThreadPoolExecutor 常用函数 1.线程池 as_completed 函数使用 2.线程池 map 函数使用 3.线程池 ...

  6. Python 线程池 ThreadPoolExecutor(一) - Python零基础入门教程

    目录 一.Python 线程池前言 二.Python 线程池原理 三.Python 线程池 ThreadPoolExecutor 函数介绍 四.Python 线程池 ThreadPoolExecuto ...

  7. 深入理解-CPU核心数与线程池并发线程数关系

    那是一个风和日丽的下午! 面试官微微一笑,对我说:"小伙子,合理配置线程池你是如何考虑的?" 我微微一笑,说出了我的答案: 首先确认业务是CPU密集型还是IO密集型的, 如果是CP ...

  8. python线程池使用和问题记录

    记录一次使用多线程的问题 背景 最近工作有个需求根据文件中的数据请求中台服务,然后解析返回值.文件中每行代表一个参数,使用post方式携带参数请求中台接口. 分析:需要处理的数据量非常大(近200w行 ...

  9. 浅谈python线程池

    python线程池的使用 python的多线程管理一直很麻烦,可能是我基础不够好,这里记录并分享以下python的线程池管理 在网上查了一个线程池的使用资料,个人感觉不是很清晰 但是重点很到位, 原文 ...

最新文章

  1. 七大排序的个人总结(一)
  2. All in one:如何搭建端到端可观测体系
  3. 一个SAP UI5 TreeTable控件的错误分析
  4. 关于工作的选择之软件开发还是软件维护的建议
  5. 南航计算机学院岳涛,自动化学院 - 南京航空航天大学
  6. java+mysql学生学籍后台管理系统源码
  7. “我觉得,这个项目只需要 2 个小时”
  8. 开零食店能赚钱吗?有何经营技巧?
  9. iso 9000下载_ISO 9000 | 软件工程
  10. 【信息系统项目管理师】2018下半年系统集成项目管理工程师案例分析
  11. SQLServer中如何高效解析JSON格式数据
  12. 大学计算机基础教程第11章计算机网络与应用总结
  13. 链家网页爬虫_爬虫-链家网租金数据
  14. 《百年孤独》读书笔记
  15. 村长选举c语言程序,大村长-第一章 选举-爱阅小说网
  16. 图像的二维频谱图的理解 20170622
  17. linux怎样配置文件,Linux常见的配置文件
  18. [学习C++ ]C++ STL 全排列函数详解(排列组合与匹配算法)--1
  19. 如何打开安卓模拟器里的开发者选项
  20. ARM中大小端转换和按字节反转

热门文章

  1. 让你的图像更好看——pycharm环境下利用PIL处理图像
  2. 【<JVM垃圾回收专题>】
  3. 网络工程师小白必备!PPPoE是什么?原理及配置是怎么样的?
  4. O2O到家业务:如何从线下拉流量,盘活新老客户?
  5. discuz手机客户端java_完美解决电脑访问discuz手机版【支持触屏版】
  6. pandas fillna(0)
  7. Linux命令篇 linux命令大全简洁明了 linux学习笔记
  8. 你最崇拜谁?IT领域10大技术天才介绍
  9. 进程管理——终止进程
  10. 东方通TongWeb7部署SuperMap iServer War包