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程序中实现分布式进程的教程
Apr 28 Python
python超简单解决约瑟夫环问题
May 12 Python
Python 使用SMTP发送邮件的代码小结
Sep 21 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
利用Django-environ如何区分不同环境
Aug 26 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
python等差数列求和公式前 100 项的和实例
Feb 25 Python
Jupyter notebook快速入门教程(推荐)
May 18 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
Jul 13 Python
Python编写memcached启动脚本代码实例
Aug 14 Python
Python文件名匹配与文件复制的实现
Dec 11 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使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
浅谈PHP中foreach/in_array的使用
2015/11/02 PHP
PHP文件下载实例代码浅析
2016/08/17 PHP
用Mootools获得操作索引的两种方法分享
2011/12/12 Javascript
Javascript this 的一些学习总结
2012/08/31 Javascript
js调用webservice中的方法实现思路及代码
2013/02/25 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
window.open()实现post传递参数
2015/03/12 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
js实现按钮控制带有停顿效果的图片滚动
2016/08/30 Javascript
利用jquery给指定的table动态添加一行、删除一行的方法
2016/10/12 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
2017/03/10 Javascript
详解Vue.use自定义自己的全局组件
2017/06/14 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
JavaScript实现的反序列化json字符串操作示例
2018/07/18 Javascript
javaScript实现游戏倒计时功能
2018/11/17 Javascript
微信小程序云开发如何使用云函数生成二维码
2019/05/18 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
使用zrender.js绘制体温单效果
2019/10/31 Javascript
vue实现element表格里表头信息提示功能(推荐)
2019/11/20 Javascript
TypeScript的安装、使用、自动编译的实现
2020/04/10 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
wxpython 最小化到托盘与欢迎图片的实现方法
2014/06/09 Python
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
Python 爬虫爬取指定博客的所有文章
2016/02/17 Python
Python爬虫实例扒取2345天气预报
2018/03/04 Python
详谈pandas中agg函数和apply函数的区别
2018/04/20 Python
基于python实现名片管理系统
2018/11/30 Python
Python3中_(下划线)和__(双下划线)的用途和区别
2019/04/26 Python
Python Django基础二之URL路由系统
2019/07/18 Python
HTML5 Web缓存和运用程序缓存(cookie,session)
2018/01/11 HTML / CSS
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
KTV的创业计划书范文
2014/02/02 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
2015年公路养护工作总结
2015/05/13 职场文书
赤壁观后感(2)
2015/06/15 职场文书