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

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()


版权及转载说明

本站原创、转载文章欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区

本站转载文章版权归原作者所有,如发现本站文章涉嫌侵权请点击「联系我们」反馈,本站将立即给予删除

转载请注明:文章转载自:全分享社区 「http://www.aweb.cc

本文标题:swoole 1.7.3 发布,增加PHP多进程管理模块

本文地址:http://www.aweb.cc/article/detail/id/469.html

yii2-admin 插件使用简要教程 <<上一篇 下一篇>>收集整理PHP常用自定义验证函数