1

使用curl_multi_*,我想每个 x 请求执行一段代码,有什么办法吗?

我想出的唯一方法是检查$still_running变量 from curl_multi_exec,不幸的是,它不起作用(它不一致,有时它从 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);
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 回答