swoole 1.7.3 发布,增加PHP多进程管理模块

matyhtf
 matyhtf
发布于 2014年06月20日
收藏 42

本周日,来 OSC·年终盛典收割技术干货,get新技能!!>>>

swoole 1.7.3 发布,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()


本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:swoole 1.7.3 发布,增加PHP多进程管理模块
加载中

最新评论(13

橙汁儿
橙汁儿
我去,连一个破符号你们都要BB半天没用的,swoole 相当不错
梁选
梁选

引用来自“梁选”的评论

C/C++,JAVA,PHP怎么都离不开 { } 这个像女人胸部的符号,也难怪那么多人喜欢

引用来自“开源中国董事会主席”的评论

你见过哪些语言离开过?
至少c、c++、php、java、shell、javascript、actionscript、c#、lua 我没见离开过

引用来自“梁选”的评论

XML,ML,Python,Ruby,svg,HTML,and so on

引用来自“Pader”的评论

为什么不能用 { 呢?
难道像你说的 XML 那样 <if world="hello">DO Something</if> ??再说 {} 清晰明确,有什么不好的?

引用来自“梁选”的评论

能比不用更好么

引用来自“Pader”的评论

不用你能更清晰的表达出语义么,别跟我说 Python 的缩进,好的语言并不是代码越少越好,总要在简洁和能够清晰表达语义之间做个平衡。
我没打算要说。你是说高级的语言吧
Pader
Pader

引用来自“梁选”的评论

C/C++,JAVA,PHP怎么都离不开 { } 这个像女人胸部的符号,也难怪那么多人喜欢

引用来自“开源中国董事会主席”的评论

你见过哪些语言离开过?
至少c、c++、php、java、shell、javascript、actionscript、c#、lua 我没见离开过

引用来自“梁选”的评论

XML,ML,Python,Ruby,svg,HTML,and so on

引用来自“Pader”的评论

为什么不能用 { 呢?
难道像你说的 XML 那样 <if world="hello">DO Something</if> ??再说 {} 清晰明确,有什么不好的?

引用来自“梁选”的评论

能比不用更好么
不用你能更清晰的表达出语义么,别跟我说 Python 的缩进,好的语言并不是代码越少越好,总要在简洁和能够清晰表达语义之间做个平衡。
梁选
梁选

引用来自“梁选”的评论

C/C++,JAVA,PHP怎么都离不开 { } 这个像女人胸部的符号,也难怪那么多人喜欢

引用来自“开源中国董事会主席”的评论

你见过哪些语言离开过?
至少c、c++、php、java、shell、javascript、actionscript、c#、lua 我没见离开过

引用来自“梁选”的评论

XML,ML,Python,Ruby,svg,HTML,and so on

引用来自“Pader”的评论

为什么不能用 { 呢?
难道像你说的 XML 那样 <if world="hello">DO Something</if> ??再说 {} 清晰明确,有什么不好的?
能比不用更好么
Pader
Pader

引用来自“梁选”的评论

C/C++,JAVA,PHP怎么都离不开 { } 这个像女人胸部的符号,也难怪那么多人喜欢

引用来自“开源中国董事会主席”的评论

你见过哪些语言离开过?
至少c、c++、php、java、shell、javascript、actionscript、c#、lua 我没见离开过

引用来自“梁选”的评论

XML,ML,Python,Ruby,svg,HTML,and so on
为什么不能用 { 呢?
难道像你说的 XML 那样 <if world="hello">DO Something</if> ??再说 {} 清晰明确,有什么不好的?
姚文强
姚文强
官网 不稳定 随便点几下就报错了
梁选
梁选

引用来自“梁选”的评论

C/C++,JAVA,PHP怎么都离不开 { } 这个像女人胸部的符号,也难怪那么多人喜欢

引用来自“开源中国董事会主席”的评论

你见过哪些语言离开过?
至少c、c++、php、java、shell、javascript、actionscript、c#、lua 我没见离开过
XML,ML,Python,Ruby,svg,HTML,and so on
开源中国首席男司机
开源中国首席男司机
赞一个,韩少加油
开源中国董事会主席
开源中国董事会主席

引用来自“梁选”的评论

C/C++,JAVA,PHP怎么都离不开 { } 这个像女人胸部的符号,也难怪那么多人喜欢
你见过哪些语言离开过?
至少c、c++、php、java、shell、javascript、actionscript、c#、lua 我没见离开过
返回顶部
顶部