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代码来实现服务器和代理服务器
Jun 23 Python
Python的爬虫程序编写框架Scrapy入门学习教程
Jul 02 Python
Python 序列的方法总结
Oct 18 Python
mysql 之通过配置文件链接数据库
Aug 12 Python
python在每个字符后添加空格的实例
May 07 Python
Python中实例化class的执行顺序示例详解
Oct 14 Python
浅谈Pycharm中的Python Console与Terminal
Jan 17 Python
pyqt5 实现在别的窗口弹出进度条
Jun 18 Python
python的mysql数据库建立表与插入数据操作示例
Sep 30 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
Jan 08 Python
推荐技术人员一款Python开源库(造数据神器)
Jul 08 Python
python图像处理 PIL Image操作实例
Apr 09 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并发对MYSQL造成压力的解决方法
2013/02/21 PHP
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
深入讲解AngularJS中的自定义指令的使用
2015/06/18 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
2015/12/04 Javascript
AngularJs  Creating Services详解及示例代码
2016/09/02 Javascript
基于jQuery实现数字滚动效果
2017/01/16 Javascript
gulp解决跨域的配置文件问题
2017/06/08 Javascript
浅谈Vue响应式(数组变异方法)
2018/05/07 Javascript
js监听html页面的上下滚动事件方法
2018/09/11 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
nodejs log4js 使用详解
2019/05/31 NodeJs
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
Vue-resource安装过程及使用方法解析
2020/07/21 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
Python 多线程Threading初学教程
2017/08/22 Python
python3使用SMTP发送简单文本邮件
2018/06/19 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
python分布式爬虫中消息队列知识点详解
2020/11/26 Python
Python实现PS滤镜中的USM锐化效果
2020/12/04 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
新英格兰最大的特色礼品连锁店:The Paper Store
2018/07/23 全球购物
C语言中break与continue的区别
2012/07/12 面试题
工地宣传标语
2014/06/18 职场文书
卖房授权委托书样本
2014/10/05 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
邀请函的格式
2015/01/30 职场文书
情人节活动总结范文
2015/02/05 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
加薪通知
2015/04/25 职场文书
深入探讨opencv图像矫正算法实战
2021/05/21 Python
深入解析MySQL索引数据结构
2021/10/16 MySQL
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers