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 04 Python
python类继承用法实例分析
May 27 Python
Python列表和元组的定义与使用操作示例
Jul 26 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
python SSH模块登录,远程机执行shell命令实例解析
Jan 12 Python
TensorFlow的权值更新方法
Jun 14 Python
Python编程快速上手——Excel表格创建乘法表案例分析
Feb 28 Python
Python Selenium 设置元素等待的三种方式
Mar 18 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
Apr 20 Python
python glom模块的使用简介
Apr 13 Python
python周期任务调度工具Schedule使用详解
Nov 23 Python
Python线程池与GIL全局锁实现抽奖小案例
Apr 13 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
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
抓取YAHOO股票报价的类
2009/05/15 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
网页开发中的容易忽略的问题 javascript HTML中的table
2009/04/15 Javascript
javascript面向对象编程代码
2011/12/19 Javascript
ASP.NET jQuery 实例5 (显示CheckBoxList成员选中的内容)
2012/01/13 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
js的onload事件及初始化按钮事件示例代码
2013/09/25 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
详解nodejs微信公众号开发——3.封装消息响应模块
2017/04/10 NodeJs
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
javascript实现简单搜索功能
2020/03/26 Javascript
JS canvas实现画板和签字板功能
2021/02/23 Javascript
简单理解Python中基于生成器的状态机
2015/04/13 Python
python中base64加密解密方法实例分析
2015/05/16 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
python实现跨excel的工作表sheet之间的复制方法
2018/05/03 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
python实现ip地址的包含关系判断
2020/02/07 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
2020/11/19 Python
Python 微信公众号文章爬取的示例代码
2020/11/30 Python
服务员岗位责任制
2014/02/11 职场文书
大专生自荐书范文
2014/06/22 职场文书
毕业设计致谢语
2015/05/14 职场文书
采购员工作总结范文
2015/08/12 职场文书
2016年社区“6.26”禁毒日宣传活动总结
2016/04/05 职场文书
《合作意向书》怎么写?
2019/08/20 职场文书
普希金的诗歌赏析(3首)
2019/08/20 职场文书
深入理解python多线程编程
2021/04/18 Python
Java并发编程必备之Future机制
2021/06/30 Java/Android
swagger如何返回map字段注释
2021/07/03 Java/Android