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的日期与时间函数技巧
Apr 24 PHP
php 数组二分法查找函数代码
Feb 16 PHP
PHP获取当前页面完整URL的实现代码
Jun 10 PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
Jun 28 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
Apr 10 PHP
分享50个提高PHP执行效率的技巧
Dec 26 PHP
修改Laravel5.3中的路由文件与路径
Aug 10 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
Apr 26 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
Aug 10 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
Nov 17 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 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断点续传之如何分割合并文件
2014/03/22 PHP
Thinkphp搭建包括JS多语言的多语言项目实现方法
2014/11/24 PHP
从刷票了解获得客户端IP的方法
2015/09/21 PHP
PHP如何将XML转成数组
2016/04/04 PHP
php和asp语法上的区别总结
2019/05/12 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
提高jQuery性能优化的技巧
2015/08/03 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
判断JS对象是否拥有某属性的方法推荐
2016/05/12 Javascript
javascript中的深复制详解及实例分析
2016/12/29 Javascript
js实现定时进度条完成后切换图片
2017/01/04 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
AngularJS实现表格的增删改查(仅限前端)
2017/07/04 Javascript
通过命令行创建vue项目的方法
2017/07/20 Javascript
全面解析jQuery中的$(window)与$(document)的用法区别
2017/08/15 jQuery
解决vue点击控制单个样式的问题
2018/09/05 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
[04:29]DOTA2亚洲邀请赛小组赛第一日 TOP10精彩集锦
2015/02/01 DOTA
Python编程中的文件操作攻略
2015/10/16 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
浅谈PySpark SQL 相关知识介绍
2019/06/14 Python
浅析Python+OpenCV使用摄像头追踪人脸面部血液变化实现脉搏评估
2019/10/17 Python
Python迷宫生成和迷宫破解算法实例
2019/12/24 Python
python实现简单的tcp 文件下载
2020/09/16 Python
python 列表推导和生成器表达式的使用
2021/02/01 Python
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
医院后勤自我鉴定
2013/10/13 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
"9.18"国耻日演讲稿范文
2014/09/14 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
万能检讨书
2015/01/27 职场文书
python pyhs2 的安装操作
2021/04/07 Python
MySQL限制查询和数据排序介绍
2022/03/25 MySQL