亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

php代碼優化問題

php代碼優化問題

PHP
LEATH 2019-03-07 19:37:19
linux環境下有a.php和b.php,現在代碼關系如下,執行完a.php需要6秒以上時間,請問怎樣優化才能讓a.php在3秒內執行完?a.php $test = new test(); $arr = ['重慶','山東','河北'] foreach($arr as $value){ $test->check($value) } b.php class test { public function check($value){ sleep(2); //后面會將結果寫入數據庫,不需要給返回值,此處不多寫了. } } 我想到的方法是將a.php改成下面這樣,但如果重慶,山東這些參數變成數組的話,又無法通過cli下傳遞過去(json_encode,serious等方法試過了,b.php接收后沒法還原成數組),請問應該如何處理? $arr = ['重慶','山東','河北'] foreach($arr as $value){ exec('php b.php $value > /dev/null &') }
查看完整描述

9 回答

?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

php單進程是堵塞的,你用sleep(2) 肯定會延遲加載。每一次循環占用2秒時間。所以要想辦法變成多進程執行。

php curl_multi_exec 這個函數可以幫助你。

查看完整回答
反對 回復 2019-03-18
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

cli當然可以參數,不過只能傳字符串,你把數組json_encode,之后json_decode一下就可以了。不過,為什么不搞個隊列呢。。。如果你那個check需要執行那么久,肯定是數據量比較多了。。
搞個隊列,把數據一個個扔進去,然后b的處理進程可以根據數據的大小,設置開啟的進程數。。這樣速度肯定是1秒就能處理完了

查看完整回答
反對 回復 2019-03-18
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

你用cli執行,又不要結果,想要的東西就是隊列啦,無非就是直接查詢數據庫的時間太久了,也可以試試NoSql

查看完整回答
反對 回復 2019-03-18
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

但如果重慶,山東這些參數變成數組的話,又無法通過cli下傳遞過去(json_encode,serious等方法試過了,b.php接收后沒法還原成數組

我用json_encode可以還原成數組

a.php

<?php
$arr = [[1,2,3],[4,5,6],[7,8,9]];
foreach ($arr as $val) {
    $val = json_encode($val);
    $b = __DIR__ . '/b.php';
    exec("nohup php $b $val >> b.out &");
}

b.php

<?php
$val = json_decode($argv[1]);
test::check($val);
class test {
    public function check($val) {
        sleep(2);
        print_r($val);
    }
}

b.out

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
)
Array
(
    [0] => 4
    [1] => 5
    [2] => 6
)
Array
(
    [0] => 7
    [1] => 8
    [2] => 9
)
查看完整回答
反對 回復 2019-03-18
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

如果只是 單純寫入數據庫,你可以先拼接成SQL,然后執行SQL查詢即可。

查看完整回答
反對 回復 2019-03-18
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

隊列, 或者 swoole

查看完整回答
反對 回復 2019-03-18
  • 9 回答
  • 0 關注
  • 585 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號