PHP多进程通信-消息队列使用


Posted in PHP onMarch 08, 2019

向消息队列发送数据和获取数据的测试

<?php
$key=ftok(__FILE__,'a');

//获取消息队列
$queue=msg_get_queue($key,0666);
//发送消息
//msg_send($queue, 1, "Hello, 1");
//接收消息,如果接收不到会阻塞
msg_receive($queue, 1, $message_type, 1024, $message1);
//移除消息
//msg_remove_queue($queue);
//var_dump($message1);

PHP多进程通信-消息队列使用

<?php
/**
 * 这段代码模拟了一个日常的任务。
 * 第一个父进程产生了一个子进程。子进程又作为父进程,产生10个子进程。
 * 可以简化为A -> B -> c,d,e... 等进程。
 * 作为A来说,只需要生产任务,然后交给B 来处理。B 则会将任务分配给10个子进程来进行处理。
 * 
 */

//设定脚本永不超时
set_time_limit(0);
$ftok = ftok(__FILE__, 'a');
$msg_queue = msg_get_queue($ftok);
$pidarr = []; 

//产生子进程
$pid = pcntl_fork();
if ($pid) {
 //父进程模拟生成一个特大的数组。
 $arr = range(1,100000);
 //将任务放进队里,让多个子进程并行处理
 foreach ($arr as $val) {
  $status = msg_send($msg_queue,1, $val);
  usleep(1000);
 } 
 $pidarr[] = $pid;
 msg_remove_queue($msg_queue);
} else {
 //子进程收到任务后,fork10个子进程来处理任务。
 for ($i =0; $i<10; $i++) {
  $childpid = pcntl_fork();
  if ($childpid) {
   $pidarr[] = $childpid; //收集子进程processid
  } else {
   while (true) {
    msg_receive($msg_queue, 0, $msg_type, 1024, $message);
    if (!$message) exit(0);
    echo $message.PHP_EOL;
    usleep(1000);
   } 
  } 
 } 
}

//防止主进程先于子进程退出,形成僵尸进程
while (count($pidarr) > 0) {
 foreach ($pidarr as $key => $pid) {
  $status = pcntl_waitpid($pid, $status);
  if ($status == -1 || $status > 0) {
   unset($pidarr[$key]);
  } 
 } 
 sleep(1);
}

PHP多进程通信-消息队列使用

以上所述是小编给大家介绍的PHP通信-消息队列使用详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP中GET变量的使用
Oct 09 PHP
一步一步学习PHP(3) php 函数
Feb 15 PHP
php中计算中文字符串长度、截取中文字符串的函数代码
Aug 09 PHP
PHP中使用foreach和引用导致程序BUG的问题介绍
Sep 05 PHP
解析php中die(),exit(),return的区别
Jun 20 PHP
php实现查看邮件是否已被阅读的方法
Dec 03 PHP
yii框架builder、update、delete使用方法
Apr 30 PHP
phpstorm编辑器乱码问题解决
Dec 01 PHP
php+ajax实现文章自动保存的方法
Dec 30 PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
Oct 08 PHP
php微信开发之自定义菜单完整流程
Oct 08 PHP
浅谈PHP匿名函数和闭包
Mar 08 #PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 #PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 #PHP
PHP的微信支付接口使用方法讲解
Mar 08 #PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 #PHP
PHP模糊查询技术实例分析【附源码下载】
Mar 07 #PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
Mar 07 #PHP
You might like
destoon实现公司新闻详细页添加评论功能的方法
2014/07/15 PHP
php取得字符串首字母的方法
2015/03/25 PHP
js数组的操作详解
2013/03/27 Javascript
基于NodeJS的前后端分离的思考与实践(四)安全问题解决方案
2014/09/26 NodeJs
jQuery搜索子元素的方法
2015/02/10 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
js return返回多个值,通过对象的属性访问方法
2017/02/21 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
2017/07/11 Javascript
vue.js分页中单击页码更换页面内容的方法(配合spring springmvc)
2018/02/10 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
python字典排序实例详解
2015/05/20 Python
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
python利用装饰器进行运算的实例分析
2015/08/04 Python
Python 文件处理注意事项总结
2017/04/10 Python
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
基于python批量处理dat文件及科学计算方法详解
2018/05/08 Python
python 返回列表中某个值的索引方法
2018/11/07 Python
python pandas 时间日期的处理实现
2019/07/30 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
python集合常见运算案例解析
2019/10/17 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
pandas统计重复值次数的方法实现
2021/02/20 Python
python线程优先级队列知识点总结
2021/02/28 Python
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
巴西婴儿用品商店:Bebe Store
2017/11/23 全球购物
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
库存图片、照片、矢量图、视频和音乐:Shutterstock
2021/02/12 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
社区志愿者培训方案
2014/06/10 职场文书
2014年教师工作总结
2014/11/10 职场文书
2015年预算员工作总结
2015/05/14 职场文书
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers
详解pytorch创建tensor函数
2022/03/22 Python