温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

php_swoole对进程的基本操作

发布时间:2021-09-03 19:35:39 来源:亿速云 阅读:109 作者:chen 栏目:大数据

本篇内容主要讲解“php_swoole对进程的基本操作”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“php_swoole对进程的基本操作”吧!

在以往的开发项目中,要操作进程就会使用PHP自带的pcntl拓展。但是pcntl存在着许多的不足:

  • pcntl没有提供进程间通信的功能

  • pcntl不支持重定向标准输入和输出

  • pcntl只提供了fork这样原始的接口,容易使用错误

这边我们使用swoole进程管理模块,用来替代PHPpcntl

场景:日常任务中,有时需要通过php脚本执行一些日志分析,队列处理等任务,当数据量比较大时,可以使用多进程来处理。

准备:安装PHP_swoole拓展;

write($data)
  向管道内写入数据。$data的长度在Linux系统下最大不超过8KMacOS/FreeBSD下最大不超过2K
start():
   执行fork调用,启动子进程。

/** 创建子进程,将数据写入管道,然后启动子进程 */
$process = new \swoole_process([$this, 'sonProcessWork']);
$process->write(json_encode($data_pop));
$pid = $process->start();

swoole_event_add():  将一个socket加入到底层的reactor事件监听中;在子进程中处理一些耗时的计算或者操作;

/** 获取管道的业务数据,进行相关的操作 */
public function sonProcessWork(\swoole_process $worker){
  $GLOBALS['worker'] = $worker;
  swoole_event_add($worker->pipe, function($pipe) {
   /******start*你的业务逻辑 *******/
    .....
   /******end*你的业务逻辑 *******/
  $worker->exit(0);
  })
}

wait(false)

  回收结束运行的子进程

/** 根据信号处理紫禁城 */
private function sig_handler($signo) { 
 Process::signal(SIGCHLD, function($sig) {
  //必须为false,非阻塞模式
  while($ret =  Process::wait(false)) {
      echo "PID={$ret['pid']}\n";
  }
});
}

到此,相信大家对“php_swoole对进程的基本操作”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

php
AI