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删除nginx缓存文件示例(python文件操作)
Mar 26 Python
windows下wxPython开发环境安装与配置方法
Jun 28 Python
python中PIL安装简单教程
Apr 21 Python
Python 常用 PEP8 编码规范详解
Jan 22 Python
python构建自定义回调函数详解
Jun 20 Python
Python 实现在文件中的每一行添加一个逗号
Apr 29 Python
Python中按值来获取指定的键
Mar 04 Python
python os模块简单应用示例
May 23 Python
django如何自己创建一个中间件
Jul 24 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
Jul 20 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
Sep 23 Python
Django路由层如何获取正确的url
Jul 15 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
Protoss兵种对照表
2020/03/14 星际争霸
php 抽象类的简单应用
2011/09/06 PHP
ThinkPHP水印功能实现修复PNG透明水印并增加JPEG图片质量可调整
2014/11/05 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
PHP Swoole异步读取、写入文件操作示例
2019/10/24 PHP
jquery 可排列的表实现代码
2009/11/13 Javascript
MooBox 基于Mootools的对话框插件
2012/01/20 Javascript
jquery移动listbox的值原理及代码
2013/05/03 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
jQuery 移动端artEditor富文本编辑器
2016/01/11 Javascript
js模拟微博发布消息
2017/02/23 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
jQuery选择器特殊字符与属性空格问题
2017/08/14 jQuery
vue中axios的封装问题(简易版拦截,get,post)
2018/06/15 Javascript
Vue element-ui父组件控制子组件的表单校验操作
2020/07/17 Javascript
vue动态设置路由权限的主要思路
2021/01/13 Vue.js
[00:36]DOTA2上海特级锦标赛 LGD战队宣传片
2016/03/04 DOTA
教你安装python Django(图文)
2013/11/04 Python
python中enumerate函数用法实例分析
2015/05/20 Python
python实现数值积分的Simpson方法实例分析
2015/06/05 Python
scrapy spider的几种爬取方式实例代码
2018/01/25 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
html5使用canvas实现跟随光标跳动的火焰效果
2014/01/07 HTML / CSS
手工制作的豪华英式沙发和沙发床:Willow & Hall
2019/05/03 全球购物
应届毕业生的自我鉴定
2013/11/13 职场文书
交通安全寄语大全
2014/04/08 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
找工作求职信
2014/07/07 职场文书
忠诚奉献演讲稿
2014/09/12 职场文书
争先创优演讲稿
2014/09/15 职场文书
2014年大学生工作总结
2014/11/20 职场文书
史上最牛的辞职信
2015/02/28 职场文书
2015年国庆节活动总结
2015/03/23 职场文书
捐书仪式主持词
2015/07/04 职场文书
MySQL Shell import_table数据导入的实现
2021/08/07 MySQL