加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

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

发布时间:2020-05-23 08:46:06 所属栏目:PHP 来源:互联网
导读:PHP可通过PCNTL扩展实现进程控制,如进程创建,信号处理,进程中断判断等。但只能在CLI模式下操作。PCNTL的信号机制是基于 ticks 机制实现的。

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

下面我们来看个实例

代码

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);
}
?>

运行结果

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读