阅读更多

1顶
0踩

编程语言

原创新闻 swoole 1.7.3发布,增加PHP多进程管理模块

2014-06-23 10:08 by 正式记者 matyhtf 评论(2) 有15838人浏览

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环境下

代码示例:

$worker_num = 8;

for($i = 0; $i < $worker_num; $i++)
{
    $process = new swoole_process('callback_function', true);
    $pid = $process->start();
    $workers[$pid] = $process;
}

foreach($workers as $pid => $process)
{
    $process->write("hello worker[$pid]\n");
    echo "From Worker: ".$process->read();
}

for($i = 0; $i < $worker_num; $i++)
{
    $ret = swoole_process::wait();
    $pid = $ret['pid'];
    unset($workers[$pid]);
    echo "Worker Exit, PID=".$pid.PHP_EOL;
}

function callback_function(swoole_process $worker)
{
    //echo "Worker: start. PID=".$worker->pid."\n";
    //recv data from master
    $recv = $worker->read();
    echo "From Master: $recv\n";

    //send data to master
    $worker->write("hello master\n");

    sleep(2);
    $worker->exit(0);
}

 

子进程事件驱动模式

function callback_function_async(swoole_process $worker)
{
    //echo "Worker: start. PID=".$worker->pid."\n";
    //recv data from master
    $GLOBALS['worker'] = $worker;
    swoole_event_add($worker->pipe, function($pipe) {
        $worker = $GLOBALS['worker'];
        $recv = $worker->read();

        echo "From Master: $recv\n";

        //send data to master
        $worker->write("hello master\n");

        sleep(2);

        $worker->exit(0);
    });
}

 

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

$process = new swoole_process('pyhon_process', true);
$pid = $process->start();

function pyhon_process(swoole_process $worker)
{
    $worker->exec('/usr/bin/python', array("echo.py"));
}

$process->write("hello world\n");
echo $process->read();

$ret = swoole_process::wait();
var_dump($ret);

 

Python程序echo.py

import sys

def main():
	s = raw_input()
	print "Python:" + s

main()

 

 

1
0
评论 共 2 条 请登录后发表评论
2 楼 matyhtf 2014-06-25 11:51
Yanghisun 写道
function pyhon_process(swoole_process $worker) 
这个语法表示看不懂啊。 难道PHP可以给参数定义类型了?


