首页 > 系统相关 >python脚本中应用多线程和多进程理解

python脚本中应用多线程和多进程理解

时间:2023-10-19 11:57:47浏览次数:32  
标签:脚本 idx python content station result file 多线程

脚本内容

因为要读取mongo某个全表数据(亿级别),有个字段有索引且是一堆多的关系
从其他表读取所有这个字段(十万级别),再读取大表
因为数据量大所以写个测试,从中拿出几条去大表查询(每次读到十万级别数据)

多线程和多进程的影响

不使用多线/进程

file = open('test2.csv', 'w')
content = csv.writer(file)
station_ids = ['1', '2', '3', '4', '5', '6', '7', '8']
for station_id in station_ids:
    result = get_xxx_by_station_id(station_id)
    content.writerow(result)
file.close()
# 最后执行时间74.20422029495239

多线程

# 测试代码段
file = open('test2.csv', 'w')
content = csv.writer(file)
station_ids = ['1', '2', '3', '4', '5', '6', '7', '8']
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as exector:
    for nums in range(0, 7, 5):
        all_result = []
        for idx in range(nums, nums + 5):
            if idx > 7: break
            result = exector.submit(get_xxx_by_station_id,station_ids[idx])
            all_result.append(result)
        for one_result in concurrent.futures.as_completed(all_result):
            content.writerow(one_result.result())
file.close()
# 最后执行时间29.21958827972412

多进程

# 测试代码段
file = open('test2.csv', 'w')
content = csv.writer(file)
station_ids = ['1', '2', '3', '4', '5', '6', '7', '8']
with concurrent.futures.ProcessPoolExecutor(max_workers=5) as exector:
    for nums in range(0, 7, 5):
        all_result = []
        for idx in range(nums, nums + 5):
            if idx > 7: break
            result = exector.submit(get_xxx_by_station_id,station_ids[idx])
            all_result.append(result)
        for one_result in concurrent.futures.as_completed(all_result):
            content.writerow(one_result.result())
file.close()
# 最后执行时间30.441758632659912

思考

对于脚本我想应该是多次向数据库发送查询请求,数据库那边获取数据时间比较长,如果不用多进程/线程的话,脚本这边一直处于等待的等到数据返回回来的时候再次发送下次的查询请求
而对于多线程和多进程对于脚本的影响是一样的或者多线程会更快一点的原因应该是向数据库发送请求应该是io请求,对于cpu使用不大,所以多进程应该发挥不出很大作用(这块没有考虑python内置GIL锁的情况)

标签:脚本,idx,python,content,station,result,file,多线程
From: https://www.cnblogs.com/weakxy-home/p/17774371.html

相关文章

  • python写爆破字典
    #coding:utf-8withopen('username.txt','wb')asf:foriinrange(00000,99999):line=str('w'+'%05d'%i)+'\n'f.write(line)f.close()    ......
  • python01
    #==============================#单行注释以警号开始#注释一般是用在有意义的代码上,helloworld大家都看得懂,没必要注释"""  多行注释内容,三个双引号或者单引号都可以  '''多行注释内容'''"""print("HelloWorld!")#==============================#......
  • Linux-shell脚本使用ssh远程执行命令通过密码的方式登录
    1. sshpass简介sshpass是一个在非交互式ssh会话中自动输入密码的工具。它可以直接在命令行中指定密码,因此可以用于Shell脚本等自动化场景。在RedHat系统中,可以通过epel-release源安装sshpass。epel-release源是ExtraPackagesforEnterpriseLinux(EPEL)的缩写......
  • 21.python异常处理和断言
    python异常处理和断言目录python异常处理和断言异常捕获流程案例触发异常异常类型异常处理的优点断言函数assert异常捕获流程捕捉异常可以使用try/except语句。try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理。try: <语句>#运行别的......
  • Python入门进阶:68 个 Python 内置函数详解
    内置函数就是Python给你提供的,拿来直接用的函数,比如print.,input等。截止到python版本3.6.2,python一共提供了68个内置函数,具体如下abs()dict()help()min()setattr()all()dir()hex()next()slice()any()divmod()id()object()sorted()ascii()enumerate()input()......
  • Kraft模式下Kafka脚本的使用
    Kafka集群版本:V3.5.1名称Node1Node2Node3IP172.29.145.157172.29.145.182172.29.145.183(1)查看Kraft集群中的状态以及Leader节点,投票节点使用--status可以查看集群选举次数/水位线以及投票节点等使用--replication可以查看Ledaer和Follower分布使用kafka-m......
  • Python 快速入门
    Python快速入门更好的阅读体验?0.前景知识......
  • 基于Python的《计算机组成原理》在线学习平台-计算机毕业设计源码+LW文档
    摘 要 随着互联网的发展,通过计算机来学习是当前非常流行的一种学习方式。通过课程虽然可以面对面的进行交流和学习,但是很多时候因为地区和空间的限制会受到很多的影响但是通过网络来进行学习可以打破这一局限性,为此我开发了本基于Python的《计算机组成原理》在线学习平台网站......
  • 基于python的旅游网站-计算机毕业设计源码+LW文档
    摘 要 随着时代的发展,人们对旅游也越来越重视,近些年来我国的旅游产业也发生了翻天覆地的变化,但是很多人在出去旅游的时候不知道去哪里旅游,在预订酒店和机票的时候也没有一个综合性的旅游网站,为了让人们的旅游变的更加的方便,为此我开发了本基于python的旅游网站本基于python的......
  • 力扣每日一题+python知识点回顾
    力扣题目:执行K次操作后的最大分数(题号:2530)给你一个下标从0开始的整数数组nums和一个整数k。你的起始分数为0。在一步操作中:选出一个满足0<=i<nums.length的下标i,将你的分数增加nums[i],并且将nums[i]替换为ceil(nums[i]/3)。返回在恰好执......