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) ; } }
相关推荐
银角大王 2020-06-25
Hhanwen 2020-05-12
zhangll00 2020-05-07
sui 2020-04-29
GeorgeTH 2020-03-02
Aggressivesnail 2020-02-28
laohyx 2020-01-30
sdwylry 2020-01-05
LuoXinLoves 2019-12-24
budding0 2019-12-17
iphilo 2019-12-16
jiangtie 2019-12-09
嗡汤圆 2019-11-10
LiHansiyuan 2019-11-03
程松 2019-09-05
上方科技技术交流 2016-07-11
zhoushuaiyin 2015-05-26