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实现计算资源图标crc值的方法
Oct 05 Python
初步剖析C语言编程中的结构体
Jan 16 Python
常见的python正则用法实例讲解
Jun 21 Python
[原创]使用豆瓣提供的国内pypi源
Jul 02 Python
Python读写/追加excel文件Demo分享
May 03 Python
python实现五子棋人机对战游戏
Mar 25 Python
PyQt5根据控件Id获取控件对象的方法
Jun 25 Python
python 抓包保存为pcap文件并解析的实例
Jul 23 Python
Pycharm 字体大小调整设置的方法实现
Sep 27 Python
python下对hsv颜色空间进行量化操作
Jun 04 Python
Python爬虫教程知识点总结
Oct 19 Python
Python操作word文档插入图片和表格的实例演示
Oct 25 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
《魔兽世界》惊魂幻象将获得调整
2020/03/08 其他游戏
PHPlet在Windows下的安装
2006/10/09 PHP
计算一段日期内的周末天数的php代码(星期六,星期日总和)
2009/11/12 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
2017/03/09 PHP
javascript 强制刷新页面的实现代码
2009/12/13 Javascript
Javascript的匿名函数小结
2009/12/31 Javascript
基于jquery的inputlimiter 实现字数限制功能
2010/05/30 Javascript
定义JavaScript二维数组采用定义数组的数组来实现
2012/12/09 Javascript
js模拟C#中List的简单实例
2014/03/06 Javascript
浅析javascript 定时器
2014/12/23 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
JavaScript仿淘宝页面图片滚动加载及刷新回顶部的方法解析
2016/05/24 Javascript
AngularJs bootstrap搭载前台框架——js控制部分
2016/09/01 Javascript
vue-cli脚手架config目录下index.js配置文件的方法
2018/03/13 Javascript
JavaScript插入排序算法原理与实现方法示例
2018/08/06 Javascript
Vue实现一个无限加载列表功能
2018/11/13 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
element-ui table行点击获取行索引(index)并利用索引更换行顺序
2020/02/27 Javascript
Vue Router的手写实现方法实现
2020/03/02 Javascript
微信小程序基于ColorUI构建皮皮虾短视频去水印组件
2020/11/04 Javascript
Python中的filter()函数的用法
2015/04/27 Python
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
django ajax json的实例代码
2018/05/29 Python
python3.6使用urllib完成下载的实例
2018/12/19 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
基于python实现对文件进行切分行
2020/04/26 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
CSS3中31种选择器使用方法教程
2013/12/05 HTML / CSS
美国领先的商务贺卡出版商:The Gallery Collection
2018/02/13 全球购物
什么是托管函数?托管函数有什么用?
2014/06/15 面试题
《去年的树》教学反思
2014/04/11 职场文书
小学生五一劳动节演讲稿
2015/03/18 职场文书
2016年国陪研修感言
2015/11/18 职场文书