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备份Mysql脚本
Aug 11 Python
Python爬虫框架Scrapy安装使用步骤
Apr 01 Python
Python中的Classes和Metaclasses详解
Apr 02 Python
python实时分析日志的一个小脚本分享
May 07 Python
解决python中os.listdir()函数读取文件夹下文件的乱序和排序问题
Oct 17 Python
Python面向对象程序设计多继承和多态用法示例
Apr 08 Python
Python 串口读写的实现方法
Jun 12 Python
解决python3 安装不了PIL的问题
Aug 16 Python
python isinstance函数用法详解
Feb 13 Python
python实现信号时域统计特征提取代码
Feb 26 Python
Jupyter加载文件的实现方法
Apr 14 Python
python如何在word中存储本地图片
Apr 07 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中关于长度计算容易混淆的问题分析
2016/05/27 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
jQuery新的事件绑定机制on()示例应用
2014/07/18 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
JS实现生成由字母与数字组合的随机字符串功能详解
2018/05/25 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
2018/09/07 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
详解vue父子组件关于模态框状态的绑定方案
2019/06/05 Javascript
webpack+express实现文件精确缓存的示例代码
2020/06/11 Javascript
vant-ui框架的一个bug(解决切换后onload不触发)
2020/11/11 Javascript
简单的通用表达式求10乘阶示例
2014/03/03 Python
TensorFlow用expand_dim()来增加维度的方法
2018/07/26 Python
pygame游戏之旅 python和pygame安装教程
2018/11/20 Python
Python操作qml对象过程详解
2019/09/26 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
Python+PyQt5实现灭霸响指功能
2020/05/25 Python
Python同时迭代多个序列的方法
2020/07/28 Python
PyCharm 2020.2下配置Anaconda环境的方法步骤
2020/09/23 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
SQL注入攻击的种类有哪些
2013/12/30 面试题
销售心得体会
2014/01/02 职场文书
校园歌手大赛策划书
2014/01/17 职场文书
学校后勤岗位职责
2014/02/19 职场文书
安全保证书范文
2014/04/29 职场文书
法院干警四风问题个人对照检查材料思想汇报
2014/10/07 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
教师评职称工作总结2015
2015/04/20 职场文书
2015年档案室工作总结
2015/05/23 职场文书
文艺晚会开场白
2015/05/29 职场文书
预备党员考察表党小组意见
2015/06/01 职场文书
写好Python代码的几条重要技巧
2021/05/21 Python
Redis做数据持久化的解决方案及底层原理
2021/07/15 Redis