2018年swoole實(shí)戰(zhàn)7-進(jìn)程詳解

繼上篇 2018年swoole實(shí)戰(zhàn)6-異步redis

本篇演示 swoole進(jìn)程管理模塊

創(chuàng)建子進(jìn)程

新建 process.php

<?php
$process = new swoole_process(function(swoole_process $pro) {
    echo 'swoole創(chuàng)建進(jìn)程' . PHP_EOL;
}, false); // 如果設(shè)置為true货岭,終端就不會(huì)顯示標(biāo)準(zhǔn)輸出內(nèi)容

$pid = $process->start(); // 創(chuàng)建了一個(gè)子進(jìn)程
echo $pid . PHP_EOL; // 子進(jìn)程id

swoole_process::wait();
?  process  php process.php
67540
swoole創(chuàng)建進(jìn)程

調(diào)用外部程序

process.php

<?php
$process = new swoole_process(function(swoole_process $pro) {
    $pro->exec("/usr/local/opt/php@7.1/bin/php", [__DIR__.'/http_server.php']);
}, false); // 如果設(shè)置為true,終端就不會(huì)顯示標(biāo)準(zhǔn)輸出內(nèi)容

$pid = $process->start(); // 創(chuàng)建了一個(gè)子進(jìn)程
echo $pid . PHP_EOL; // 子進(jìn)程id

swoole_process::wait();

http_server.php

<?php
$http = new swoole_http_server('0.0.0.0', 9502);

$http->on('request', function ($request, $response) {
    $response->header("Content-Type", "text/html; charset=utf-8");
    $time = date('Y-m-d H:i:s', time());
    $response->end("<h1>{$time}--這是swoole提供的http服務(wù),修改代碼后要重啟服務(wù)才能生效</h1>");
});

$http->start();
?  process  php process.php
68526
[2018-07-27 16:38:53 @68526.0]  TRACE   Create swoole_server host=0.0.0.0, port=9502, mode=3, type=1

瀏覽器訪問(wèn) http://127.0.0.1:9502/

查看進(jìn)程樹(shù)

通過(guò) pstree 工具可以查看相關(guān)進(jìn)程的關(guān)系

brew install pstree # mac 安裝 pstree
ps aux | grep process.php  # 獲取進(jìn)程id
pstree -p 69932 # 顯示進(jìn)程樹(shù)

多進(jìn)程的實(shí)戰(zhàn)案例

如果用php去抓取網(wǎng)頁(yè)內(nèi)容,傳統(tǒng)的方式是用一個(gè)for循環(huán),將url逐個(gè)遍歷赘理,假設(shè)每個(gè)url耗時(shí)1秒,6個(gè)url就需要耗時(shí)6s,這種方式效率太低了鞠呈。通過(guò)swoole的進(jìn)程管理模塊,我們可以實(shí)現(xiàn)多進(jìn)程抓取內(nèi)容右钾,每個(gè)進(jìn)程對(duì)應(yīng)負(fù)責(zé)一個(gè)url蚁吝,從而實(shí)現(xiàn)1秒完成抓取任務(wù)

新建 process_curl.php

<?php
$startTime = time();
echo "程序開(kāi)始執(zhí)行時(shí)間:" . date("H:i:s") . PHP_EOL;
$workers = [];
$urls = [
    'http://www.zhihu.com',
    'http://www.baidu.com',
    'http://www.reibang.com',
    'http://www.huxiu.com',
    'http://www.qq.com',
];

for ($i = 0; $i < count($urls); $i++) {
    // 每次開(kāi)啟一個(gè)子進(jìn)程
    $process = new swoole_process(function (swoole_process $worker) use($i, $urls) {
        $content = getContent($urls[$i]);
        $worker->write($content . PHP_EOL);
    }, true);
    $pid = $process->start();
    $workers[$pid] = $process;
}

foreach ($workers as $process) {
    echo $process->read();
}

