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


Posted in PHP onSeptember 30, 2016

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 Executed, 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 相关文章推荐
用PHP实现WEB动态网页静态
Oct 09 PHP
PHP个人网站架设连环讲(三)
Oct 09 PHP
隐藏X-Space个人空间下方版权方法隐藏X-Space个人空间标题隐藏X-Space个人空间管理版权方法
Feb 22 PHP
使用php来实现网络服务
Sep 15 PHP
PHP正则的Unknown Modifier错误解决方法
Mar 02 PHP
PHP 面向对象 PHP5 中的常量
May 05 PHP
php set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
解析php中var_dump,var_export,print_r三个函数的区别
Jun 21 PHP
yii操作session实例简介
Jul 31 PHP
php简单获取目录列表的方法
Mar 24 PHP
php简单操作mysql数据库的类
Apr 16 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 PHP
PHP编写daemon process详解及实例代码
Sep 30 #PHP
PHP 极验验证码实例讲解
Sep 29 #PHP
php自定义函数转换html标签示例
Sep 29 #PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 #PHP
php自定义函数实现二维数组按指定key排序的方法
Sep 29 #PHP
分享一个漂亮的php验证码类
Sep 29 #PHP
你不知道的文件上传漏洞php代码分析
Sep 29 #PHP
You might like
php中使用接口实现工厂设计模式的代码
2012/06/17 PHP
php 去除html标记--strip_tags与htmlspecialchars的区别详解
2013/06/26 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
laravel 4安装及入门图文教程
2014/10/29 PHP
smarty简单入门实例
2014/11/28 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
PHP消息队列实现及应用详解【队列处理订单系统和配送系统】
2019/05/20 PHP
js 新浪的一个图片播放图片轮换效果代码
2008/07/15 Javascript
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
Vue实现PopupWindow组件详解
2018/04/28 Javascript
在node中使用jwt签发与验证token的方法
2019/04/03 Javascript
解决layer.open弹出框不能获取input框的值为空的问题
2019/09/10 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
微信小程序onShareTimeline()实现分享朋友圈
2021/01/07 Javascript
Python中List.index()方法的使用教程
2015/05/20 Python
Python设计模式编程中Adapter适配器模式的使用实例
2016/03/02 Python
在python2.7中用numpy.reshape 对图像进行切割的方法
2018/12/05 Python
python快排算法详解
2019/03/04 Python
Python中super函数用法实例分析
2019/03/18 Python
django ModelForm修改显示缩略图 imagefield类型的实例
2019/07/28 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
python实现批处理文件
2020/07/28 Python
Urban Outfitters英国官网:美国平价服饰品牌
2016/11/25 全球购物
美国餐厅用品和厨房设备批发网站:KaTom Restaurant Supply
2018/01/27 全球购物
地理教师岗位职责
2014/03/16 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
司法工作人员群众路线对照检查材料思想汇报
2014/09/30 职场文书
红旗渠导游词
2015/02/09 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
php 解析非标准json、非规范json
2021/04/01 PHP
Python WSGI 规范简介
2021/04/11 Python
html粘性页脚的具体使用
2022/01/18 HTML / CSS