zoukankan      html  css  js  c++  java
  • php多进程结合Linux利器split命令实现把大文件分批高效处理

    有时候会遇到这样的需求,比如log日志文件,这个文件很大,甚至上百M,需要把所有的日志拿来做统计,这时候我们如果用单进程来处理,效率会很慢。
    如果我们想要快速完成这项需求,我们可以利用Linux的一个利器split,先根据这个文件的总大小、总行数,来按照一个比例来分割,在根据分割的文件数量,fork出一定比例合适的子进程数量分批处理,那么效率可想而知。

    linux的split可以看这篇文章来学习测试下Centos文件切割利器_split命令及cat命令合并文件

    //shell
    # split -l 1000 -d test.txt new_test.txt --verbose   //比如这里切割了10份           
    <?php
    //php代码
    //根据切割数量,fork相匹配的子进程数量
    $count = 10;
    for ($i = 0; $i < $count; ++$i ) {
        $pid = pcntl_fork();    //创建子进程
        //父进程和子进程都会执行下面代码
        if ($pid == -1) {
            //错误处理:创建子进程失败时返回-1.
            die('could not fork');
        } else if ($pid) {
            //父进程会得到子进程号,所以这里是父进程执行的逻辑
            //如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成:
            pcntl_wait($status,WNOHANG); //等待子进程中断,防止子进程成为僵尸进程。
        } else {
             // 业务处理 begin
            func("new_text.txt0".$i);
            // 业务处理 end
            exit(0) ;
        }
    }
  • 相关阅读:
    Ubuntu 安装 JDK 7 / JDK8 的两种方式
    python 深拷贝 浅拷贝 赋值
    importlib.import_module
    pandas分块读取大量数据集
    win10下安装XGBoost Gpu版本
    win10下安装LGBM GPU版本
    统计自然语言处理(第二版)笔记1
    K-近邻算法
    2019考研的一些心得
    lib和dll的区别与使用
  • 原文地址:https://www.cnblogs.com/wt645631686/p/8418415.html
Copyright © 2011-2022 走看看