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) ;
    }
}
复制代码
posted @   温柔的风  阅读(518)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示