Php多進程實現(xiàn)代碼
更新時間:2018年05月07日 10:22:32 作者:e421083458
這篇文章主要介紹了Php多進程實現(xiàn)編程實例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
php多進程實現(xiàn)
PHP有一組進程控制函數(shù)(編譯時需要–enable-pcntl與posix擴展),使得php能在nginx系統(tǒng)中實現(xiàn)跟c一樣的創(chuàng)建子進程、使用exec函數(shù)執(zhí)行程序、處理信號等功能。
CentOS 6 下yum安裝php的,默認是不安裝pcntl的,因此需要單獨編譯安裝,首先下載對應版本的php,解壓后
cd php-version/ext/pcntl phpize ./configure && make && make install cp /usr/lib/php/modules/pcntl.so /usr/lib64/php/modules/pcntl.so echo "extension=pcntl.so" >> /etc/php.ini /etc/init.d/httpd restart
方便極了。
下面是示例代碼:
<?php
header('content-type:text/html;charset=utf-8' );
// 必須加載擴展
if (!function_exists("pcntl_fork")) {
die("pcntl extention is must !");
}
//總進程的數(shù)量
$totals = 3;
// 執(zhí)行的腳本數(shù)量
$cmdArr = array();
// 執(zhí)行的腳本數(shù)量的數(shù)組
for ($i = 0; $i < $totals; $i++) {
$cmdArr[] = array("path" => __DIR__ . "/run.php", 'pid' =>$i ,'total' =>$totals);
}
/*
展開:$cmdArr
Array
(
[0] => Array
(
[path] => /var/www/html/company/pcntl/run.php
[pid] => 0
[total] => 3
)
[1] => Array
(
[path] => /var/www/html/company/pcntl/run.php
[pid] => 1
[total] => 3
)
[2] => Array
(
[path] => /var/www/html/company/pcntl/run.php
[pid] => 2
[total] => 3
)
)
*/
pcntl_signal(SIGCHLD, SIG_IGN); //如果父進程不關心子進程什么時候結束,子進程結束后,內核會回收。
foreach ($cmdArr as $cmd) {
$pid = pcntl_fork(); //創(chuàng)建子進程
//父進程和子進程都會執(zhí)行下面代碼
if ($pid == -1) {
//錯誤處理:創(chuàng)建子進程失敗時返回-1.
die('could not fork');
} else if ($pid) {
//父進程會得到子進程號,所以這里是父進程執(zhí)行的邏輯
//如果不需要阻塞進程,而又想得到子進程的退出狀態(tài),則可以注釋掉pcntl_wait($status)語句,或寫成:
pcntl_wait($status,WNOHANG); //等待子進程中斷,防止子進程成為僵尸進程。
} else {
//子進程得到的$pid為0, 所以這里是子進程執(zhí)行的邏輯。
$path = $cmd["path"];
$pid = $cmd['pid'] ;
$total = $cmd['total'] ;
echo exec("/usr/bin/php {$path} {$pid} {$total}")."\n";
exit(0) ;
}
}
?>
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
Python中defaultdict與lambda表達式用法實例小結
這篇文章主要介紹了Python中defaultdict與lambda表達式用法,結合實例形式分析了Python中defaultdict與lambda表達式的功能、使用方法及相關注意事項,需要的朋友可以參考下2018-04-04
Python 中Django驗證碼功能的實現(xiàn)代碼
驗證碼是一種區(qū)分用戶是計算機還是人的公共全自動程序,很多用戶登錄和注冊系統(tǒng)都提供了圖形驗證碼功能。這篇文章主要介紹了Python 中Django驗證碼功能的實現(xiàn)代碼,需要的朋友可以參考下2019-06-06
Anaconda中導出環(huán)境的實現(xiàn)步驟
在 Anaconda 中導出環(huán)境是一種常用的做法,可以將當前的環(huán)境配置導出到一個文件中,本文主要介紹了Anaconda中導出環(huán)境的實現(xiàn)步驟,具有一定的參考價值2024-05-05