// 模擬獲取數(shù)據(jù), 耗時(shí)1秒
function getContent($url) {
    sleep(1);
    return $url . " 執(zhí)行完成..." . PHP_EOL;
}
$runTime = time() - $startTime;
echo "程序執(zhí)行時(shí)間為{$runTime}秒" . PHP_EOL;

執(zhí)行結(jié)果:

?  process  php process_curl.php
程序開(kāi)始執(zhí)行時(shí)間:17:13:54
http://www.zhihu.com 執(zhí)行完成...

http://www.baidu.com 執(zhí)行完成...

http://www.reibang.com 執(zhí)行完成...

http://www.huxiu.com 執(zhí)行完成...

http://www.qq.com 執(zhí)行完成...

程序執(zhí)行時(shí)間為1秒

如果覺(jué)得本文對(duì)你有所幫助旱爆,點(diǎn)個(gè)贊,或者賞杯咖啡錢窘茁,你的認(rèn)可對(duì)我很重要

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怀伦,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子山林,更是在濱河造成了極大的恐慌房待,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件驼抹,死亡現(xiàn)場(chǎng)離奇詭異桑孩,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)框冀,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門流椒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人左驾,你說(shuō)我怎么就攤上這事镣隶。” “怎么了诡右?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵安岂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我帆吻,道長(zhǎng)域那,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任猜煮,我火速辦了婚禮次员,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘王带。我一直安慰自己淑蔚,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布愕撰。 她就那樣靜靜地躺著刹衫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搞挣。 梳的紋絲不亂的頭發(fā)上带迟,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天,我揣著相機(jī)與錄音囱桨,去河邊找鬼仓犬。 笑死,一個(gè)胖子當(dāng)著我的面吹牛舍肠,可吹牛的內(nèi)容都是我干的搀继。 我是一名探鬼主播窘面,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼律歼!你這毒婦竟也來(lái)了民镜?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤险毁,失蹤者是張志新(化名)和其女友劉穎制圈,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體畔况,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鲸鹦,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了跷跪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片馋嗜。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖吵瞻,靈堂內(nèi)的尸體忽然破棺而出葛菇,到底是詐尸還是另有隱情,我是刑警寧澤橡羞,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布眯停,位于F島的核電站,受9級(jí)特大地震影響卿泽,放射性物質(zhì)發(fā)生泄漏莺债。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一签夭、第九天 我趴在偏房一處隱蔽的房頂上張望齐邦。 院中可真熱鬧,春花似錦第租、人聲如沸措拇。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)儡羔。三九已至,卻和暖如春璧诵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仇冯。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工之宿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人苛坚。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓比被,卻偏偏與公主長(zhǎng)得像色难,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子等缀,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前文再續(xù)枷莉,就書(shū)接上一回,隨著與Server尺迂、TCP笤妙、Protocol的邂逅,Swoole終于迎來(lái)了自己的故事噪裕,今天...
    蝸牛淋雨閱讀 1,736評(píng)論 1 14
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,185評(píng)論 25 707
  • 文/喜樂(lè) 理想中的愛(ài)情大概是海子先生說(shuō)的那樣——你來(lái)人間一趟蹲盘,你要看看太陽(yáng),和你的心上人膳音,一起走在街上召衔。理想中的愛(ài)...
    喜樂(lè)Sun閱讀 551評(píng)論 1 0
  • 沈橋路 文/趙春苗 我的牽掛,拉得這么長(zhǎng) 長(zhǎng)過(guò)昌銅高速祭陷,長(zhǎng)過(guò)生米大橋 長(zhǎng)過(guò)苍凛,一通電話后的沉默 你還習(xí)慣嗎?如一支鉛...
    鳥(niǎo)人的羽毛閱讀 363評(píng)論 0 2
  • 文:快樂(lè)人生 巍峨峽谷萬(wàn)青山兵志, 峭壁深幽一線環(huán)醇蝴。 云霧妖嬈盤錦繡, 蒼穹翠玉太行間毒姨。 和@快樂(lè)人生 文:云水禪心...
    快樂(lè)中堅(jiān)持閱讀 474評(píng)論 0 2