swoole process进程 多分发
生活随笔
收集整理的這篇文章主要介紹了
swoole process进程 多分发
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<?php
/**
* Created by PhpStorm.
* User: whitneywang
* Date: 2018/6/4
* Time: 14:14
*/
//第二個參數為true時,不輸出TODO里的輸出內容,顯示會放到管道中
$process = new swoole_process(function (swoole_process $pro) {
//todo
//開啟HTTPserver 類似在linux里運行一個PHP文件
//exec第二個參數要為數組
//Swoole\Process::exec() expects parameter 2 to be array
$pro->exec('/home/work/bin/php',[ __DIR__.'/../server/http.php']);
}, false);
$pid = $process->start();
print_r($pid);
//回收子進程
swoole_process::wait();
?第二個參數為true只輸出進程PID:
第二個參數為false
輸出子進程
ps aux | grep process/process.php? 可以看主進程?15594 就是上面15595的父進程
pstree -p 15594 通過子進程ID,可看到樹結構
ps aft | grep http
場景:
curl
<?php class Curl { const URLS = [ 'http://baidu.com', 'http://qq.com', 'http://sina.com.cn' ]; function __construct() { echo 'process start time ' . time("Ymd H:i:s").PHP_EOL; } /** * 閉包里不好直接用變量,要用use * @return bool */ public function execute() { $workers = []; foreach (self::URLS as $key => $val) { $process = new swoole_process(function (swoole_process $pro) use ($key, $val) { //curl $content = $this-> curlData($val); echo $content . PHP_EOL; $pro->write($content. PHP_EOL); //$pro->write也可以直接輸出管道里的內容 }, true); //true的情況下,輸出信息會在管道里 $pid = $process->start(); $workers[$pid] = $process; } // 獲取管道里的內容 foreach ($workers as $pros) { print_r($pros->read()); } echo 'process end time ' . time("Ymd H:i:s"); } /** * 模擬CURL請求 * @param $url * @return string */ function curlData($url) { //正常這里寫CURL 或者file_get_content sleep sleep(1); return $url . ' succ'.PHP_EOL; } } $ws = new Curl(); $result = $ws->execute(1, 'test'); print_r($result . PHP_EOL); echo 'start:' . PHP_EOL;總結
以上是生活随笔為你收集整理的swoole process进程 多分发的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蒙巴顿智能锁怎么自动反锁?
- 下一篇: swoole 内存Memory