使用PHP进行cURL多线程处理

use*_*347 9 php curl nginx

我正在使用cURL来获取我已经存储在数据库中的20,000多个域名的一些排名数据.

我正在使用的代码是http://semlabs.co.uk/journal/object-oriented-curl-class-with-multi-threading.

数组$ competRequests是20,000个网站排名的competition.com api请求.

这是一个示例请求:http: //apps.compete.com/sites/stackoverflow.com/trended/rank/?apikey = xxxx&start_date = 201207&end_date = 201208&jsonp = ";

由于有20,000个这样的请求,我想将它们分解成块,所以我使用以下代码来实现这一点:

foreach(array_chunk($competeRequests, 1000) as $requests) {
    foreach($requests as $request) {
        $curl->addSession( $request, $opts );
    }

}
Run Code Online (Sandbox Code Playgroud)

这适用于以1,000个批量发送请求,但脚本执行时间太长.我已将max_execution_time增加到10分钟以上.

有没有办法从我的阵列发送1,000个请求然后解析结果然后输出状态更新然后继续下一个1,000直到数组为空?到目前为止,屏幕只是在脚本执行的整个时间内保持白色,这可能超过10分钟.

Man*_*ani 14

以上接受的答案已经过时,因此,必须正确回答正确的答案.

http://php.net/manual/en/function.curl-multi-init.php

现在,PHP支持同时获取多个URL.

有人写的功能非常好, http://archevery.blogspot.in/2013/07/php-curl-multi-threading.html

你可以使用它.

  • 正确答案是我当时给出的答案.没有必要纠正SO上的旧问题,只是为了跟上科学和发展的步伐.当时,这就是答案.你不知道是否有人使用旧的PHP版本,它们是可能的.不要假设每个人都运行最新的.如果您声称PHP中存在某种支持,您还应该提到您正在谈论的版本. (5认同)

Gle*_*las 8

这个总是为我做的工作... https://github.com/petewarden/ParallelCurl


Joe*_*ins 5

https://github.com/krakjoe/pthreads

在此处输入图片说明

您可能使用PHP进行线程化,所描述的代码只是可怕的线程编程,我不建议您这样做,但是我想向您展示20,000个线程的开销……这是18秒,在我当前的硬件上是具有8gig ram的Intel G620(双核),在服务器硬件上,您可以预期更快的结果...如何执行此类任务取决于您的资源以及所请求服务的资源...