有没有办法检测在curl_multi_exec循环中完成了多少请求?


Is there any way of detecting how many requests finished within curl_multi_exec loop?

使用curl_multi_*,我想每x个请求执行一段代码,有任何方法这样做吗?

我想到的唯一方法是检查curl_multi_exec$still_running变量,不幸的是,它不起作用(它不一致,有时它从7跳到1而不经过6,5等)

这是我想出的代码(它并不总是工作,因为我说$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);

首先,curl_multi_exec()并行地驱动N个传输,并且对于每次调用,它都进一步驱动它们。$still_running计数器表示当curl_multi_exec()返回时仍在进行的传输的数量。并且它可能需要数百(或更多)调用来完成传输-或更多传输。

如果你想在传输完成时采取行动,那么你可以看到$still_running在它们完成时是如何被扣除的,或者你可以使用curl_multi_info_read()来真正看到每次传输完成的时间。

最后:你的代码示例需要注意!!由于缺少对curl_multi_select()的调用,这个程序将疯狂地忙碌循环,并花费100%的CPU时间,直到所有传输都完成。这可不是件好事