• python(47): 多线程多进程应用-批量造数据小结


    一..造数据要求

    1.1 千万级数量

    1.2 写进多个dbf文件,每个dbf文件关联两个sql文件-关联列为1.3的累加列

    1.3 dbf文件两列全局唯一并累加,部分列随机生成

    1.4 sql文件三列全局唯一并累加,部分列随机生成

    二.实现方案

    2.1串行执行

    10w行数据

    造一个dbf 和关联的sql1, sql2文件, 3分21秒  -- cpu占用12%左右(8核系统,单个cpu已占满)

    2.2 多线程并行,线程锁锁住全局唯一变量

    10w行数据

    造2个dbf文件和他们关联的sql1,sql2文件, 时间 7分钟   -- 根据2.1中cpu占用属于正常时间

    2.3 多进程并行,进程锁锁住全局唯一变量

    10w行数据

    造1个dbf文件+关联的sql1,sql2文件,时间7分05, ?--进程锁切换占用时间

    造4个dbf文件+关联的sql1,sql2文件,时间12分06秒,

    2.4 多进程并行,不使用进程锁,按生成数据数量预分配每个进程使用 的全局唯一变量范围

    10w行数据

    造1个dbf文件+关联的sql1,sql2文件,时间3分39,

    造4个dbf文件+关联的sql1,sql2文件,时间4分02秒, -- 4个python进程,每个占用12%左右(8核系统)

    100w行数据

    造4个dbf文件+关联的sql1,sql2文件,时间33分48秒 -- 符合预期

    三.总结

    2.4为最优方案,同时创建多个dbf文件时,每个创建流程启动对应的进程,运行时每个进程占用12%cpu左右(8核系统已占满);单个进程内创建dbf,sql1,sql2文件是串行执行。

    由于以上实践都以10w为实验,千万数据成倍数所需时间按倍数相乘即可大约35-40分钟

    注:当创建文件数(进程数)超过系统核心数时,整体时间会翻倍超过创建单个文件的时间

    例:

    8核系统-10w行数据:

    单个文件-3分钟,

    同时创建1-8个文件 ~= 3分钟,

    同时创建9-16个文件 ~= 6分钟  

  • 相关阅读:
    内联函数——C++
    【软件安装】Windows系统中使用miniserve搭建一个文件服务器
    Spark - 一文搞懂 Partitioner
    MySql 5.7授权远程登陆
    mongodb.使用自带命令工具导出导入数据
    高可用技术
    用Nodejs 实现一个简单的 Redis客户端
    使用CIFAR10数据集完成知识蒸馏(参照了快乐就好_Peng博主的博客)致谢
    最佳实践 | 顶尖咨询公司常用的解决问题工具
    国外问卷调查赚钱靠谱吗?
  • 原文地址:https://blog.csdn.net/qq_37674086/article/details/126282087