PHP實現(xiàn)多進(jìn)程并行操作的詳解(可做守護(hù)進(jìn)程)
更新時間:2013年06月18日 10:04:06 作者:
本篇文章是對PHP實現(xiàn)多進(jìn)程并行操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
如下所示:
/**
* 入口函數(shù)
* 將此文件保存為 ProcessOpera.php
* 在terminal中運行 /usr/local/php/bin/php ProcessOpera.php &
* 查看進(jìn)程 ps aux|grep php
*/
ProcessOpera("runCode", array(), 8);
/**
* run Code
*/
function runCode($opt = array()) {
//需要在守護(hù)進(jìn)程中運行的代碼
}
/**
* $func為子進(jìn)程執(zhí)行具體事物的函數(shù)名稱
* $opt為$func的參數(shù) 數(shù)組形式
* $pNum 為fork的子進(jìn)程數(shù)量
*/
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);
}
}
}
復(fù)制代碼 代碼如下:
/**
* 入口函數(shù)
* 將此文件保存為 ProcessOpera.php
* 在terminal中運行 /usr/local/php/bin/php ProcessOpera.php &
* 查看進(jìn)程 ps aux|grep php
*/
ProcessOpera("runCode", array(), 8);
/**
* run Code
*/
function runCode($opt = array()) {
//需要在守護(hù)進(jìn)程中運行的代碼
}
/**
* $func為子進(jìn)程執(zhí)行具體事物的函數(shù)名稱
* $opt為$func的參數(shù) 數(shù)組形式
* $pNum 為fork的子進(jìn)程數(shù)量
*/
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);
}
}
}
相關(guān)文章
php對數(shù)組內(nèi)元素進(jìn)行隨機(jī)調(diào)換的方法
這篇文章主要介紹了php對數(shù)組內(nèi)元素進(jìn)行隨機(jī)調(diào)換的方法,通過自定義函數(shù)實現(xiàn)對數(shù)組內(nèi)元素進(jìn)行隨機(jī)調(diào)換的功能,涉及php操作數(shù)組的相關(guān)技巧,需要的朋友可以參考下2015-05-05