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的历史和优缺点
Oct 09 PHP
56.com视频采集接口程序(PHP)
Sep 22 PHP
php empty函数 使用说明
Aug 10 PHP
php定时执行任务设置详解
Feb 06 PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 PHP
ThinkPHP控制器详解
Jul 27 PHP
PHP 输出缓冲控制(Output Control)详解
Aug 25 PHP
php使用GD2绘制几何图形示例
Feb 15 PHP
php 字符串中是否包含指定字符串的多种方法
Apr 12 PHP
PHP中实现中文字串截取无乱码的解决方法
May 29 PHP
php实现的rc4加密解密类定义与用法示例
Aug 16 PHP
swoole锁的机制代码实例讲解
Mar 04 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与javascript的两种交互方式
2006/10/09 PHP
thinkPHP实现瀑布流的方法
2014/11/29 PHP
[原创]PHP字符串中插入子字符串方法总结
2016/05/06 PHP
Laravel 集成微信用户登录和绑定的实现
2019/12/27 PHP
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
javascript date格式化示例
2013/09/25 Javascript
一个奇葩的最短的 IE 版本判断JS脚本
2014/05/28 Javascript
js生成的验证码的实现与技术分析
2014/09/17 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
jQuery实现图像旋转动画效果
2016/05/29 Javascript
vue 本地环境跨域请求proxyTable的方法
2018/09/19 Javascript
Cocos2d实现刮刮卡效果
2018/12/20 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
vue 微信分享回调iOS和安卓回调出现错误的解决
2020/09/07 Javascript
[03:17]2014DOTA2 国际邀请赛中国区预选赛 四强专访
2014/05/23 DOTA
[01:48]2018DOTA2亚洲邀请赛主赛事第二日五佳镜头 VG完美团战逆转TNC
2018/04/05 DOTA
python调用shell的方法
2013/11/20 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
Python循环中else,break和continue的用法实例详解
2019/07/11 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
Python爬虫实现模拟点击动态页面
2020/03/05 Python
Sentry错误日志监控使用方法解析
2020/11/12 Python
CSS3的一个简单导航栏实现
2015/08/03 HTML / CSS
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
入党申请书自我鉴定
2013/10/12 职场文书
毕业生物理教师求职信
2013/10/17 职场文书
绩效专员岗位职责
2013/12/02 职场文书
个人授权委托书
2014/04/03 职场文书
民主生活会汇报材料
2014/12/15 职场文书
优秀教师单行材料
2014/12/16 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
小学总务工作总结
2015/08/13 职场文书