91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP多進程處理任務的案例

發布時間:2020-10-09 17:15:05 來源:億速云 閱讀:226 作者:小新 欄目:編程語言

這篇文章主要介紹了PHP多進程處理任務的案例,具有一定借鑒價值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

pcntl 模塊(非 Unix 類系統不支持此模塊)

一個 PHP 多進程簡單例子大概是這個樣子:

// 5 個子進程處理任務for ($i = 0; $i < 5; $i++) {
    $pid = pcntl_fork();    if ($pid == -1) {        die("could not fork");
    } elseif ($pid) {        echo "I'm the Parent $i\n";
    } else { // 子進程處理
        echo "I'm the Child $i\n";        // 業務處理
        exit($i); // 一定要注意退出子進程,否則 pcntl_fork() 會被子進程再 fork,帶來處理上的影響。
    }
}// 等待子進程執行結束while (pcntl_waitpid(0, $status) != -1) {
    $status = pcntl_wexitstatus($status);    echo "Child $status completed\n";
}

當然實際應用中我們不能夠這樣輸出代碼,不夠健壯,也不夠優雅,我所以找了個基于 pcntl 封裝的擴展包來使用。

spatie/async - 基于 pcntl 封裝的擴展包

以下是我使用 spatie/async 來優化一個多進程請求的例子

原代碼(耗時 20s 左右)- github.com/guanguans/m…

PHP多進程處理任務的案例

/**
 * @param string $keyword
 *
 * @return array
 */public function searchAll(string $keyword): array{
    $songAll = [];    foreach ($this->platforms as $platform) {
        $songAll = array_merge($songAll, $this->search($platform, $keyword));
    }    return $songAll;
}/**
 * @param string $platform
 * @param string $keyword
 *
 * @return mixed
 */public function search(string $platform, string $keyword){
    $meting = $this->getMeting($platform);

    $songs = json_decode($meting->format()->search($keyword), true);    foreach ($songs as $key => &$song) {
        $detail = json_decode($meting->format()->url($song['url_id']), true);        if (empty($detail['url'])) {            unset($songs[$key]);
        }
        $song = array_merge($song, $detail);
    }    unset($song);    return $songs;
}

改進后(耗時 4s 左右)- github.com/guanguans/m…

PHP多進程處理任務的案例

/**
 * @param string $keyword
 *
 * @return array
 */public function searchAll(string $keyword): array{
    $songAll = [];
    $pool = Pool::create();    foreach ($this->platforms as $platform) {
        $pool->add(function () use ($platform, $keyword) {            return $this->search($platform, $keyword);
        }, $this->getSerializedOutput())->then(function ($output) use (&$songAll) {
            $songAll = array_merge($songAll, $output);
        })->catch(function (\Throwable $exception) {            exit($exception->getMessage());
        });
    }
    $pool->wait();    return $songAll;
}/**
 * @return mixed
 */public function search(string $platform, string $keyword){
    $meting = $this->getMeting($platform);
    $songs = json_decode($meting->format()->search($keyword), true);

    $pool = Pool::create();    foreach ($songs as $key => &$song) {
        $pool->add(function () use ($meting, $song) {            return json_decode($meting->format()->url($song['url_id']), true);
        })->then(function ($output) use (&$songs, &$song, $key) {
            $song = array_merge($song, $output);            if (empty($song['url'])) {                unset($songs[$key]);
            }
        })->catch(function (\Throwable $exception) {            exit($exception->getMessage());
        });
    }    unset($song);
    $pool->wait();    return $songs;
}

感謝你能夠認真閱讀完這篇文章,希望小編分享PHP多進程處理任務的案例內容對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,遇到問題就找億速云,詳細的解決方法等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

php
AI

昭通市| 大城县| 格尔木市| 洪雅县| 广河县| 浦北县| 绍兴市| 民和| 莱阳市| 通辽市| 蒙自县| 大埔区| 泰安市| 施甸县| 临泽县| 尚义县| 武义县| 北辰区| 隆德县| 裕民县| 三台县| 嘉黎县| 百色市| 永康市| 南和县| 普安县| 深圳市| 富锦市| 迭部县| 南阳市| 临猗县| 香格里拉县| 克什克腾旗| 卢龙县| 安远县| 迁西县| 高邮市| 大荔县| 宣化县| 四平市| 清丰县|