首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
swoole_proces 维持一定数量的子进程异常 reactor no ready, cannot use swoole_event_wait
{{{ <?php //process.php $workers = []; $max = 5; $child = 0; function onReceive($pipe) { global $workers,$child; $worker = $workers[$pipe]; $data = $worker->read(); if ($data == false) { //表示子进程已关闭,回收它 $status = swoole_process::wait(); echo "Worker#{$status['pid']} exit\n"; } else { echo "RECV: ".$data; } } while(true) { if($child>$max) { continue; } $process = new swoole_process('worker'); $process->id = $child; $process->name('testdaemon'); $pid = $process->start(); $workers[$process->pipe] = $process; $child++; swoole_event_add($process->pipe, 'onReceive'); } function worker($process) { $process->write("Worker#{$process->id}: hello master\n"); $process->exit(); } php process.php PHP Warning: Unknown: reactor no ready, cannot use swoole_event_wait. in Unknown on line 0 }}}
发布于9年前 · 0 次浏览 · 来自
提问
t
test
{{{ <?php //process.php $workers = []; $max = 5; $child = 0; function onReceive($pipe) { global $workers,$child; $worker = $workers[$pipe]; $data = $worker->read(); if ($data == false) { //表示子进程已关闭,回收它 $status = swoole_process::wait(); echo "Worker#{$status['pid']} exit\n"; } else { echo "RECV: ".$data; } } while(true) { if($child>$max) { continue; } $process = new swoole_process('worker'); $process->id = $child; $process->name('testdaemon'); $pid = $process->start(); $workers[$process->pipe] = $process; $child++; swoole_event_add($process->pipe, 'onReceive'); } function worker($process) { $process->write("Worker#{$process->id}: hello master\n"); $process->exit(); } php process.php PHP Warning: Unknown: reactor no ready, cannot use swoole_event_wait. in Unknown on line 0 }}}
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2017-06-08
M
Monster
`swoole_process::start`是FORK操作,所以会带着主进程的状态复制进程,所以会将主进程的事件设置也一起带上。所以你需要在所有进程 start 后,再进行`foreach`添加管道到事件循环中。
赞
0
回复
2017-06-15
E
EthanHu²⁰¹⁷
可以通过 {{{ //将子进程的管道加入EventLoop foreach($workers as $process) { swoole_event_add($process->pipe, 'onReceive'); } }}} 来保持进程数, 这样的话 之进程一次运行下去的 ,不执行退出子进程$process->exit 进程占用的内存会越来越多
赞
0
回复
2017-06-15
墨
墨追
子进程强势回收内存看看gc_collect_cycles();
赞
0
回复