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代码制作configure文件示例
Jul 28 Python
Python基于多线程实现抓取数据存入数据库的方法
Jun 22 Python
python监控进程状态,记录重启时间及进程号的实例
Jul 15 Python
Python 70行代码实现简单算式计算器解析
Aug 30 Python
python3 写一个WAV音频文件播放器的代码
Sep 27 Python
Python字典的概念及常见应用实例详解
Oct 30 Python
python tornado修改log输出方式
Nov 18 Python
django连接mysql数据库及建表操作实例详解
Dec 10 Python
TensorFlow学习之分布式的TensorFlow运行环境
Feb 05 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
Feb 27 Python
简单了解pytest测试框架setup和tearDown
Apr 14 Python
Python中非常使用的6种基本变量的操作与技巧
Mar 22 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操作XML、读取数据和写入数据的实现代码
2014/08/15 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
在php中设置session用memcache来存储的方法总结
2016/01/14 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
PHP levenshtein()函数用法讲解
2019/03/08 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
用JavaScript事件串连执行多个处理过程的方法
2007/03/09 Javascript
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
ie 7/8不支持trim的属性的解决方案
2014/05/23 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
require.js的用法详解
2015/10/20 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
Ext JS 实现建议词模糊动态搜索功能
2017/05/13 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
js实现图片放大并跟随鼠标移动特效
2019/01/18 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
python选择排序算法实例总结
2015/07/01 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
2017/07/30 Python
python的变量与赋值详细分析
2017/11/08 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
基于python的selenium两种文件上传操作实现详解
2019/09/19 Python
浅谈python多线程和多线程变量共享问题介绍
2020/04/17 Python
解决python虚拟环境切换无效的问题
2020/04/30 Python
python打包多类型文件的操作方法
2020/09/21 Python
python利用opencv实现颜色检测
2021/02/23 Python
测绘工程专业求职信
2014/07/15 职场文书
中秋节活动总结
2014/08/29 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis
Java实现给Word文件添加文字水印
2022/02/15 Java/Android