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中PDO解决中文乱码问题的一些补充
Sep 06 PHP
PHP类中Static方法效率测试代码
Oct 17 PHP
php 文件上传类代码
Aug 06 PHP
PHP使用Alexa API获取网站的Alexa排名例子
Jun 12 PHP
php实现的树形结构数据存取类实例
Nov 29 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
一个简单安全的PHP验证码类、PHP验证码
Sep 24 PHP
phpmailer绑定邮箱的实现方法
Dec 01 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
PHP删除数组中特定元素的两种方法
Feb 28 PHP
PHP实现统计代码行数小工具
Sep 19 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
Yii调试查看执行SQL语句的方法
2016/07/15 PHP
Javascript 获取链接(url)参数的方法
2009/02/15 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
jquery 实现密码框的显示与隐藏示例代码
2013/09/18 Javascript
php is_numberic函数造成的SQL注入漏洞
2014/03/10 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
jQuery插件Timelinr 实现时间轴特效
2015/10/04 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
2016/04/18 Javascript
一道优雅面试题分析js中fn()和return fn()的区别
2016/07/05 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
2016/11/28 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(下)
2017/04/21 Javascript
Vue组件之全局组件与局部组件的使用详解
2017/10/09 Javascript
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
Bootstrap table表格初始化表格数据的方法
2018/07/25 Javascript
Vue解析剪切板图片并实现发送功能
2020/02/04 Javascript
js实现的订阅发布者模式简单示例
2020/03/14 Javascript
vue 授权获取微信openId操作
2020/11/13 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
Python中实现远程调用(RPC、RMI)简单例子
2014/04/28 Python
列举Python中吸引人的一些特性
2015/04/09 Python
Python实现爬取逐浪小说的方法
2015/07/07 Python
Python中交换两个元素的实现方法
2018/06/29 Python
Python使用matplotlib实现基础绘图功能示例
2018/07/03 Python
用python3教你任意Html主内容提取功能
2018/11/05 Python
python实现微信防撤回神器
2019/04/29 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
python函数参数(必须参数、可变参数、关键字参数)
2019/08/16 Python
Python 实现使用空值进行赋值 None
2020/03/12 Python
python实现控制台输出彩色字体
2020/04/05 Python
50个强大璀璨的CSS3/JS技术运用实例
2010/02/27 HTML / CSS
花卉与景观设计系大学生求职信
2013/10/01 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
作风转变心得体会
2014/09/02 职场文书
读《方与圆》有感:交友方圆有度
2020/01/14 职场文书
如何用RabbitMQ和Swoole实现一个异步任务系统
2021/05/29 PHP