PHP的pcntl多进程用法实例


Posted in PHP onMarch 19, 2015

本文实例讲述了PHP的pcntl多进程用法。分享给大家供大家参考。具体分析如下:

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

假设我想要启动20个进程,将1-80w的数据分成20份来做,主进程等待所有子进程都结束了才退出:

$max = 800000;
$workers = 20;
$pids = array();
for($i = 0; $i < $workers; $i++){
  $pids[$i] = pcntl_fork();
  switch ($pids[$i]) {
    case -1:
      echo "fork error : {$i} \r\n";
      exit;
    case 0:
      $param = array(
        'lastid' => $max / $workers * $i,
        'maxid' => $max / $workers * ($i+1),
      );
      $this->executeWorker($input, $output, $param);
      exit;
    default:
      break;
  }
}
foreach ($pids as $i => $pid) {
  if($pid) {
    pcntl_waitpid($pid, $status);
  }
}

这里当pcntl_fork出来以后,会返回一个pid值,这个pid在子进程中看是0,在父进程中看是子进程的pid(>0),如果pid为-1说明fork出错了。

使用一个$pids数组就可以让主进程等候所有进程完结之后再结束了

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
配置最新的PHP加MYSQL服务器
Oct 09 PHP
PHP新手上路(十一)
Oct 09 PHP
php session 预定义数组
Mar 16 PHP
php 发送带附件邮件示例
Jan 23 PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 PHP
Codeigniter+PHPExcel实现导出数据到Excel文件
Jun 12 PHP
详解WordPress中用于合成数组的wp_parse_args()函数
Dec 18 PHP
php自定义函数实现JS的escape的方法示例
Jul 07 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
Apr 15 PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 PHP
聊聊 PHP 8 新特性 Attributes
Aug 19 PHP
PHP 实现链式操作
Mar 09 PHP
php安装swoole扩展的方法
Mar 19 #PHP
php清除和销毁session的方法分析
Mar 19 #PHP
Codeigniter发送邮件的方法
Mar 19 #PHP
Codeigniter实现发送带附件的邮件
Mar 19 #PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
Mar 19 #PHP
php检查日期函数checkdate用法实例
Mar 19 #PHP
PHP实现批量生成App各种尺寸Logo
Mar 19 #PHP
You might like
QQ登录 PHP OAuth示例代码
2011/07/20 PHP
(JS实现)MapBar中坐标的加密和解密的脚本
2007/05/16 Javascript
js 通用javascript函数库整理
2011/08/14 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
关于onchange事件在IE和FF下的表现及解决方法
2014/03/08 Javascript
js创建表单元素并使用submit进行提交
2014/08/14 Javascript
Python脚本后台运行的几种方式
2015/03/09 Javascript
ECMAScript中函数function类型
2015/06/03 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
js添加事件的通用方法推荐
2016/05/15 Javascript
Vue.js原理分析之observer模块详解
2017/02/17 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
js 闭包深入理解与实例分析
2020/03/19 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
vue-cli或vue项目利用HBuilder打包成移动端app操作
2020/07/29 Javascript
详谈Vue.js框架下main.js,App.vue,page/index.vue之间的区别
2020/08/12 Javascript
js实现滚动条自动滚动
2020/12/13 Javascript
[01:04:08]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第一场 12.16
2020/12/18 DOTA
wxPython中文教程入门实例
2014/06/09 Python
让代码变得更易维护的7个Python库
2018/10/09 Python
python列表使用实现名字管理系统
2019/01/30 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
如何基于Python Matplotlib实现网格动画
2020/07/20 Python
浅谈Python3中print函数的换行
2020/08/05 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
2020/11/01 Python
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
澳大利亚领先的在线美容商店:Facial Co
2017/10/22 全球购物
单位在职证明范本
2014/01/09 职场文书
爷爷追悼会答谢词
2014/01/24 职场文书
优秀技术工人先进材料
2014/02/17 职场文书
2014年学生会工作总结范文
2014/11/07 职场文书