• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php多进程执行任务的说明

php 搞代码 4年前 (2022-01-21) 20次浏览 已收录 0个评论
文章目录[隐藏]

这篇文章主要介绍了关于php多进程执行任务的说明,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

需求

对指定数量的多个任务并发执行,并控制进程数

进程&线程:

进程间相互独立,不影响。

代码示例:

<?php$task = 0; //任务id$taskNum = 10; //任务总数$processNumLimit = 2; //子进程总量限制while(true){   //产生分支   $processid = pcntl_fork();   //创建子进程失败   if( $processid == -1 ){       echo "create process error!\n";       exit(1);   }   //主进程,获得子进程pid   elseif($processid){       $task++; //下一个任务       $currentProcessid = posix_getpid(); //当前进程的Id       $parentProcessid = posix_getppid(); // 父级进程的ID       $phpProcessid = getmypid(); //当前php进程的id       echo "task:",$task,"\tprocessid:",$processid,"\tcurrentProcessid:",$currentProcessid,"\tparentProcessid:",$parentProcessid,"\tphpProcessid:",$phpProcessid,"\n";       //控制进程数       if($task >= $processNumLimit) {           echo "wait chl start!\n";           $exitid = pcntl_wait($status); //等待退出           echo "wait chl end!extid:",$exitid,"\tstatus:",$status,"\n";       }              //任务总量控制       if($task >= $taskNum) {           echo "taskNum enough!\n";           break;       }   }   //processid=0为新创建的进程   else{       //模拟不同任务的不同执行时长       $sleep = rand(1, 5);       $currentProcessid = posix_getpid(); //当前进程的Id       $parentProcessid = posix_getppid(); // 父级进程的ID       $phpProcessid = getmypid(); //当前php进程的id       echo "task:",$task,"\tprocessid:",$processid,"\tcurrentProcessid:",$currentProcessid,"\tparentProcessid:",$parentProcessid,"\tphpProcessid:",$phpProcessid,"\tsleep:",$sleep,"\tbegin!\n";       sleep($sleep);       echo "task:",$task,"\tprocessid:",$processid,"\tcurrentProcessid:",$currentProcessid,"\tparentProcessid:",$parentProcessid,"\tphpProcessid:",$phpProcessid,"\tsleep:",$sleep,"\tend!\n";              exit(0); //子进程执行完后退出,防止进入循环创建子进程   }}

执行的结果:

task:1    processid:32225    currentProcessid:32224    parentProcessid:15053    phpProcessid:32224task:0    processid:0    currentProcessid:32225    parentProcessid:32224    phpProcessid:32225    sleep:5    begin!task:2    processid:32226    currentProcessid:32224    parentProcessid:15053    phpProcessid:32224wait chl start!task:1    processid:0    currentProcessid:32226    parentProcessid:32224    phpProcessid:32226    sleep:2    begin!task:1    processid:0    currentProcessid:32226    parentProcessid:32224    phpProcessid:32226    sleep:2    end!wait chl end!extid:32226    status:0task:3    processid:32228    currentProcessid:32224    parentProcessid:15053    phpProcessid:32224wait chl start!task:2    processid:0    currentProcessid:32228    parentProcessid:32224    phpProcessid:32228    sleep:1    begin!task:2    processid:0    currentProcessid:32228    parentProcessid:32224    phpProcessid:32228    sleep:1    end!wait chl end!extid:32228    status:0task:4    processid:32229    currentProcessid:32224    parentProcessid:15053    phpProcessid:32224wait chl start!task:3    processid:0    currentProcessid:32229    parentProcessid:32224    phpProcessid:32229    sleep:2    begin!task:0    processid:0    currentProcessid:32225    parentProcessid:32224    phpProcessid:32225    sleep:5    end!wait chl end!extid:32225    status:0task:5    processid:32270    currentProcessid:32224    parentProcessid:15053    phpProcessid:32224wait chl start!task:4    processid:0    currentProcessid:32270    parentProcessid:32224    phpProcessid:32270    sleep:1    begin!task:3    processid:0    currentProcessid:32229    parentProcessid:32224    phpProcessid:32229    sleep:2    end!wait chl end!extid:32229    status:0task:6    processid:32271    currentProcessid:32224    parentProcessid:15053    phpProcessid:32224wait chl start!task:5    processid:0    currentProcessid:32271    parentProcessid:32224    phpProcessid:32271    sleep:4    begin!task:4    processid:0    currentProcessid:32270    parentProcessid:32224    phpProcessid:32270    sleep:1    end!wait chl end!extid:32270    status:0task:7    processid:32273    currentProcessid:32224    parentProcessid:15053    phpProcessid:32224wait chl start!task:6    processid:0    currentProcessid:32273    parentProcessid:32224    phpProcessid:32273    sleep:1    begin!task:6    processid:0    currentProcessid:32273    parentProcessid:32224    phpProcessid:32273    sleep:1    end!wait chl end!extid:32273    status:0task:8    processid:32274    currentProcessid:32224    parentProcessid:15053    phpProcessid:32224wait chl start!task:7    processid:0    currentProcessid:32274    parentProcessid:32224    phpProcessid:32274    sleep:2    begin!task:5    processid:0    currentProcessid:32271    parentProcessid:32224    phpProcessid:32271    sleep:4    end!task:7    processid:0    currentProcessid:32274    parentProcessid:32224    phpProcessid:32274    sleep:2    end!wait chl end!extid:32274    status:0task:9    processid:32277    currentProcessid:32224    parentProcessid:15053    phpProcessid:32224wait chl start!wait chl end!extid:32271    status:0task:8    processid:0    currentProcessid:32277    parentProcessid:32224    phpProcessid:32277    sleep:2    begin!task:10    processid:32278    currentProcessid:32224    parentProcessid:15053    phpProcessid:32224wait chl start!task:9    processid:0    currentProcessid:32278    parentProcessi<i style="color:transparent">本文来源gaodai$ma#com搞$$代**码)网8</i><strong>搞代gaodaima码</strong>d:32224    phpProcessid:32278    sleep:2    begin!task:8    processid:0    currentProcessid:32277    parentProcessid:32224    phpProcessid:32277    sleep:2    end!task:9    processid:0    currentProcessid:32278    parentProcessid:32224    phpProcessid:32278    sleep:2    end!wait chl end!extid:32277    status:0taskNum enough

执行分析:


  1. 搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
    转载请注明原文链接:php多进程执行任务的说明
    喜欢 (0)
    [搞代码]
    分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址