Php多进程实现代码


Posted in Python onMay 07, 2018

php多进程实现

PHP有一组进程控制函数(编译时需要?enable-pcntl与posix扩展),使得php能在nginx系统中实现跟c一样的创建子进程、使用exec函数执行程序、处理信号等功能。

CentOS 6 下yum安装php的,默认是不安装pcntl的,因此需要单独编译安装,首先下载对应版本的php,解压后

cd php-version/ext/pcntl 
phpize 
./configure && make && make install 
cp /usr/lib/php/modules/pcntl.so /usr/lib64/php/modules/pcntl.so 
echo "extension=pcntl.so" >> /etc/php.ini 
/etc/init.d/httpd restart

方便极了。

下面是示例代码:

<?php 
header('content-type:text/html;charset=utf-8' ); 
 
// 必须加载扩展 
if (!function_exists("pcntl_fork")) { 
 die("pcntl extention is must !"); 
} 
//总进程的数量 
$totals = 3; 
// 执行的脚本数量 
$cmdArr = array(); 
// 执行的脚本数量的数组 
for ($i = 0; $i < $totals; $i++) { 
 $cmdArr[] = array("path" => __DIR__ . "/run.php", 'pid' =>$i ,'total' =>$totals); 
} 
 /* 
展开:$cmdArr 
Array 
( 
 [0] => Array 
 ( 
  [path] => /var/www/html/company/pcntl/run.php 
  [pid] => 0 
  [total] => 3 
 ) 
 [1] => Array 
 ( 
  [path] => /var/www/html/company/pcntl/run.php 
  [pid] => 1 
  [total] => 3 
 ) 
 [2] => Array 
 ( 
  [path] => /var/www/html/company/pcntl/run.php 
  [pid] => 2 
  [total] => 3 
 ) 
) 
*/ 
 
pcntl_signal(SIGCHLD, SIG_IGN); //如果父进程不关心子进程什么时候结束,子进程结束后,内核会回收。 
foreach ($cmdArr as $cmd) { 
 $pid = pcntl_fork(); //创建子进程 
 //父进程和子进程都会执行下面代码 
 if ($pid == -1) { 
 //错误处理:创建子进程失败时返回-1. 
 die('could not fork'); 
 } else if ($pid) { 
 //父进程会得到子进程号,所以这里是父进程执行的逻辑 
 //如果不需要阻塞进程,而又想得到子进程的退出状态,则可以注释掉pcntl_wait($status)语句,或写成: 
 pcntl_wait($status,WNOHANG); //等待子进程中断,防止子进程成为僵尸进程。 
 } else { 
 //子进程得到的$pid为0, 所以这里是子进程执行的逻辑。 
 $path = $cmd["path"]; 
 $pid = $cmd['pid'] ; 
 $total = $cmd['total'] ; 
 echo exec("/usr/bin/php {$path} {$pid} {$total}")."\n"; 
 exit(0) ; 
 } 
} 
?>

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
举例讲解Python中的算数运算符的用法
May 13 Python
python编程实现归并排序
Apr 14 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
PyCharm代码格式调整方法
May 23 Python
基于Django与ajax之间的json传输方法
May 29 Python
numpy向空的二维数组中添加元素的方法
Nov 01 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
如何运行.ipynb文件的图文讲解
Jun 27 Python
python中 * 的用法详解
Jul 10 Python
python tkinter实现彩球碰撞屏保
Jul 30 Python
pygame实现贪吃蛇游戏(上)
Oct 29 Python
浅析python函数式编程
Sep 26 Python
Python格式化输出%s和%d
May 07 #Python
python获取代理IP的实例分享
May 07 #Python
对python使用http、https代理的实例讲解
May 07 #Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 #Python
python使用代理ip访问网站的实例
May 07 #Python
一些Centos Python 生产环境的部署命令(推荐)
May 07 #Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
May 07 #Python
You might like
PHP 处理图片的类实现代码
2009/10/23 PHP
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
php基于数组函数实现关联表的编辑操作示例
2017/07/04 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
2017/09/22 PHP
用javascript控制iframe滚动的代码
2007/04/10 Javascript
JavaScript获取GridView选择的行内容
2009/04/14 Javascript
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
通过下拉框的值来确定输入框是否可以为空的代码
2011/10/18 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
详解JavaScript中jQuery和Ajax以及JSONP的联合使用
2015/08/13 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
图文详解Javascript中的上下文和作用域
2017/02/15 Javascript
深入浅析Nodejs的Http模块
2017/06/20 NodeJs
微信公众号开发之微信支付代码记录的实现
2019/10/16 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
关于vue3默认把所有onSomething当作v-on事件绑定的思考
2020/05/15 Javascript
使用js和canvas实现时钟效果
2020/09/08 Javascript
Python中使用PIPE操作Linux管道
2015/02/04 Python
对python自动生成接口测试的示例讲解
2018/11/30 Python
linux下安装python3和对应的pip环境教程详解
2019/07/01 Python
Django的Modelforms用法简介
2019/07/27 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
2019/09/20 Python
python GUI库图形界面开发之PyQt5 UI主线程与耗时线程分离详细方法实例
2020/02/26 Python
Python分类测试代码实例汇总
2020/07/23 Python
Python如何将装饰器定义为类
2020/07/30 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
2020/09/11 Python
html5 Canvas绘制线条 closePath()实例代码
2012/05/10 HTML / CSS
爱尔兰电脑、家电和家具购物网站:Buy It Direct
2019/07/09 全球购物
六道php面试题附答案
2014/06/05 面试题
不尊敬老师的检讨书
2014/12/21 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
证婚人婚礼致辞
2015/07/28 职场文书
Pandas数据结构之Series的使用
2022/03/31 Python
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android
云服务器部署 Web 项目的实现步骤
2022/06/28 Servers