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连接字符串的方法小结
Jul 13 Python
python 简单的多线程链接实现代码
Aug 28 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
python如何拆分含有多种分隔符的字符串
Mar 20 Python
python用列表生成式写嵌套循环的方法
Nov 08 Python
python实现文本界面网络聊天室
Dec 12 Python
PyQt5 实现给窗口设置背景图片的方法
Jun 13 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
Python 格式化打印json数据方法(展开状态)
Feb 27 Python
详解Python 中的容器 collections
Aug 17 Python
python利用线程实现多任务
Sep 18 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
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
php判断上传的Excel文件中是否有图片及PHPExcel库认识
2013/01/11 PHP
js拦截alert对话框另类应用
2013/01/16 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
2018/08/07 Javascript
javascript自定义日期比较函数用法示例
2019/07/22 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
antd Select下拉菜单动态添加option里的内容操作
2020/11/02 Javascript
JavaScript实现表单验证功能
2020/12/09 Javascript
[06:30]DOTA2英雄梦之声_第15期_死亡先知
2014/06/21 DOTA
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
2018/01/10 Python
python opencv之分水岭算法示例
2018/02/24 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
python else语句在循环中的运用详解
2020/07/06 Python
Gap工厂店:Gap Factory
2017/11/02 全球购物
Charlotte Tilbury澳大利亚官网:英国美妆品牌
2018/10/05 全球购物
生物化学研究助理员求职信
2013/10/09 职场文书
装修五一活动策划案
2014/01/23 职场文书
中央空调节能方案
2014/06/15 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
元旦标语大全
2014/10/09 职场文书
统计工作个人总结
2015/03/03 职场文书
2015年大学班主任工作总结
2015/04/30 职场文书
公司保洁员管理制度
2015/08/04 职场文书
合作意向书怎么写
2019/06/24 职场文书
IDEA使用SpringAssistant插件创建SpringCloud项目
2021/06/23 Java/Android
HTML基本元素标签介绍
2022/02/28 HTML / CSS