当然可以了,你对PHP的认识还停留在PHP5.2时代啊
1 楼 Yanghisun 2014-06-25 10:49
function pyhon_process(swoole_process $worker) 
这个语法表示看不懂啊。 难道PHP可以给参数定义类型了?

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • php swoole多进程/多线程用法示例【基于php7nts版】

    主要介绍了php swoole多进程/多线程用法,结合实例形式分析了基于php7nts版使用swoole进行多线程创建、调用相关操作技巧,需要的朋友可以参考下

  • PHP基于swoole多进程操作示例

    主要介绍了PHP基于swoole多进程操作,结合实例形式分析了php使用swoole多进程实现多个任务同时执行以及大任务划分成多个小任务相关操作技巧,需要的朋友可以参考下

  • 基于swoole的脚本管理,用于多进程和守护进程管理

    * PHP脚本需要跑一个或多个脚本消费队列/计算等任务 * 实现脚本退出后自动拉起,防止消费队列不工作,影响业务 * 其实supervisor可以轻松做个事情,这个只是PHP的另一种实现,不需要换技术栈 仅可供学习研究

  • php swoole 多进程发送邮件

    由于普通发送邮件的时候发送量上去以后比较慢,所以用php+swoole做了多进程发送邮件的demo

  • PHP多进程swoole应用实例&&swoole多进程process方法

    假设我们需要CURL多个地址,例如3个,每个需要1秒,如果我们同步运行至少需要3秒完成,这对用户的体验是非常不好的,我们可以引入swoole的process子进程开启三个进程同时curl则需要1秒处理好。 代码实现: &lt;...

  • PHP swoole的process模块创建和使用子进程操作示例

    主要介绍了PHP swoole的process模块创建和使用子进程操作,结合实例形式分析了swoole的进程管理process模块实现进程间通信相关操作技巧,需要的朋友可以参考下

  • php swoole多进程,基于swoole实现多进程任务处理

    一、swoole多进程实现简介0、通过swoole实现多进程,主要借助swoole_process类swoole_process::__construct(callable $function, bool $redirect_stdin_stdout = false,int $pipe_type = SOCK_DGRAM, bool $enable_...

  • php异步多线程swoole用法实例

    本文实例讲述了php异步多线程swoole用法。分享给大家供大家参考。具体分析如下: swoole重新定义PHP语言的高性能网络通信框架,提供了PHP语言的异步多线程服务,下面的实例就可以证实这一功能。 一般来说,Swoole提供...

  • PHP swoole中使用task进程异步的处理耗时任务应用案例分析

    主要介绍了PHP swoole中使用task进程异步的处理耗时任务,结合具体应用案例形式分析了PHP swoole中使用task进程异步的处理耗时任务相关使用场景、操作方法与注意事项,需要的朋友可以参考下

  • Redis延时消息队列基于swoole实现的多进程消费端

    Serve 基于Swoole Server 编写的消息队列消费系统

  • phpcrawler:php爬虫,基于swoole扩展的爬虫,php多进程多线程抓取

    PHP多进程/多线程爬虫 1、基于swoole扩展 2、抓取目前可采用curl或者snoopy 3、解析数据目前可使用 dom解析 其余类库会进一步支持 使用说明 1、安装swoole扩展 最新版本即可 sudo pecl install swoole 2、安装...

  • Swoole多进程开发注意事项

    承接上一篇博客,由于时间紧迫和条件所限,公司项目需要使用多进程/线程cli脚本,由于go目前没有成熟的cli框架,而我们有没有足够的时间和人力去造go的轮子,于是选择了用C/C++开发的Swoole框架。我之前的一篇博客...

  • Swoole多进程导出

    废话不说,直接看代码。 注意:该代码只能在命令模式下执行。不能在web调用请求导出。 &lt;?php $start_time = microtime(TRUE); $max_num = 5;... //父子进程共享一个mysql连接。会使mysql失去连接 $...

  • 基于swoole一款高性能多进程常驻内存型全栈框架.zip

    基于swoole一款高性能多进程常驻内存型全栈框架,内置WebSocket服务器、服务治理PhpRpc功能,不依赖传统的 PHP-FPM,可以用于构建高性能的Web系统、API、中间件、基础服务等等。 软件开发设计:PHP、应用软件开发、...

  • php_swoole_loader_php73_nzts_x64

    php_swoole_loader_php73_nzts_x64.zip压缩包

  • php协程 多线程,【swoole.2.01】多进程,多线程和协程

    前言在体验swoole的协程功能之前,需要先知道多进程,多线程和协程的区别。多进程典型的多进程结构就是耳熟能详的master-worker结构。swoole本身也是由master-maneger-worker-(task)组成的多进程结构。多进程将多个...

  • PHP环境安装swoole-loader扩展

    1、兼容Windows和Linux系统; 2、PHP版本:5.6、7.0、7.1、7.2、7.3; 3、安全版本:【线程安全】和【非线程安全】。

  • 三菱FX3G FX3S与四台E700变频器Modbus RTU通讯控制:正反转、频率设定与读取方案,三菱FX3G FX3S与四台E700变频器通讯:Modbus RTU协议实现正反转、频率设定与控制

    三菱FX3G FX3S与四台E700变频器Modbus RTU通讯控制:正反转、频率设定与读取方案,三菱FX3G FX3S与四台E700变频器通讯:Modbus RTU协议实现正反转、频率设定与控制,快速反馈与教程包含,三菱FX3G FX3S 485协议通讯四台三菱E700变频器程序资料 三菱FX3G FX3S+485bd扩展,采用modbus rtu协议,crc校验,通讯控制四台E700变频器,可以实现正反转,停止,频率的设定,频率,电流等的读取。 反馈快,使用方便,包括教程,plc和触摸屏程序,变频器参数设置和接线,别的变频器支持rtu协议也可以实现。 ,三菱FX系列PLC; 485协议通讯; 变频器E700; 通讯控制; 参数设置; 教程。,三菱PLC控制E700变频器:485协议通讯与程序设置全解

  • hyphen-nl-0.20050617-10.el7.x64-86.rpm.tar.gz

    1、文件内容:hyphen-nl-0.20050617-10.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/hyphen-nl-0.20050617-10.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

  • 西门子S7-1200PLC结构化编程在5轴伺服项目中的应用:模块化设计、触摸屏控制及电气图纸实战解析,西门子S7-1200PLC结构化编程实现多轴联动与多种伺服功能应用:CAD图纸、PLC程序和触摸屏

    西门子S7-1200PLC结构化编程在5轴伺服项目中的应用:模块化设计、触摸屏控制及电气图纸实战解析,西门子S7-1200PLC结构化编程实现多轴联动与多种伺服功能应用:CAD图纸、PLC程序和触摸屏程序协同运作。,西门子S7-1200PLC结构化编程5轴伺服项目 ,包含plc程序、威纶通触摸屏程序、cad电气图纸。 可以实现以下功能,规格有: 1.三轴机械手X轴-Y轴-Z轴联动取放料PTO脉冲定位控制台达B2伺服 2.台达伺服速度模式应用+扭矩模式应用实现收放卷 3.程序为结构化编程,每一功能为模块化设计,功能:自动_手动_单步_暂停后原位置继续运行_轴断电保持_报警功能_气缸运行及报警. 4.每个功能块可以无数次重复调用,可以建成库,用时调出即可 5.上位机采样威纶通触摸屏 6.参考本案例熟悉掌握结构化编程技巧,扩展逻辑思维。 博图14以上都可以打开 ,核心关键词:西门子S7-1200PLC; 结构化编程; 5轴伺服项目; PLC程序; 威纶通触摸屏程序; CAD电气图纸; 三轴机械手; PTO脉冲定位控制; 台达B2伺服; 速度模式应用; 扭矩模式应用; 模块化设计; 轴断电保

Global site tag (gtag.js) - Google Analytics