1

を使用してcurl_multi_*、x リクエストごとにコードを実行したいのですが、実行する方法はありますか?

私が思いついた唯一の方法は、$still_runningからの変数をチェックすることですがcurl_multi_exec、残念ながら、それは機能しません(一貫性がなく、6、5などを通過せずに7から1にジャンプすることがあります..)

これが私が思いついたコードです($still_running一貫性がないと言ったように、常に機能するとは限りません):

    $still_running = null;
    $callbackExecuted = 1;//Counts how many times callback function was executed.

    //execute the handles
    do
    {
        //Execute callback every 5 requests
        if ($numberOfRequests - $still_running === 5 * $callbackExecuted)
        {
            callback();
            $callbackExecuted++;
        }

        curl_multi_exec($mh, $still_running);
    } while ($still_running > 0);
4

1 に答える 1

1

まず、curl_multi_exec() は N 個の転送を並行して駆動し、呼び出しごとにそれらを少し先に駆動します。$still_running カウンターは、curl_multi_exec() が戻ったときにまだ進行中の転送の数です。そして、転送を完了するために数百 (またはそれ以上) の呼び出しが必要になる可能性があります。

転送が完了したときにアクションを実行したい場合は、完了時に $still_running が差し引かれる様子を確認したり、curl_multi_info_read () を使用して各転送がいつ完了したかを実際に確認したりできます。

最後に: あなたのコード例は注意が必要です!! curl_multi_select ()への呼び出しがないため、このプログラムは狂ったようにビジー ループし、すべての転送が完了するまで 100% の CPU 時間を費やします。それはあまりいいことではありません。

于 2013-05-13T06:46:46.407 に答える