php 多进程设置,php多进程操作的三个实例

本文介绍了PHP在Linux环境下实现多进程操作的示例,包括使用`pcntl_fork()`函数创建进程,以及通过`pcntl_exec()`执行特定脚本。这些实例展示了如何在PHP中进行多进程并行执行,提高程序效率。同时,文章提醒注意PHP的PCNTL扩展仅适用于Unix-like系统,并在CLI模式下运行更佳。
摘要由CSDN通过智能技术生成

1,php多进程并行操作实例

复制代码 代码示例:

//多进程并行操作

/**

* 入口函数

* 将此文件保存为 ProcessOpera.php

* 在terminal中运行 /usr/local/php/bin/php ProcessOpera.php &

* 查看进程 ps aux|grep php

* edit www.jbxue.com

*/

ProcessOpera("runCode", array(), 8);

/**

* run Code

*/

function runCode($opt = array()) {

//需要在守护进程中运行的代码

}

/**

* $func为子进程执行具体事物的函数名称

* $opt为$func的参数 数组形式

* $pNum 为fork的子进程数量

*/

function ProcessOpera($func, $opts = array(), $pNum = 1) {

while(true) {

$pid = pcntl_fork();

if($pid == -1) {

exit("pid fork error");

}

if($pid) {

static $execute = 0;

$execute++;

if($execute >= $pNum) {

pcntl_wait($status);

$execute--;

}

} else {

while(true) {

//somecode

$func($opts);

sleep(1);

}

exit(0);

}

}

}

?>

2,Linux下PHP多进程的方法分享

PHP多进程:使用PHP的Process Control Functions(PCNTL/线程控制函数)

函数参考:http://www.jbxue.com/shouce/php5/book.pcntl.html

只能用在Unix Like OS,Windows不可用。

编译php时,要加上–enable-pcntl,且推荐仅仅在CLI模式运行,不要在WEB服务器环境运行。

一个PHP多进程的简单例子:

复制代码 代码示例:

declare(ticks=1);

$bWaitFlag = FALSE; /// 是否等待进程结束

$intNum = 10; /// 进程总数

$pids = array(); /// 进程PID数组

echo ("Start\n");

for($i = 0; $i < $intNum; $i++) {

$pids[$i] = pcntl_fork();/// 产生子进程,而且从当前行之下开试运行代码,而且不继承父进程的数据信息

if(!$pids[$i]) {

// 子进程进程代码段_Start

$str="";

sleep(5+$i);

for ($j=0;$j

echo "$i -> " . time() . " $str \n";

exit();

// 子进程进程代码段_End

}

}

if ($bWaitFlag)

{

for($i = 0; $i < $intNum; $i++) {

pcntl_waitpid($pids[$i], $status, WUNTRACED);

echo "wait $i -> " . time() . "\n";

}

}

echo ("End\n");

?>

3,PHP多进程并行执行脚本

php的进程不支持多线程,有些场景为了方便以及提高性能,可以用php实现多进程。

例如:

复制代码 代码示例:

#!/usr/bin/env php

$cmds=array(

array('/apps/bin/launcher.php','charge/promotion_props_stat.php','mobile',1),

array('/apps/bin/launcher.php','charge/promotion_props_stat.php','mobile',2),

array('/apps/bin/launcher.php','charge/promotion_props_stat.php','click',1),

array('/apps/bin/launcher.php','charge/promotion_props_stat.php','click',2),

array('/apps/bin/launcher.php','charge/promotion_props_stat.php',1),

array('/apps/bin/launcher.php','charge/promotion_props_stat.php',2)

);

foreach($cmds as $cmd){

$pid=pcntl_fork();

if($pid==-1){ //进程创建失败

die('fork child process failure!');

}

else if($pid){ //父进程处理逻辑

pcntl_wait($status,WNOHANG);

}

else{ //子进程处理逻辑

pcntl_exec('/usr/local/bin/php',$cmd);

}

}

?>

有关php多进程的例子,就介绍这三个了,希望对大家有所帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值