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

分享PHP-pcntl 实现多进程代码

php 搞代码 4年前 (2022-01-04) 24次浏览 已收录 0个评论

PHP使用PCNTL系列的函数也能做到多进程处理一个事务。比如我需要从数据库中获取80w条的数据,再做一系列后续的处理,这个时候,用单进程?你可以等到明年今天了。。。所以应该使用pcntl函数了。

下面我们来看个实例

代码

<?php$arChildId = array(); for($i = 0; $i < 10; $i++){$iPid = pcntl_fork();if($iPid == -1){  die('can\'t be forked.');} if($iPid){  # 主进程逻辑  $arChildId[] = $iPid;}else  {  # 子进程逻辑  $iPid = posix_getpid(); # 获取子进程的ID  $iSeconds = rand(5, 30);  echo '* Process '. $iPid. ' was created, and Executed, and Sleep '. $iSeconds. PHP_EOL;  excuteProcess($iPid, $iSeconds);  exit();}} while(count($arChildId) > 0){foreach($arChildId as $iKey=> $iPid){  $res = pcntl_waitpid($iPid, $status, WNOHANG);   if($res == -1 || $res > 0)  {    unset($arChildId[$iKey]);    echo '* Sub process: '. $iPid. ' exited with '. $status. PHP_EOL;  }}} # 子进程执行的逻辑function excuteProcess($iPid, $iSeconds){file_put_contents('./log/'.$iPid.'.log', $iPid.PHP_EOL, FILE_APPEND);sleep($iSeconds);}?>

运行结果

* Process 16163 was created, and Executed, and Sleep 11* Process 16164 was created, and Exec<strong style="color:transparent">来源gao@daima#com搞(%代@#码网</strong>uted, and Sleep 21* Process 16165 was created, and Executed, and Sleep 24* Process 16166 was created, and Executed, and Sleep 27* Process 16167 was created, and Executed, and Sleep 8* Process 16168 was created, and Executed, and Sleep 14* Process 16169 was created, and Executed, and Sleep 14* Process 16170 was created, and Executed, and Sleep 26* Process 16171 was created, and Executed, and Sleep 20* Process 16172 was created, and Executed, and Sleep 21* Sub process: 16167 exited with 0* Sub process: 16163 exited with 0* Sub process: 16169 exited with 0* Sub process: 16168 exited with 0* Sub process: 16171 exited with 0* Sub process: 16164 exited with 0* Sub process: 16172 exited with 0* Sub process: 16165 exited with 0* Sub process: 16170 exited with 0* Sub process: 16166 exited with 0

更多分享PHP-pcntl 实现多进程代码相关文章请关注搞代码


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

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

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

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