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中string模块各属性以及函数的用法介绍
May 30 Python
使用PyV8在Python爬虫中执行js代码
Feb 16 Python
Python实现类似比特币的加密货币区块链的创建与交易实例
Mar 20 Python
Python实现购物车程序
Apr 16 Python
Python的argparse库使用详解
Oct 09 Python
Python实现定时执行任务的三种方式简单示例
Mar 30 Python
python字符串切割:str.split()与re.split()的对比分析
Jul 16 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
详解python tkinter模块安装过程
Jan 06 Python
Python图像处理库PIL的ImageGrab模块介绍详解
Feb 26 Python
keras的siamese(孪生网络)实现案例
Jun 12 Python
详解python方法之绑定方法与非绑定方法
Aug 17 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实现每天自动变换随机问候语的方法
2015/05/12 PHP
php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
2017/02/18 PHP
php 从指定数字中获取随机组合的简单方法(推荐)
2017/04/05 PHP
PHP判断一个变量是否为整数、正整数的方法示例
2019/09/11 PHP
常用js脚本
2006/12/03 Javascript
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
jquery选择器之属性过滤选择器详解
2014/01/27 Javascript
javascript实现的元素拖动函数宿主为浏览器
2014/07/21 Javascript
用JavaScript实现PHP的urlencode与urldecode函数
2015/08/13 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
bootstrapValidator自定验证方法写法
2016/12/01 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
vue-router传参用法详解
2019/01/19 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
2019/05/01 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
Python字符串格式化
2015/06/15 Python
Python的Django框架下管理站点的基本方法
2015/07/17 Python
python实现简单爬虫功能的示例
2016/10/24 Python
python requests使用socks5的例子
2019/07/25 Python
django项目中使用手机号登录的实例代码
2019/08/15 Python
python多线程同步之文件读写控制
2021/02/25 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
最新的互联网创业计划书
2014/01/10 职场文书
银行存款证明样本
2014/01/17 职场文书
乡镇干部十八大感言
2014/02/17 职场文书
商超业务员岗位职责
2014/03/12 职场文书
委托书如何写
2014/08/30 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
2014年导购员工作总结
2014/11/18 职场文书
煤矿百日安全活动总结
2015/05/07 职场文书
2016年大学生党员公开承诺书
2016/03/24 职场文书
分布式锁为什么要选择Zookeeper而不是Redis?看完这篇你就明白了
2021/05/21 Redis
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫
Redis keys命令的具体使用
2022/06/05 Redis