0

私のプロジェクトのユーザーごとに 5 分ごとに php スクリプトを実行する Cron があり、実行に約 4 分かかります。それを行うための「より軽い」方法を見つけることができませんでした!

しかし、ファイルが同じ「時間空間」で実行され、仮想メモリが増加することがあるため、メモリの問題に直面しています。

ループを軽量化しようとしましたが、それでもファイルごとに 25MB を消費しています。

皆さんに何か良い解決策があれば、私は感謝します:)。ここにあります

for($x = 0; $x <= 14; $x++)
{

    $r = rand(0,7);
    $jsonData = $this->getsomejson($value[$r]);
    if ($this->meta->code == 400){continue;}

    foreach ((array)$jsonData->data as $key=>$value)
    {
        $result = doSomething($value->id,$Token[$x]);
        if ($result==200){$L++;}
        $i++;
        unset($value);
    }      

    unset($r,$jsonData,$value);
}
4

2 に答える 2

0

「getsomejson」と「doSomething」の背後にあるコードが何であるかわからないため、ここでボトルネックが何であるかを言うのは難しいです。

これらが2つの非常に単純な関数である場合、問題は、巨大なjsonファイルをロードする必要があり、ファイルを圧縮しようとする可能性があることだと思います。

それ以外の場合は、関数「getsomejson」と「doSomething」についてさらに詳しく説明し、これらを最適化できるかどうかを確認する必要があります。

于 2012-11-15T23:00:06.883 に答える
0

cronジョブが開始するたびにシグナルまたはマークを設定できます。次に、このシグナルまたはマークをチェックして、実行中のジョブがあるかどうかを確認し、実行中のジョブがある場合は新しいジョブの開始を停止し、そうでない場合は開始します。

この信号またはマークをファイルまたはデータベース テーブルに保存できます。

$signal = get_it_from_file(); 
if ($signal < max) {
  //start to do our job
   ..............
   $signal = $signal+1;
   store_it_to_file();
} else {
      //skip it
}

max を調整して、同時に実行されるジョブの数を制御できます

于 2012-11-16T00:08:27.710 に答える