PHP中如何实现多进程消费队列的机制?

更新于
2026-09-29 00:39:26
1阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1215个文字,预计阅读时间需要5分钟。

PHP中如何实现多进程消费队列的机制?

引用+最近开发了一个小功能,用于处理mcq系列数据,启动一个进程消耗数据,后续发现一个进程处理不过来,又加了一个进程,过了段时间又处理不过来......这种模式每次都要修改代码。

引言

最近开发一个小功能,用到了队列mcq,启动一个进程消费队列数据,后边发现一个进程处理不过来了,又加了一个进程,过了段时间又处理不过来了......

PHP中如何实现多进程消费队列的机制?

这种方式每次都要修改crontab,如果进程挂掉了,不会及时的启动,要等到下次crontab执行的时候才会启动。关闭(重启)进程的时候用的是kill,这可能会丢失正在处理的数据,比如下面这个例子,我们假设sleep过程就是处理逻辑,这里为了明显看出效果,将处理时间放大到10s:

<?php $i = 1; while (1) { echo "开始第[{$i}]次循环\n"; sleep(10); echo "结束第[{$i}]次循环\n"; $i++; }

当我们运行脚本之后,等到循环开始之后,给进程发送 kill {$pid},默认发送的是编号为15的SIGTERM信号。

阅读全文

本文共计1215个文字,预计阅读时间需要5分钟。

PHP中如何实现多进程消费队列的机制?

引用+最近开发了一个小功能,用于处理mcq系列数据,启动一个进程消耗数据,后续发现一个进程处理不过来,又加了一个进程,过了段时间又处理不过来......这种模式每次都要修改代码。

引言

最近开发一个小功能,用到了队列mcq,启动一个进程消费队列数据,后边发现一个进程处理不过来了,又加了一个进程,过了段时间又处理不过来了......

PHP中如何实现多进程消费队列的机制?

这种方式每次都要修改crontab,如果进程挂掉了,不会及时的启动,要等到下次crontab执行的时候才会启动。关闭(重启)进程的时候用的是kill,这可能会丢失正在处理的数据,比如下面这个例子,我们假设sleep过程就是处理逻辑,这里为了明显看出效果,将处理时间放大到10s:

<?php $i = 1; while (1) { echo "开始第[{$i}]次循环\n"; sleep(10); echo "结束第[{$i}]次循环\n"; $i++; }

当我们运行脚本之后,等到循环开始之后,给进程发送 kill {$pid},默认发送的是编号为15的SIGTERM信号。

阅读全文