热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

swoole1.7.3发布,增加PHP多进程管理模块

PHP的异步并行扩展swoole,最近增加了多进程管理模块swoole_process,用来替代PHP的pcntl扩展。PHP自带的pcntl,存在很多不足,如:pcntl无法用在fpmapache中pcntl没有提供进程间通信的功能pcntl不支持重定向标准输入和输出pcntl只提供了fork这样原始

PHP的异步并行扩展swoole,最近增加了多进程管理模块swoole_process,用来替代PHP的pcntl扩展。 PHP自带的pcntl,存在很多不足,如: pcntl无法用在fpm/apache中 pcntl没有提供进程间通信的功能 pcntl不支持重定向标准输入和输出 pcntl只提供了fork这样原始

PHP的异步并行扩展swoole,最近增加了多进程管理模块swoole_process,用来替代PHP的pcntl扩展。

PHP自带的pcntl,存在很多不足,如:

  • pcntl无法用在fpm/apache中
  • pcntl没有提供进程间通信的功能
  • pcntl不支持重定向标准输入和输出
  • pcntl只提供了fork这样原始的接口,容易使用错误

swoole_process提供了比pcntl更强大的功能,更易用的面向对象风格API,使PHP在多进程编程方面更加轻松。

swoole_process提供的功能特性:

  • swoole_process提供了基于unixsock的进程间通信,使用很简单只需调用recv/send即可
  • swoole_process支持重定向标准输入和输出,在子进程内echo不会打印屏幕,而是写入管道,读键盘输入可以重定向为管道读取数据
  • swoole_process允许用于fpm/apache的Web请求中
  • 配合swoole_event模块,创建的PHP子进程可以异步的事件驱动模式
  • swoole_process提供了exec接口,创建的进程可以执行其他程序,与原PHP父进程之间可以方便的通信
  • swoole_process可以安全地用于fpm/apache环境下

代码示例:

Php代码

  1. $worker_num?=?8;
  2. for($i?=?0;?$i?
  3. {
  4. ????$process?=?new?swoole_process(‘callback_function’,?true);
  5. ????$pid?=?$process->start();
  6. ????$workers[$pid]?=?$process;
  7. }
  8. foreach($workers?as?$pid?=>?$process)
  9. {
  10. ????$process->write(“hello?worker[$pid]\n”);
  11. ????echo?”From?Worker:?”.$process->read();
  12. }
  13. for($i?=?0;?$i?
  14. {
  15. ????$ret?=?swoole_process::wait();
  16. ????$pid?=?$ret['pid'];
  17. ????unset($workers[$pid]);
  18. ????echo?”Worker?Exit,?PID=”.$pid.PHP_EOL;
  19. }
  20. function?callback_function(swoole_process?$worker)
  21. {
  22. ????//echo?”Worker:?start.?PID=”.$worker->pid.”\n”;
  23. ????//recv?data?from?master
  24. ????$recv?=?$worker->read();
  25. ????echo?”From?Master:?$recv\n”;
  26. ????//send?data?to?master
  27. ????$worker->write(“hello?master\n”);
  28. ????sleep(2);
  29. ????$worker->exit(0);
  30. }

子进程事件驱动模式

Php代码

  1. function?callback_function_async(swoole_process?$worker)
  2. {
  3. ????//echo?”Worker:?start.?PID=”.$worker->pid.”\n”;
  4. ????//recv?data?from?master
  5. ????$GLOBALS['worker']?=?$worker;
  6. ????swoole_event_add($worker->pipe,?function($pipe)?{
  7. ????????$worker?=?$GLOBALS['worker'];
  8. ????????$recv?=?$worker->read();
  9. ????????echo?”From?Master:?$recv\n”;
  10. ????????//send?data?to?master
  11. ????????$worker->write(“hello?master\n”);
  12. ????????sleep(2);
  13. ????????$worker->exit(0);
  14. ????});
  15. }

PHP创建一个Python子进程,并与之通信

Php代码

  1. $process?=?new?swoole_process(‘pyhon_process’,?true);
  2. $pid?=?$process->start();
  3. function?pyhon_process(swoole_process?$worker)
  4. {
  5. ????$worker->exec(‘/usr/bin/python’,?array(“echo.py”));
  6. }
  7. $process->write(“hello?world\n”);
  8. echo?$process->read();
  9. $ret?=?swoole_process::wait();
  10. var_dump($ret);

Python程序echo.py

Python代码

  1. import?sys
  2. def?main():
  3. ????s?=?raw_input()
  4. ????print?”Python:”?+?s
  5. main()

推荐阅读
  • php在哪里好找工作(php学到什么程度可以找到工作)
    导读:本篇文章编程笔记来给大家介绍有关php在哪里好找工作的相关内容,希望对大家有所帮助,一起来看看吧。本文目录一览:1、php去哪个城 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 【宇润日常疯测007】Swoole 协程与传统 fpm 同步模式比较
    为什么80%的码农都做不了架构师?如果说数组是PHP的精髓,数组玩得不6的,根本不能算是会用PHP。那协程对于Swoole也是同理& ... [详细]
  • Swoole在PHP-fpmapache中如何使用task功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • redis 获取不到_redis 缓存锁的实现方法
    1.redis加锁分类redis能用的的加锁命令分表是INCR、SETNX、SET2.第一种锁命令INCR这种加锁的思路是,key不存在,那么key的值 ... [详细]
  • PHP socket服务端与客户端的简易通信
    今天学习socket通信的同时,顺便整理了下以前初识socket的知识。现在关于php的socket通信,有些框架已经十分成熟了,比如swoole和workerman,这两个大家可以学习学 ... [详细]
  • |Q|A|-------------------|-----|Bugreport?|ye ... [详细]
  • 之前我们已经学习过PHP中的引用计数以及垃圾回收机制的概念。这些内容非常偏理论,也是非常常见的面试内容。而今天介绍的则是具体的关于垃圾回收的一些功能函数。关于之前的两篇介绍文章,大家可以到文章底部查看。再谈循环引用以及强制清理循环引用我们为什么要强调“ ... [详细]
author-avatar
safadfdfdsfsd
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有