0

我正在尝试获取 40,000 个项目的列表并为每个项目运行一个 json 请求。这个过程非常慢,我怀疑这是因为每个 json 请求在下一个请求开始之前就完成了。

$result = mysql_query("SELECT * FROM $tableName");

while($row = mysql_fetch_array($result))
{
 checkRank($row['Domain']);
}

checkRank 运行的结果是:

$json = file_get_contents($jsonurl,0,null,null);

我想我可以一次运行 10 个 checkRanks 来加快这个过程?还有其他想法/建议吗?

更新:

例如,这个循环在 27 秒内通过我的数组。

for ($i=0; $i<=100; $i++) {
checkRank($domains[$i]);
$i++;
checkRank($domains[$i]);
$i++;
checkRank($domains[$i]);
$i++;
checkRank($domains[$i]);
$i++;
checkRank($domains[$i]);
$i++;
echo "checking " . $i . "<br/>";

}

下面的循环使用相同的数组需要 40 多秒。

for ($i=0; $i<=100; $i++) {
checkRank($domains[$i]);
echo "checking " . $i . "<br/>";

}

4

4 回答 4

1

http://www.phpied.com/simultaneuos-http-requests-in-php-with-curl/

这似乎是加快处理速度的好方法。感谢所有输入的家伙。

于 2012-09-11T21:54:02.053 回答
1

除非您还没有提到其他内容,否则最好的方法是执行一个 JSON 请求并将您的项目传递给它,然后返回相同数量的结果。这样,您可以最大限度地减少服务器响应时间。我不确定您是否要发送 40,000 件物品,您可能希望将其分成两部分,但您可以稍后进行测试。

所以你 checkRank() 看起来像

function  checkRank($domainsArray) {
$json = file_get_contents($jsonurl,$domainsArray);
}
于 2012-09-11T19:31:30.730 回答
1

不确定这是否会有很大帮助,因为我不使用 PHP,但我确实找到了这个。

如何在 PHP 应用程序中使用多线程

于 2012-09-11T19:32:24.460 回答
1

...很遗憾,我今天在 Stack Overflow 上读到 PHP 不支持线程,因为它需要对语言进行根本性更改...

https://github.com/krakjoe/pthreads

于 2012-09-13T18:30:02.233 回答