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 相关文章推荐
56.com视频采集接口程序(PHP)
Sep 22 PHP
php 无法载入mysql扩展
Mar 12 PHP
mysql总结之explain
Feb 27 PHP
基于PHP服务端图片生成缩略图的方法详解
Jun 20 PHP
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 PHP
php四种基础算法代码实例
Oct 29 PHP
php抽象类使用要点与注意事项分析
Feb 09 PHP
php去掉文件前几行的方法
Jul 29 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
Jun 24 PHP
关于PHP转换超过2038年日期出错的问题解决
Jun 28 PHP
PHP读取word文档的方法分析【基于COM组件】
Aug 01 PHP
PHP加MySQL消息队列深入理解
Feb 27 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
用PHP实现的四则运算表达式计算实现代码
2011/08/02 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
PHP字符串中抽取子串操作实例分析
2019/06/22 PHP
使用jquery实现select添加实现后台权限添加的效果
2011/05/28 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
Nodejs实战心得之eventproxy模块控制并发
2015/10/27 NodeJs
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
node中koa中间件机制详解
2017/08/22 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
2018/05/10 Javascript
vue检测对象和数组的变化分析
2018/06/30 Javascript
vue--点击当前增加class,其他删除class的方法
2018/09/15 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
echarts饼图各个板块之间的空隙如何实现
2020/12/01 Javascript
Vue实现指令式动态追加小球动画组件的步骤
2020/12/18 Vue.js
[01:09:19]DOTA2-DPC中国联赛 正赛 VG vs Aster BO3 第二场 2月28日
2021/03/11 DOTA
Python操作CouchDB数据库简单示例
2015/03/10 Python
Python实现excel转sqlite的方法
2017/07/17 Python
神经网络python源码分享
2017/12/15 Python
Python读写及备份oracle数据库操作示例
2018/05/17 Python
python使用Turtle库绘制动态钟表
2018/11/19 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
python使用pymongo与MongoDB基本交互操作示例
2020/04/09 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
英国的屈臣氏:Boots博姿
2017/12/23 全球购物
大一军训感言
2014/01/09 职场文书
ktv筹备计划书
2014/05/03 职场文书
条幅标语大全
2014/06/20 职场文书
体育专业大学生职业生涯规划范文:打造自己的运动帝国
2014/09/12 职场文书
岗位聘任协议书
2015/09/21 职场文书
选调生挂职锻炼工作总结
2015/10/23 职场文书
Python 线程池模块之多线程操作代码
2021/05/20 Python
pandas中DataFrame检测重复值的实现
2021/05/26 Python