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操作MongoDB基础知识
Nov 01 Python
在Python中使用base64模块处理字符编码的教程
Apr 28 Python
Python下载懒人图库JavaScript特效
May 28 Python
Python处理XML格式数据的方法详解
Mar 21 Python
Python Socket编程详细介绍
Mar 23 Python
分享Pycharm中一些不为人知的技巧
Apr 03 Python
python随机取list中的元素方法
Apr 08 Python
Django中使用CORS实现跨域请求过程解析
Aug 05 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
Oct 28 Python
解决Python import docx出错DLL load failed的问题
Feb 13 Python
Django后端分离 使用element-ui文件上传方式
Jul 12 Python
Python实现随机生成迷宫并自动寻路
Jun 13 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 FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
反射调用private方法实践(php、java)
2015/12/21 PHP
php file_get_contents取文件中数组元素的方法
2017/04/01 PHP
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
在chrome中window.onload事件的一些问题
2010/03/01 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
JavaScript中消除闭包的一般方法介绍
2015/03/16 Javascript
JS组件Bootstrap ContextMenu右键菜单使用方法
2016/04/17 Javascript
NodeJs——入门必看攻略
2016/06/27 NodeJs
js基础之DOM中document对象的常用属性方法详解
2016/10/28 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
基于Vue框架vux组件库实现上拉刷新功能
2017/11/28 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
2018/09/04 Javascript
手把手教你写一个微信小程序(推荐)
2018/10/17 Javascript
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
Python实现发送email的几种常用方法
2014/08/18 Python
Python实现的简单算术游戏实例
2015/05/26 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
django重新生成数据库中的某张表方法
2019/08/28 Python
Python使用qrcode二维码库生成二维码方法详解
2020/02/17 Python
Python celery原理及运行流程解析
2020/06/13 Python
TUMI新加坡官网:国际领先的商旅箱包品牌
2019/01/12 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
大学生自助营养快餐店创业计划书
2014/01/13 职场文书
家长评语大全
2014/01/22 职场文书
幼儿园老师寄语
2014/04/03 职场文书
学习焦裕禄同志为人民服务思想汇报
2014/09/10 职场文书
介绍信范文大全
2015/05/07 职场文书
毕业证明书
2015/06/19 职场文书
MYSQL 运算符总结
2021/11/11 MySQL
win10键盘驱动怎么修复?Win10键盘驱动修复小技巧
2022/04/06 数码科技
Go 内联优化让程序员爱不释手
2022/06/21 Golang